Agent 开发的三个层次

在 LangChain 的技术栈中,Agent 开发被划分为三个层次

  • 底层:Agent Runtime(运行时层)— LangGraph
  • 中间层:Agent Framework(框架层)— LangChain
  • 上层:Agent Harness(工具层)— Deep Agents

Agent 开发三层架构:底层 LangGraph (Runtime)、中间层 LangChain (Framework)、上层 Deep Agents (Harness),侧边 LangSmith 贯穿提供可观测性

Harness的作用

看看市面上那些真正能完成复杂任务的 Agent 产品——Claude Code、Manus、Cursor——它们虽然各有特色,但核心能力惊人地相似:

  1. 都有文件系统操作能力:能读写、搜索、编辑文件
  2. 都有任务规划能力:能把大任务拆成小步骤
  3. 都有子任务委派能力:能把部分工作交给子 Agent
  4. 都有上下文管理策略:防止对话过长导致 LLM “失忆”

这些共性不是巧合。当 Agent 面对的任务足够复杂时,这些能力就是必需的。而 Agent Harness 的价值就在于:把这些被验证过的模式固化下来,让你不需要每次都从头实现

Deep Agents 的核心设计理念:Context Engineering

Deep Agents 的解决方案是引入一个虚拟文件系统,让 Agent 像人类一样工作:

  • 需要读文件时,调用 read_file 按需读取
  • 需要记录中间结果时,调用 write_file 写到文件里
  • 需要搜索时,调用 grepglob 查找
  • 大文件只读取需要的部分(offset / limit 参数)

这样,Agent 的上下文里只保留当前步骤真正需要的信息,其余的都存在文件系统中,需要时再取。

更巧妙的是,这个”文件系统”是虚拟的、可插拔的

  • 可以是内存中的临时存储(开发调试用)
  • 可以是本地磁盘(处理真实文件)
  • 可以是持久化数据库(跨会话保持记忆)
  • 可以是远程沙箱(安全执行代码)
  • 甚至可以混合使用(不同路径路由到不同后端)

这就是 Context Engineering——不是把所有信息都喂给 LLM,而是为 LLM 构建一个高效获取和管理信息的基础设施

Context Engineering 对比:左侧传统 Prompt Stuffing 导致上下文溢出、注意力稀释、不可扩展;右侧 Deep Agents 通过虚拟文件系统按需读取,实现结构化存储和无限扩展

Deep Agents、Claude Agent SDK、Codex SDK

三大 Agent Harness 对比:Deep Agents(模型无关、虚拟文件系统、长期记忆)、Claude Agent SDK(Claude 深度集成、Hooks 系统)、Codex SDK(OS 级沙箱、MCP Server 模式),共同能力包括文件读写、Shell 执行、规划、子 Agent 等

真正的差异在架构层面:

Deep Agents 的独有优势:

  • 模型灵活性:随时切换模型提供商,不锁定任何厂商。这对企业级应用至关重要
  • 长期记忆(Long-term Memory):通过 Memory Store 实现跨会话、跨线程的持久化记忆。Claude Agent SDK 和 Codex SDK 都不支持这一特性
  • 虚拟文件系统 + 可插拔后端:将文件操作抽象为统一接口,后端可以是内存、磁盘、数据库或沙箱
  • Sandbox-as-Tool 模式:Agent 在本地运行,但可以把特定操作(如代码执行)发送到远程沙箱中执行。这是 Deep Agents 独有的设计
  • 生产部署:通过 LangGraph Platform 部署,配合 LangSmith 实现完整的可观测性

Claude Agent SDK 的独有优势:

  • 与 Claude 模型的深度集成
  • Hooks 系统,便于拦截和控制 Agent 行为
  • 支持自定义 HTTP/WebSocket 层和容器化部署

Codex SDK 的独有优势:

  • OS 级别的沙箱模式(read-onlyworkspace-writedanger-full-access
  • 内置 MCP Server 模式
  • 云端执行环境
实战中如何抉择?
  • 如果你需要模型灵活性和跨会话记忆 → Deep Agents
  • 如果你的团队全面使用 Claude → Claude Agent SDK
  • 如果你的团队全面使用 OpenAI → Codex SDK
  • 如果你需要完整的生产部署和可观测性方案 → Deep Agents + LangSmith
Deep Agents 在整个 LangChain 生态中的地位

Deep Agents 技术全景图:顶层 Deep Agents (Harness) 包含文件系统工具、任务规划、子 Agent、可插拔存储后端、长期记忆五大模块;中间层 LangChain (Framework) 和 LangGraph (Runtime);底层 LangSmith 提供可观测性

创建项目
# 示例
cd D:\Develop\projects\python
# 创建项目名称文件夹
mkdir deepagents-demo
# 进入目录
cd deepagents-demo
# 初始化项目
uv init .
# 添加依赖项
uv add deepagents langchain-openai dotenv tavily-python
# 创建环境变量文件
New-item -type file .env
# 使用文本编辑器编辑.env
API_KEY=sk-sdsaf324erfasdas
MODEL_NAME=zai-org/GLM-5.2
BASE_URL=https://api.siliconflow.cn/v1
TARVILY_API_KEY=lsv2_pt_55ae7b961f3f423e9b366a9s54886489c_c3f874548f4b
代码实战
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from deepagents import create_deep_agent
from typing import Literal
from tavily import TavilyClient

# 加载.env环境变量信息
load_dotenv()

# 接入模型
model = ChatOpenAI(
    model=os.getenv("MODEL_NAME"),
    api_key=os.getenv("API_KEY"),
    base_url=os.getenv("BASE_URL"),
    temperature=0,
)

# 获取天气工具
def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"


common_agent = create_deep_agent(
    model=model,
    tools=[get_weather],
    system_prompt="You are a helpful assistant.",
)

common_result = common_agent.invoke(
    {"messages": [{"role": "user", "content": "北京今天天气怎么样?"}]}
)

print(common_result["messages"][-1].content)

# 计算器    
def calculate(expression: str) -> float:
    """Evaluate a math expression and return the result.

    Args:
        expression: A math expression, e.g. "1 + 2 * 3".
    """
    return eval(expression)

# 
def convert_currency(amount: float, from_currency: str, to_currency: str) -> dict:
    """Convert an amount from one currency to another.

    Args:
        amount: The amount to convert.
        from_currency: The source currency code, e.g. "USD".
        to_currency: The target currency code, defaults to "CNY".
    """
    # 这里用固定汇率做演示;真实场景可接入汇率 API
    rates = {"USD": 7.2, "CNY": 1.0, "EUR": 7.8}
    cny = amount * rates[from_currency]
    return {"amount": round(cny / rates[to_currency], 2), "currency": to_currency}

calculate_agent = create_deep_agent(
    model=model,
    tools=[calculate, convert_currency],
    system_prompt="你是一个计算助手,能帮用户做数学运算和货币换算。",
)

calculate_result = calculate_agent.invoke(
    {"messages": [{"role": "user", "content": "帮我把 100 美元换算成人民币,再用它乘以 1.08 的通胀系数。"}]}
)
print(calculate_result["messages"][-1].content)

# 网络搜索工具
def internet_search(
    query: str,
    max_results: int = 5,
    topic: Literal["general", "news", "finance"] = "general",
    include_raw_content: bool = False,
) -> dict:
    """Perform an internet search for a given query."""
    tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))
    return tavily_client.search(
        query=query,
        max_results=max_results,
        topic=topic,
        include_raw_content=include_raw_content,
    )
    
research_instructions = """你是一位专业的研究员。
你的工作是进行深入研究,然后撰写一份完整的研究报告。

你可以使用 internet_search 工具搜索互联网获取信息。
"""
search_agent = create_deep_agent(
    model=model,
    tools=[internet_search],
    system_prompt=research_instructions,
)

search_result = search_agent.invoke(
    {"messages": [{"role": "user", "content": "什么是 LangGraph?"}]}
)

print(search_result["messages"][-1].content)
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐