引言
在构建复杂的AI系统中,使用语言模型(LLM)作为推理引擎是一个关键步骤。LangChain中的AgentExecutor是一个强大的工具,可以帮助开发者创建能够调用各种工具的代理系统。本篇文章将介绍如何使用LangChain的AgentExecutor构建一个能够与本地数据库和搜索引擎交互的代理。
主要内容
1. 使用语言模型
语言模型不能直接采取行动。LangChain通过允许代理使用LLM作为推理引擎来解决此问题,将其输出作为下一步操作的输入。
2. 创建Retriever
我们需要创建一个Retriever,以便代理可以获取特定信息。通过在本地指数上创建Retriever,我们能更好地查询数据。
3. 使用SearchTool
我们将使用一个搜索工具来在线查找信息,此工具允许代理在需要时调取外部信息。
4. 聊天记录
代理在处理连续问题时能够“记住”之前的互动记录,改善用户体验。
5. 调试和追踪
使用LangSmith,可以追踪代理的执行过程,帮助开发者识别和解决潜在问题。
代码示例
# 使用API代理服务提高访问稳定性
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)
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()
from langchain.tools.retriever import create_retriever_tool
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]
# 选择语言模型
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4")
model_with_tools = model.bind_tools(tools)
# 创建代理
from langchain.agents import create_tool_calling_agent, AgentExecutor
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)
常见问题和解决方案
- API访问问题: 在某些地区,访问外部API可能受限,考虑使用API代理服务。
- 代理调试: 使用LangSmith的追踪功能可以监控代理行为,帮助调试复杂应用。
总结和进一步学习资源
本文介绍了如何使用LangChain的AgentExecutor创建一个可以调用工具的代理。在实际应用中,可能需要更多的灵活性和控制,推荐探索LangGraph Agents。
进一步学习资源
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---