1. LangChain中的create_agent详解
在LangChain生态系统中,create_agent是一个功能强大且高度可配置的核心函数,它允许开发者快速构建具备工具调用能力的智能代理。这个函数的设计理念是"配置即代码"——通过简单的参数组合就能创建出适应不同场景的AI代理。
我最近在几个实际项目中深度使用了create_agent,发现它特别适合以下场景:
- 需要集成多个工具调用的自动化流程
- 构建具有记忆和上下文感知能力的对话系统
- 开发能够处理复杂多步骤任务的智能助手
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. create_agent核心参数解析
2.1 模型配置
模型参数是create_agent最核心的配置项,支持多种形式的模型指定方式:
python复制from langchain.agents import create_agent
# 方式1:使用模型标识字符串
agent = create_agent(model="openai:gpt-4")
# 方式2:直接传入初始化后的模型实例
from langchain.llms import OpenAI
llm = OpenAI(model_name="gpt-4")
agent = create_agent(model=llm)
在实际使用中,我发现模型标识字符串的方式更加灵活,因为它允许:
- 动态切换不同供应商的模型
- 无需在代码中硬编码API密钥
- 方便进行A/B测试不同模型版本
2.2 工具集成
工具是赋予Agent行动能力的关键。create_agent支持三种工具集成方式:
python复制from langchain.tools import tool
# 方式1:Python可调用对象
def search(query: str) -> str:
return f"Results for {query}"
# 方式2:LangChain Tool装饰器
@tool
def calculator(expression: str) -> str:
"""Evaluate mathematical expressions"""
return str(eval(expression))
# 方式3:工具字典
tools = {
"search": {
"description": "Search the web",
"func": search
}
}
agent = create_agent(model="gpt-4", tools=[search, calculator, tools])
经验分享:工具的描述文档非常重要,它直接影响LLM是否以及如何调用该工具。建议:
- 保持描述简洁但完整
- 明确说明输入输出格式
- 包含使用示例(模型会参考这些示例)
3. 高级功能配置
3.1 系统提示词工程
系统提示词决定了Agent的行为风格和任务处理方式:
python复制agent = create_agent(
model="gpt-4",
tools=tools,
system_prompt="""
你是一个专业的研究助手,需要遵循以下规则:
1. 优先使用工具获取最新信息
2. 回答要简洁专业
3. 不确定时主动询问澄清
"""
)
我在实际项目中发现,好的系统提示应该:
- 明确角色定位
- 包含具体的行为准则
- 避免过于笼统的描述
3.2 结构化输出
通过Pydantic模型可以定义严格的输出结构:
python复制from pydantic import BaseModel
class ResearchResult(BaseModel):
summary: str
sources: list[str]
confidence: float
agent = create_agent(
model="gpt-4",
tools=tools,
response_format=ResearchResult
)
这种结构化输出特别适合:
- 需要后续自动化处理的结果
- 确保输出质量的场景
- 多步骤任务的结果传递
4. 实战:构建研究助手Agent
4.1 完整实现代码
python复制from langchain.agents import create_agent
from langchain.tools import tool
from pydantic import BaseModel
import requests
# 定义工具
@tool
def web_search(query: str) -> str:
"""Search the web for current information"""
response = requests.get(f"https://api.search.com?q={query}")
return response.json()["results"]
@tool
def scholar_search(query: str) -> str:
"""Search academic papers"""
response = requests.get(f"https://scholar.api.com?q={query}")
return response.json()["papers"]
# 定义输出结构
class ResearchReport(BaseModel):
topic: str
key_findings: list[str]
sources: list[str]
remaining_questions: list[str]
# 创建Agent
research_agent = create_agent(
model="anthropic:claude-3-opus",
tools=[web_search, scholar_search],
system_prompt="""
你是一个资深研究专家,负责全面调研给定主题。
工作流程:
1. 使用web_search获取最新资讯
2. 使用scholar_search查找学术观点
3. 综合分析不同来源的信息
4. 按照指定格式输出研究报告
""",
response_format=ResearchReport
)
# 使用Agent
report = research_agent.invoke({
"messages": [{
"role": "user",
"content": "请调研大语言模型在医疗诊断中的应用现状"
}]
})
4.2 性能优化技巧
- 工具并行调用:
python复制from langchain.agents.middleware import ParallelToolMiddleware
agent = create_agent(
model="gpt-4",
tools=[web_search, scholar_search],
middleware=[ParallelToolMiddleware()]
)
- 结果缓存:
python复制from langchain.cache import InMemoryCache
from langchain.llms import OpenAI
llm = OpenAI(cache=InMemoryCache())
agent = create_agent(model=llm, tools=tools)
- 超时控制:
python复制from langchain.agents.middleware import ToolTimeoutMiddleware
agent = create_agent(
model="gpt-4",
tools=tools,
middleware=[ToolTimeoutMiddleware(timeout=30)]
)
5. 常见问题与解决方案
5.1 工具选择问题
问题现象:Agent频繁调用错误工具或忽略关键工具
解决方案:
- 优化工具描述,确保清晰明确
- 在系统提示中强调工具优先级
- 使用Few-shot示例指导工具选择
python复制system_prompt = """
工具使用示例:
用户:找三篇关于神经网络的最新论文
AI:我应该使用scholar_search工具
<调用scholar_search("神经网络 最新研究")>
...
"""
5.2 上下文管理
问题现象:长对话中Agent丢失上下文或重复信息
解决方案:
- 启用对话记忆功能
- 实现自动摘要机制
- 设置合理的上下文窗口
python复制from langchain.agents.middleware import ConversationSummaryMiddleware
agent = create_agent(
model="gpt-4",
tools=tools,
middleware=[ConversationSummaryMiddleware()]
)
5.3 错误处理
典型错误:API限流、网络问题、无效输入等
健壮性增强方案:
python复制from langchain.agents.middleware import (
ToolRetryMiddleware,
ModelRetryMiddleware,
FallbackMiddleware
)
agent = create_agent(
model="gpt-4",
tools=tools,
middleware=[
ToolRetryMiddleware(max_retries=3),
ModelRetryMiddleware(max_retries=2),
FallbackMiddleware(fallback_response="系统暂时不可用")
]
)
6. 生产环境最佳实践
6.1 监控与日志
建议集成LangSmith进行全链路追踪:
python复制import os
from langsmith import Client
os.environ["LANGCHAIN_TRACING"] = "true"
client = Client()
agent = create_agent(model="gpt-4", tools=tools)
监控重点指标:
- 工具调用成功率
- 响应延迟
- Token使用量
- 用户满意度评分
6.2 安全防护
python复制from langchain.agents.middleware import (
PIIMiddleware,
ContentFilterMiddleware
)
agent = create_agent(
model="gpt-4",
tools=tools,
middleware=[
PIIMiddleware(redact_fields=["email", "phone"]),
ContentFilterMiddleware()
]
)
6.3 性能优化检查清单
- [ ] 工具调用是否必要最小化
- [ ] 上下文长度是否合理控制
- [ ] 是否有适当的缓存机制
- [ ] 错误处理是否完备
- [ ] 监控系统是否到位
在实际项目中,我发现create_agent最强大的地方在于它的可组合性。通过不同的参数和中间件组合,可以构建出适应各种场景的智能代理。一个典型的进阶用法是将多个Agent组合成工作流:
python复制research_agent = create_agent(...)
analysis_agent = create_agent(...)
report_agent = create_agent(...)
def research_flow(topic):
materials = research_agent(topic)
insights = analysis_agent(materials)
return report_agent(insights)
这种模式特别适合复杂的多阶段任务处理。
