探索LangChain AgentExecutor:创建一个智能工具调用代理
引言
语言模型(LLM)在生成文字方面表现出色,但却无法自主采取行动。LangChain通过创建"代理"来解决这个问题,代理使用LLM作为推理引擎,决定采取哪些行动及其输入是什么。本教程将指导您构建一个能够与多个工具交互的代理,包括本地数据库和搜索引擎。通过这个系统,您可以向代理提问,观察它调用工具,并与之进行对话。
主要内容
1. 使用语言模型调用工具
LangChain可以让语言模型调用工具。我们将使用Tavily搜索引擎作为工具之一,需要一个API密钥。接下来,我们将创建一个检索器来暴露特定信息给我们的代理。
2. 创建检索器
通过WebBaseLoader加载我们的数据,使用FAISS创建向量存储,并通过OpenAIEmbeddings生成嵌入。最后,将其转化为Agent可使用的工具形式。
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
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!",
)
3. 使用LLM进行工具调用
选择您最喜欢的语言模型,并绑定我们的工具集,由此,模型能够根据我们的问题调用合适的工具。
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4") # 使用OpenAI模型
model_with_tools = model.bind_tools([search, retriever_tool]) # 绑定工具
4. 创建和运行代理
通过AgentExecutor将代理与工具结合起来处理输入,并根据需要执行工具。
from langchain.agents import AgentExecutor
agent = create_tool_calling_agent(model, [search, retriever_tool], prompt)
agent_executor = AgentExecutor(agent=agent, tools=[search, retriever_tool])
result = agent_executor.invoke({"input": "whats the weather in sf?"})
print(result)
代码示例
下方的代码展示了如何使用上述方法来构建一个智能代理,并调用不同的工具来回答问题。
from langchain_core.messages import HumanMessage
response = model_with_tools.invoke([HumanMessage(content="What's the weather in SF?")])
print(f"ToolCalls: {response.tool_calls}")
# 使用API代理服务提高访问稳定性
常见问题和解决方案
1. 网络限制问题
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以获得稳定的访问。
2. 工具配置问题
确保所有工具均已正确配置,包括API密钥的导出和环境变量的设置。
总结和进一步学习资源
LangChain的AgentExecutor为我们提供了强大的工具调用能力,尽管这只是一个起点。对于更高级的代理需求,建议探讨LangGraph Agents以及相关文档。
进一步学习的资源
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---