构建智能代理:使用LangChain AgentExecutor快速入门指南

154 阅读3分钟
# 构建智能代理:使用LangChain AgentExecutor快速入门指南

## 引言

在现代技术栈中,智能代理系统正逐渐成为一种重要的构件。它们利用大型语言模型(LLM)作为推理引擎,根据输入动态决策,并调用必要的工具来执行任务。本文将带领您深入了解如何使用LangChain AgentExecutor创建一个可以与多个工具交互的智能代理,帮助您将LLM的能力充分发挥出来。

## 主要内容

### 1. 使用语言模型与工具调用能力

语言模型自身无法执行具体操作,但通过适当的配置和集成,它们能够成为强大的代理系统的核心。LangChain允许我们构建基于LLM的智能代理,通过调用外部API和工具进行复杂任务的执行与结果集成。

### 2. 创建信息检索器(Retriever)

检索器是用于向代理曝光特定信息的组件。在本教程中,我们将使用LangChain中的FAISS工具来创建一个本地索引,供我们的代理调用。

### 3. 使用搜索工具(SearchTool)

为了使代理能够在线查找信息,我们将利用Tavily搜索引擎,并通过API调用其搜索结果。注意,由于网络限制问题,建议在某些地区使用API代理服务以提高访问稳定性。

### 4. 集成聊天历史

通过集成聊天历史,代理可以“记住”过去的交互,改善后续问题的响应能力。

### 5. 使用LangSmith进行调试与追踪

LangSmith是一个帮助开发者追踪与调试复杂代理应用的工具。通过它,您能更清晰地了解代理在每一步的决策过程。

## 代码示例

以下是一个完整的代码示例,展示如何使用LangChain构建一个简单的智能代理:

```python
import os
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.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.messages import HumanMessage

# 设置环境变量(注意保护API密钥)
os.environ["TAVILY_API_KEY"] = "your-api-key"  # 使用API代理服务提高访问稳定性

# 创建搜索与检索工具
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.")

# 选择语言模型
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4")

# 绑定工具到模型
tools = [search, retriever_tool]
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": "hi!"})
print(response['output'])

response = agent_executor.invoke({"input": "how can langsmith help with testing?"})
print(response['output'])

常见问题和解决方案

  1. 网络访问问题:在使用Tavily搜索工具时,可能会遇到网络不稳定的问题。建议在网络受限的地区使用API代理服务。

  2. 语言模型输出不稳定:如果语言模型输出不符合预期,可以通过调整模型配置或尝试不同的预训练模型来解决。

总结和进一步学习资源

本文介绍了如何使用LangChain构建一个基本的智能代理系统。对于希望深入了解更高级代理机制的读者,推荐了解LangGraph Agents或查看官方的迁移指南。

进一步学习资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---