📚 定制化概述

DeepAgents 提供三个主要的定制化维度, 让你能够根据具体需求调整 Agent 的行为和能力:

💡 三大定制化维度
维度 用途 示例
模型选择 选择合适的底层 LLM GPT-4o, Claude Sonnet, Gemini
系统提示词 定义 Agent 的角色和行为 研究助手、代码助手、客服
工具集合 扩展 Agent 的能力 搜索、数据库、API 调用
graph TB Start["创建 DeepAgent"] --> Model["1. 选择模型
GPT-4o / Claude / Gemini"] Model --> Prompt["2. 定制系统提示词
定义角色和任务"] Prompt --> Tools["3. 配置工具集
内置工具 + 自定义工具"] Tools --> Agent["完整的 DeepAgent"] Agent --> Use1["研究助手"] Agent --> Use2["代码助手"] Agent --> Use3["客服机器人"] Agent --> Use4["数据分析"] style Start fill:#e0e0e0,color:#000 style Model fill:#3b82f6,color:#fff style Prompt fill:#10b981,color:#fff style Tools fill:#f59e0b,color:#fff style Agent fill:#8b5cf6,color:#fff
✨ 定制化原则

官方文档强调:"每个针对特定用例的 DeepAgent 都应该包含专门的系统提示词"。 精心设计的提示词是有效定制化的关键。

🤖 1. 模型选择

DeepAgents 默认使用 claude-sonnet-4-5-20250929, 但你可以选择任何支持的模型。

方法 1: 使用模型字符串

Python 🟢 基础
"""
模型选择 - 使用模型字符串
"""
from deepagents import create_deep_agent

# 使用 GPT-4o
agent_gpt = create_deep_agent(model="gpt-4o")

# 使用 Claude Opus
agent_opus = create_deep_agent(model="claude-opus-4-5-20251101")

# 使用 Gemini
agent_gemini = create_deep_agent(model="gemini-2.0-flash-exp")

方法 2: 使用 LangChain 模型对象

Python 🟡 中级
"""
模型选择 - 使用 LangChain 模型对象(更精细控制)
"""
from langchain import init_chat_model
from deepagents import create_deep_agent

# 初始化模型对象,配置参数
model = init_chat_model(
    model="gpt-4o",
    model_provider="openai",
    temperature=0.7,          # 控制随机性
    max_tokens=4096,          # 最大输出长度
    timeout=60.0              # 超时设置
)

# 创建 DeepAgent
agent = create_deep_agent(model=model)

# 调用 Agent
result = agent.invoke({
    "messages": [{
        "role": "user",
        "content": "分析当前 AI 技术趋势"
    }]
})

模型选择建议

模型 特点 适用场景 成本
claude-opus-4-5 最强大,推理能力最佳 复杂研究、深度分析 💰💰💰
claude-sonnet-4-5 性能与成本平衡(默认) 通用任务、生产环境 💰💰
gpt-4o 多模态支持,速度快 图像处理、快速响应 💰💰
gemini-2.0-flash 速度最快,成本低 高并发、简单任务 💰

📝 2. 系统提示词定制

系统提示词定义了 Agent 的角色、能力和行为规范, 是定制化的核心。

基础示例:研究助手

Python 🟡 中级
"""
系统提示词定制 - 研究助手
"""
from deepagents import create_deep_agent

research_instructions = """你是一位专业的研究助手。你的任务是进行深入研究,然后撰写精炼的报告。

## 核心职责

1. **信息收集**: 使用网络搜索工具收集权威、最新的信息
2. **深度分析**: 对收集到的信息进行批判性分析和综合
3. **结构化输出**: 生成清晰、有条理的研究报告

## 工作流程

1. **理解需求**: 仔细分析用户的研究问题
2. **制定计划**: 使用 write_todos 工具分解研究任务
3. **执行搜索**: 进行多次有针对性的搜索,覆盖不同角度
4. **信息管理**: 使用文件系统工具保存和组织大量数据
5. **撰写报告**: 综合信息,生成结构化报告

## 输出格式

# [主题] 研究报告

## 执行摘要
[3-5 句话总结核心发现]

## 详细分析
[分段展开,包含数据和引用]

## 关键发现
- 发现 1
- 发现 2
- ...

## 参考来源
- 来源 1
- 来源 2
- ...

## 注意事项

- 优先使用权威来源
- 交叉验证重要信息
- 标注信息来源
- 保持客观中立
"""

# 创建研究助手 Agent
research_agent = create_deep_agent(
    model="gpt-4o",
    system_prompt=research_instructions
)

# 使用 Agent
result = research_agent.invoke({
    "messages": [{
        "role": "user",
        "content": "研究 2024 年 AI Agent 的最新进展"
    }]
})

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

高级示例:代码审查助手

Python 🔴 高级
"""
系统提示词定制 - 代码审查助手
"""
from deepagents import create_deep_agent

code_review_instructions = """你是一位资深的代码审查专家,专注于 Python 代码质量。

## 核心能力

1. **代码分析**: 深入理解代码逻辑和架构
2. **问题识别**: 发现潜在的 bug、性能问题和安全隐患
3. **最佳实践**: 推荐符合 Python 最佳实践的改进方案
4. **文档评估**: 检查代码注释和文档的完整性

## 审查标准

### 1. 代码质量
- 可读性和可维护性
- 命名规范(PEP 8)
- 函数和类的设计
- 复杂度控制

### 2. 性能优化
- 算法效率
- 数据结构选择
- 资源使用(内存、CPU)
- 并发和异步处理

### 3. 安全性
- 输入验证
- SQL 注入防护
- XSS 防护
- 敏感数据处理

### 4. 测试覆盖
- 单元测试
- 边界条件
- 错误处理

## 输出格式

# 代码审查报告

## 总体评分
- 代码质量: [1-10]
- 性能: [1-10]
- 安全性: [1-10]
- 可维护性: [1-10]

## 主要问题
1. **[严重性]** 问题描述
   - 位置: 文件:行号
   - 原因: ...
   - 建议: ...

## 优点
- ...

## 改进建议
1. ...
2. ...

## 工作流程

1. 使用 read_file 读取代码文件
2. 系统分析代码结构和逻辑
3. 识别问题并分类
4. 生成详细的审查报告
5. 如需深入分析,使用 task 工具创建专门的子 Agent
"""

# 创建代码审查 Agent
code_review_agent = create_deep_agent(
    model="claude-sonnet-4-5-20250929",
    system_prompt=code_review_instructions
)

# 使用 Agent 审查代码
result = code_review_agent.invoke({
    "messages": [{
        "role": "user",
        "content": "请审查 src/main.py 文件中的代码"
    }]
})

系统提示词设计技巧

✨ 提示词最佳实践
  • 明确角色:清晰定义 Agent 是谁,有什么专长
  • 列出职责:详细说明 Agent 应该做什么
  • 提供流程:给出执行任务的步骤指南
  • 定义格式:指定输出的结构和格式
  • 设置约束:说明不应该做什么
  • 举例说明:提供具体的示例(如适用)

🔧 3. 工具定制

DeepAgents 包含内置工具,你也可以添加自定义工具 来扩展 Agent 的能力。

内置工具列表

所有 DeepAgent 自动包含以下工具:

工具 功能 用途
write_todos 更新待办事项列表 任务规划和分解
ls 列出文件系统文件 浏览文件结构
read_file 读取文件内容 加载已保存的数据
write_file 创建新文件 保存搜索结果、中间数据
edit_file 修改现有文件 更新已保存的数据
task 生成子代理 委派专门的任务

添加自定义工具

Python 🟡 中级
"""
添加自定义工具 - 网络搜索
"""
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent

# 初始化 Tavily 客户端
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])

def internet_search(
    query: str,
    max_results: int = 5,
    topic: Literal["general", "news", "finance"] = "general",
    include_raw_content: bool = False,
) -> dict:
    """
    执行网络搜索

    Args:
        query: 搜索查询字符串
        max_results: 返回的最大结果数(1-10)
        topic: 搜索主题类型
        include_raw_content: 是否包含网页原始内容

    Returns:
        包含搜索结果的字典
    """
    return tavily_client.search(
        query=query,
        max_results=max_results,
        include_raw_content=include_raw_content,
        topic=topic,
    )

# 创建包含自定义工具的 Agent
agent = create_deep_agent(
    model="gpt-4o",
    tools=[internet_search],  # 添加自定义工具
    system_prompt="你是研究助手,可以使用网络搜索收集信息。"
)

# 使用 Agent
result = agent.invoke({
    "messages": [{
        "role": "user",
        "content": "搜索 LangChain 的最新功能"
    }]
})

多个自定义工具示例

Python 🔴 高级 - 完整示例
"""
多个自定义工具 - 数据分析 Agent
"""
import os
import sqlite3
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent

# 工具 1: 网络搜索
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])

def internet_search(query: str, max_results: int = 5) -> dict:
    """搜索网络信息"""
    return tavily_client.search(query, max_results=max_results)

# 工具 2: 数据库查询
def query_database(sql: str) -> list:
    """
    执行 SQL 查询

    Args:
        sql: SQL 查询语句(只读,SELECT 语句)

    Returns:
        查询结果列表
    """
    # 验证是否为只读查询
    if not sql.strip().upper().startswith("SELECT"):
        return {"error": "仅支持 SELECT 查询"}

    try:
        conn = sqlite3.connect("data/analytics.db")
        cursor = conn.cursor()
        cursor.execute(sql)
        results = cursor.fetchall()
        conn.close()
        return results
    except Exception as e:
        return {"error": str(e)}

# 工具 3: 数据可视化
def create_chart(data: list, chart_type: Literal["bar", "line", "pie"]) -> str:
    """
    创建数据图表

    Args:
        data: 图表数据
        chart_type: 图表类型

    Returns:
        图表文件路径
    """
    # 简化示例:实际会使用 matplotlib 或 plotly
    import json
    chart_path = f"charts/chart_{chart_type}.json"

    # 保存图表数据
    with open(chart_path, "w") as f:
        json.dump({"type": chart_type, "data": data}, f)

    return chart_path

# 工具 4: 发送通知
def send_notification(message: str, channel: Literal["email", "slack"] = "slack") -> dict:
    """
    发送通知消息

    Args:
        message: 通知内容
        channel: 通知渠道

    Returns:
        发送状态
    """
    # 简化示例:实际会调用邮件或 Slack API
    print(f"[{channel.upper()}] {message}")
    return {"status": "sent", "channel": channel}

# 创建数据分析 Agent
data_analyst_prompt = """你是一位数据分析专家。你可以:

1. 使用 query_database 查询数据库
2. 使用 internet_search 搜索外部信息
3. 使用 create_chart 创建可视化图表
4. 使用 send_notification 发送分析报告

工作流程:
1. 理解用户的分析需求
2. 从数据库查询相关数据
3. 必要时搜索外部信息进行对比
4. 创建可视化图表
5. 生成分析报告
6. 发送通知
"""

data_agent = create_deep_agent(
    model="claude-sonnet-4-5-20250929",
    tools=[
        internet_search,
        query_database,
        create_chart,
        send_notification
    ],
    system_prompt=data_analyst_prompt
)

# 使用 Agent 进行数据分析
result = data_agent.invoke({
    "messages": [{
        "role": "user",
        "content": """分析最近 30 天的销售数据:
        1. 查询数据库获取销售数据
        2. 创建趋势图表
        3. 与去年同期对比
        4. 将分析报告发送到 Slack"""
    }]
})

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

🎯 完整定制示例

模型选择 + 系统提示词 + 自定义工具结合, 创建一个完整的定制化 DeepAgent:

Python 🔴 高级 - 生产级示例
"""
完整定制示例 - 技术支持 Agent
"""
import os
from typing import Literal
from langchain import init_chat_model
from tavily import TavilyClient
from deepagents import create_deep_agent

# ========== 1. 定义自定义工具 ==========

tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])

def search_documentation(query: str, product: Literal["langchain", "langgraph"] = "langchain") -> dict:
    """搜索产品文档"""
    domain_filter = "docs.langchain.com" if product == "langchain" else "langchain-ai.github.io"

    # 限定在官方文档域名内搜索
    return tavily_client.search(
        query=f"{query} site:{domain_filter}",
        max_results=3
    )

def check_system_status() -> dict:
    """检查系统状态"""
    # 简化示例:实际会调用监控 API
    return {
        "status": "operational",
        "services": {
            "api": "up",
            "database": "up",
            "cache": "up"
        },
        "response_time_ms": 45
    }

def create_support_ticket(
    title: str,
    description: str,
    priority: Literal["low", "medium", "high"] = "medium"
) -> dict:
    """创建支持工单"""
    # 简化示例:实际会调用工单系统 API
    ticket_id = f"TICKET-{hash(title) % 10000}"
    return {
        "ticket_id": ticket_id,
        "status": "created",
        "priority": priority
    }

# ========== 2. 配置模型 ==========

model = init_chat_model(
    model="gpt-4o",
    model_provider="openai",
    temperature=0.3,  # 较低温度确保回答准确
    max_tokens=2048
)

# ========== 3. 编写系统提示词 ==========

support_prompt = """你是一位专业的技术支持专家,专注于 LangChain 和 LangGraph 产品。

## 核心职责

1. **问题诊断**: 准确理解用户遇到的技术问题
2. **解决方案**: 提供清晰、可执行的解决步骤
3. **文档引导**: 引用官方文档支持你的建议
4. **升级管理**: 必要时创建支持工单

## 可用工具

- `search_documentation`: 搜索 LangChain/LangGraph 官方文档
- `check_system_status`: 检查系统服务状态
- `create_support_ticket`: 创建技术支持工单

## 工作流程

1. **理解问题**
   - 询问必要的上下文信息
   - 确认问题的具体表现

2. **诊断分析**
   - 检查系统状态(如适用)
   - 搜索相关文档和已知问题

3. **提供解决方案**
   - 给出分步骤的解决方案
   - 引用官方文档链接
   - 提供代码示例(如适用)

4. **升级处理**
   - 如果问题复杂或需要开发团队介入,创建工单
   - 告知用户工单编号和预期响应时间

## 输出格式

### 问题诊断
[简要总结用户的问题]

### 建议方案
1. 步骤 1
2. 步骤 2
...

### 参考文档
- [文档标题](链接)

### 后续跟进
[需要用户做什么,或已创建的工单信息]

## 注意事项

- 保持友好和耐心
- 避免技术术语过于复杂
- 如果不确定,明确说明并建议升级
- 始终引用官方文档
"""

# ========== 4. 创建定制化 DeepAgent ==========

support_agent = create_deep_agent(
    model=model,
    tools=[
        search_documentation,
        check_system_status,
        create_support_ticket
    ],
    system_prompt=support_prompt
)

# ========== 5. 使用 Agent ==========

result = support_agent.invoke({
    "messages": [{
        "role": "user",
        "content": """我在使用 LangChain 1.0 的 create_agent() 时遇到错误:

        TypeError: create_agent() got an unexpected keyword argument 'memory'

        这是什么问题?如何解决?"""
    }]
})

print("=" * 60)
print("技术支持响应:")
print("=" * 60)
print(result["messages"][-1].content)

# Agent 会自动:
# 1. 使用 search_documentation 搜索相关文档
# 2. 发现这是 0.x 到 1.0 迁移问题
# 3. 提供使用 checkpointer 替代 memory 的解决方案
# 4. 引用官方迁移文档
# 5. 如需要,创建支持工单

✨ 定制化最佳实践

1. 模型选择策略

  • 开发阶段:使用快速、便宜的模型(Gemini Flash)
  • 测试阶段:使用平衡模型(Claude Sonnet, GPT-4o)
  • 生产环境:根据任务复杂度动态选择
  • 关键任务:使用最强模型(Claude Opus)

2. 系统提示词优化

📝 提示词检查清单
  • ✅ 明确定义角色和专长
  • ✅ 列出具体的职责和任务
  • ✅ 提供清晰的工作流程
  • ✅ 指定输出格式和结构
  • ✅ 说明工具的使用场景
  • ✅ 设置行为约束和限制
  • ✅ 包含示例(如适用)

3. 工具设计原则

  • 单一职责:每个工具只做一件事
  • 清晰文档:提供详细的 docstring
  • 类型注解:使用 Python 类型提示
  • 错误处理:优雅处理异常,返回有意义的错误信息
  • 参数验证:在工具内部验证输入
  • 幂等性:相同输入产生相同输出

4. 测试和迭代

Python
# 测试定制化 Agent 的流程

# 1. 单元测试工具
def test_internet_search():
    result = internet_search("LangChain", max_results=2)
    assert "results" in result
    assert len(result["results"]) <= 2

# 2. 测试系统提示词效果
test_cases = [
    "简单问题",
    "复杂的多步骤任务",
    "边界情况",
    "错误输入"
]

for test_case in test_cases:
    result = agent.invoke({"messages": [{"role": "user", "content": test_case}]})
    # 验证输出质量

# 3. 迭代优化
# - 分析失败案例
# - 调整系统提示词
# - 添加或修改工具
# - 重新测试

❓ 常见问题

Q1: 如何选择合适的模型?

根据以下因素选择:

  • 任务复杂度:简单任务用快速模型,复杂任务用强大模型
  • 响应时间要求:实时应用选择快速模型
  • 成本预算:大量请求时考虑成本效益
  • 特殊需求:多模态任务选择 GPT-4o

Q2: 系统提示词太长会影响性能吗?

适度影响。长提示词会:

  • 增加每次调用的 Token 消耗(成本上升)
  • 略微增加响应延迟
  • 但能显著提升输出质量和一致性

建议:保持在 1000-2000 Token 范围内,聚焦核心指令。

Q3: 自定义工具数量有限制吗?

理论上没有硬性限制,但建议:

  • 保持在 10-15 个工具以内
  • 工具过多会影响模型的工具选择准确性
  • 如需更多工具,考虑使用子代理分组

Q4: 可以在运行时切换模型吗?

不能直接切换。如需使用不同模型,应:

Python
# 创建多个 Agent 实例
agent_fast = create_deep_agent(model="gemini-2.0-flash-exp", ...)
agent_powerful = create_deep_agent(model="claude-opus-4-5", ...)

# 根据任务选择
if task_complexity == "simple":
    result = agent_fast.invoke(...)
else:
    result = agent_powerful.invoke(...)

Q5: 如何调试定制化的 Agent?

使用 LangSmith 追踪

Python
import os

# 启用 LangSmith 追踪
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"

# 所有工具调用和响应会自动记录
result = agent.invoke({...})

# 在 LangSmith UI 中查看:
# - 工具调用序列
# - 每步的输入输出
# - Token 使用情况
# - 执行时间

📖 参考资源