Agent 开发的三个层次
在 LangChain 的技术栈中,Agent 开发被划分为三个层次
- 底层:Agent Runtime(运行时层)--- LangGraph
- 中间层:Agent Framework(框架层)--- LangChain
- 上层:Agent Harness(工具层)--- Deep Agents

Harness的作用
看看市面上那些真正能完成复杂任务的 Agent 产品------Claude Code、Manus、Cursor------它们虽然各有特色,但核心能力惊人地相似:
- 都有文件系统操作能力:能读写、搜索、编辑文件
- 都有任务规划能力:能把大任务拆成小步骤
- 都有子任务委派能力:能把部分工作交给子 Agent
- 都有上下文管理策略:防止对话过长导致 LLM "失忆"
这些共性不是巧合。当 Agent 面对的任务足够复杂时,这些能力就是必需的。而 Agent Harness 的价值就在于:把这些被验证过的模式固化下来,让你不需要每次都从头实现。
Deep Agents 的核心设计理念:Context Engineering
Deep Agents 的解决方案是引入一个虚拟文件系统,让 Agent 像人类一样工作:
- 需要读文件时,调用
read_file按需读取 - 需要记录中间结果时,调用
write_file写到文件里 - 需要搜索时,调用
grep或glob查找 - 大文件只读取需要的部分(
offset/limit参数)
这样,Agent 的上下文里只保留当前步骤真正需要的信息,其余的都存在文件系统中,需要时再取。
更巧妙的是,这个"文件系统"是虚拟的、可插拔的:
- 可以是内存中的临时存储(开发调试用)
- 可以是本地磁盘(处理真实文件)
- 可以是持久化数据库(跨会话保持记忆)
- 可以是远程沙箱(安全执行代码)
- 甚至可以混合使用(不同路径路由到不同后端)
这就是 Context Engineering------不是把所有信息都喂给 LLM,而是为 LLM 构建一个高效获取和管理信息的基础设施。

Deep Agents、Claude Agent SDK、Codex SDK

真正的差异在架构层面:
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-only、workspace-write、danger-full-access) - 内置 MCP Server 模式
- 云端执行环境
实战中如何抉择?
- 如果你需要模型灵活性和跨会话记忆 → Deep Agents
- 如果你的团队全面使用 Claude → Claude Agent SDK
- 如果你的团队全面使用 OpenAI → Codex SDK
- 如果你需要完整的生产部署和可观测性方案 → Deep Agents + LangSmith
Deep Agents 在整个 LangChain 生态中的地位

创建项目
powershell
# 示例
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
代码实战
python
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)