从入门到精通:使用LangChain AgentExecutor构建智能代理
引言
在现代科技驱动的世界中,越来越多的应用需要智能化决策和自动化能力。本文将向您介绍如何使用LangChain的AgentExecutor构建一个简单的智能代理。我们的目标是创建一个能够与多个工具(如本地数据库和搜索引擎)交互的代理,使其能够回答问题并进行对话。
主要内容
1. 语言模型与工具调用
语言模型在本质上只输出文本,因此不能直接执行操作。LangChain通过将LLM作为推理引擎来创建智能代理,使其能够决定采取哪些操作,以及这些操作的输入应是什么。
2. 创建检索器(Retriever)
通过检索器,代理能够访问和使用特定的信息。我们将创建一个本地索引,并使用LangChain的工具将其转化为检索器。
3. 使用搜索工具
我们将使用Tavily搜索引擎作为一项工具,让代理能够在线搜索信息。由于可能存在的网络限制,开发者可以使用API代理服务来提高访问的稳定性。
4. 实现聊天历史
通过维护聊天历史,代理可以记住过去的交互,提升其响应后续问题的能力。
5. 调试和追踪
使用LangSmith可以帮助我们追踪和调试应用中的复杂步骤和多次LLM调用。
代码示例
以下是一个完整的示例代码,用于构建智能代理并进行交互:
# 安装必要的库
!pip install langchain langchain-openai
import os
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.tools.retriever import create_retriever_tool
# 设置环境变量
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"
os.environ["TAVILY_API_KEY"] = "your_tavily_api_key"
# 使用API代理服务提高访问稳定性
# 初始化语言模型
model = ChatOpenAI(model="gpt-4")
# 定义工具
search_tool = TavilySearchResults(max_results=2)
retriever_tool = create_retriever_tool(retriever, "langsmith_search", "Search for information about LangSmith.")
tools = [search_tool, retriever_tool]
# 创建代理
agent = create_tool_calling_agent(model, tools, None)
# 创建AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools)
# 调用代理
response = agent_executor.invoke({"input": "What's the weather in SF?"})
print(response['output']) # 输出:当前旧金山的天气信息
常见问题和解决方案
- 网络限制问题:在某些地区,由于网络限制,API调用可能失败。建议使用API代理服务来提高稳定性。
- 工具调用失败:确保工具配置正确,并且API密钥已设置。
- 代理不记住历史对话:确保正确设置和维护聊天历史。
总结和进一步学习资源
本文演示了如何使用LangChain的AgentExecutor构建一个智能代理。对于更复杂的应用,LangChain还提供了一些高级功能和工具。欲了解更多,可以参考LangChain的高级指南和LangGraph的使用。
参考资料
- LangChain Documentation: docs.langchain.com
- LangSmith Documentation: smith.langchain.com
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---