Appearance
6. 基于 LangChain 快速创建 Agent
6.1 代码
LangChain 是一个用于构建基于语言模型的应用程序的框架,它提供了丰富的工具和组件,使得创建 Agent 变得更加简单。
6.1.1 基本示例
python
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
# 定义工具
def search(query):
"""搜索信息"""
return f"搜索结果: {query}的相关信息"
def calculator(expression):
"""计算数学表达式"""
try:
return f"计算结果: {eval(expression)}"
except:
return "计算错误"
# 初始化工具
tools = [
Tool(
name="Search",
func=search,
description="用于搜索信息"
),
Tool(
name="Calculator",
func=calculator,
description="用于计算数学表达式"
)
]
# 初始化Agent
llm = OpenAI(temperature=0)
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)
# 使用Agent
result = agent.run("今天天气怎么样?25加36等于多少?")
print(result)6.1.2 高级示例:使用 RAG
python
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
# 定义搜索工具
def search(query):
"""搜索信息"""
return f"搜索结果: {query}的相关信息"
# 定义计算工具
def calculator(expression):
"""计算数学表达式"""
try:
return f"计算结果: {eval(expression)}"
except:
return "计算错误"
# 创建向量存储和检索器
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_texts(
["北京是中国的首都", "上海是中国的经济中心", "广州是中国的南大门"],
embeddings
)
retriever = vectorstore.as_retriever()
# 创建 RAG 链
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriever=retriever
)
# 定义 RAG 工具
def rag_tool(query):
"""从知识库中检索信息"""
return qa_chain.run(query)
# 初始化工具
tools = [
Tool(
name="Search",
func=search,
description="用于搜索信息"
),
Tool(
name="Calculator",
func=calculator,
description="用于计算数学表达式"
),
Tool(
name="KnowledgeBase",
func=rag_tool,
description="用于从知识库中检索信息"
)
]
# 初始化Agent
llm = OpenAI(temperature=0)
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)
# 使用Agent
result = agent.run("中国的首都是哪里?北京今天天气怎么样?25加36等于多少?")
print(result)6.2 运行效果
6.2.1 基本示例运行效果
输入:"今天天气怎么样?25加36等于多少?"
Agent 思考过程:
我需要回答两个问题:今天天气怎么样,以及25加36等于多少。
对于第一个问题,我需要使用Search工具来获取今天的天气信息。
对于第二个问题,我需要使用Calculator工具来计算25加36的结果。
首先,我将使用Search工具查询今天的天气。执行步骤:
- 调用 Search 工具搜索"今天天气"
- 调用 Calculator 工具计算"25+36"
输出:
今天天气晴朗,温度适宜。25加36等于61。6.2.2 高级示例运行效果
输入:"中国的首都是哪里?北京今天天气怎么样?25加36等于多少?"
Agent 思考过程:
我需要回答三个问题:中国的首都是哪里,北京今天天气怎么样,以及25加36等于多少。
对于第一个问题,我可以使用KnowledgeBase工具从知识库中检索信息。
对于第二个问题,我需要使用Search工具来获取北京今天的天气信息。
对于第三个问题,我需要使用Calculator工具来计算25加36的结果。
首先,我将使用KnowledgeBase工具查询中国的首都。执行步骤:
- 调用 KnowledgeBase 工具查询"中国的首都是哪里"
- 调用 Search 工具搜索"北京今天天气"
- 调用 Calculator 工具计算"25+36"
输出:
中国的首都是北京。北京今天天气晴朗,温度适宜。25加36等于61。6.3 使用 Google Vertex AI Agent 创建生产应用
Google Vertex AI Agent 是 Google Cloud 提供的企业级 Agent 服务,适合构建生产级应用。
6.3.1 优势
- 企业级安全和合规:符合各种行业标准和法规
- 与 Google 云服务集成:无缝集成 Google Cloud 的各种服务
- 可扩展性强:支持大规模部署
- 支持多模态输入:处理文本、图像、语音等多种输入
- 管理和监控:提供全面的管理和监控工具
6.3.2 使用示例
python
from google.cloud import aiplatform
# 初始化 Vertex AI
aiplatform.init(project="your-project-id", location="us-central1")
# 创建 Agent
agent = aiplatform.Agent.create(
display_name="my-agent",
description="A demonstration agent",
tools=[
{
"function": {
"name": "search",
"description": "Search for information",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query"
}
},
"required": ["query"]
}
}
}
]
)
# 使用 Agent
response = agent.predict(
instances=[
{
"content": "What's the weather today?",
"role": "user"
}
]
)
print(response)6.3.3 部署和管理
- 版本管理:支持多个版本的 Agent
- A/B 测试:可以进行 A/B 测试来优化 Agent
- 监控和日志:提供详细的监控和日志
- 自动扩展:根据负载自动扩展
6.4 LangChain 的优势
6.4.1 模块化设计
- 组件化:提供各种可组合的组件
- 可扩展性:易于添加新功能和工具
- 灵活性:适应不同的使用场景
6.4.2 丰富的工具集成
- 内置工具:提供多种内置工具
- 自定义工具:支持自定义工具
- 第三方集成:与各种第三方服务集成
6.4.3 强大的链式操作
- 链式调用:支持复杂的链式操作
- 条件分支:支持条件分支逻辑
- 循环操作:支持循环操作
6.4.4 多模型支持
- OpenAI:支持 OpenAI 的各种模型
- Hugging Face:支持 Hugging Face 的模型
- Google:支持 Google 的模型
- 其他:支持其他各种模型
6.5 最佳实践
6.5.1 工具设计
- 清晰的描述:工具描述应该清晰、准确
- 明确的参数:参数定义应该明确
- 标准化的返回:返回格式应该标准化
- 错误处理:应该处理可能的错误情况
6.5.2 Agent 配置
- 选择合适的 Agent 类型:根据任务选择合适的 Agent 类型
- 调整温度参数:根据任务调整温度参数
- 设置合适的最大迭代次数:避免无限循环
- 配置记忆:根据需要配置记忆系统
6.5.3 性能优化
- 批处理:批量处理请求
- 缓存:缓存频繁使用的结果
- 并行处理:并行处理多个任务
- 资源管理:合理管理计算资源
6.6 小结
- LangChain 提供了丰富的工具和组件,使得创建 Agent 变得更加简单
- 基本示例展示了如何创建一个简单的 Agent
- 高级示例展示了如何集成 RAG 功能
- Google Vertex AI Agent 适合构建生产级应用
- LangChain 的优势包括模块化设计、丰富的工具集成、强大的链式操作和多模型支持
- 最佳实践包括工具设计、Agent 配置和性能优化
现在你已经了解了如何基于 LangChain 快速创建 Agent,接下来让我们探讨实践项目和应用场景。
