# 构建智能代理:用AgentExecutor掌握LangChain的魔力
## 引言
在当今的信息时代,使用智能代理来自动化复杂任务已成为一种趋势。LangChain 提供了强大的工具来帮助开发者构建这样的智能代理。在本文中,我们将探讨如何使用 LangChain 的 AgentExecutor 以及相关工具来创建一个能够与多种工具互动的智能代理。
## 主要内容
### 使用语言模型
语言模型是智能代理的核心。在 LangChain 中,我们可以使用多种语言模型,包括但不限于 OpenAI、Anthropic 和 Google Vertex AI。这些模型可以作为推理引擎,帮助代理决定需要采取的行动及其输入。
### 创建检索器
为了让代理访问特定的信息,我们需要创建一个检索器。我们将使用 LangChain 的 `WebBaseLoader` 和 `FAISS` 来创建一个本地索引的检索器。
```python
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()
使用搜索工具
我们还可以将搜索引擎作为工具整合到代理中,比如使用 Tavily 搜索引擎。注意,由于某些地区的网络限制,开发者可能需要考虑使用 API 代理服务。
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)
search.invoke("what is the weather in SF") # 使用API代理服务提高访问稳定性
增加聊天历史
为了使智能代理能够“记住”先前的互动,可将聊天历史集成到代理中。这可以通过传递先前的chat_history实现。
from langchain_core.messages import AIMessage, HumanMessage
response = agent_executor.invoke(
{
"chat_history": [
HumanMessage(content="hi! my name is bob"),
AIMessage(content="Hello Bob! How can I assist you today?"),
],
"input": "what's my name?",
}
)
调试与跟踪
在开发复杂应用时,追踪应用内的每一步都是至关重要的。LangSmith 提供了强大的调试工具来帮助开发者实现这一点。
代码示例
以下是一个完整的智能代理示例,展示如何将不同的组件组合在一起:
from langchain import hub
from langchain.agents import create_tool_calling_agent
from langchain.agents import AgentExecutor
# 获取并设置 prompt
prompt = hub.pull("hwchase17/openai-functions-agent")
model = ChatOpenAI(model="gpt-4")
tools = [search, retriever_tool]
# 创建 agent
agent = create_tool_calling_agent(model, tools, prompt)
# 创建 agent executor
agent_executor = AgentExecutor(agent=agent, tools=tools)
# 运行示例
response = agent_executor.invoke({"input": "what's the weather in SF?"})
print(response)
常见问题和解决方案
- API 连接问题:使用 Tavily 搜索时,可能会遇到 API 连接问题。建议在需要时使用代理服务。
- 模型响应不准确:确保正确地配置和调用模型,并检查工具调用是否按预期工作。
总结和进一步学习资源
通过本文,我们展示了如何使用 LangChain 构建一个简单的智能代理。为了深入学习,您可以参考以下资源:
参考资料
- LangChain 官方文档:LangChain Docs
- Tavily 搜索引擎:Tavily
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---