引言
在大数据和人工智能的时代,我们不再满足于简单的问答系统。借助像LangChain这样的工具,我们可以打造智能的、可交互的Agent,这些Agent不仅可以回答问题,还能自主决定使用何种工具或资源来获取信息。在本文中,我们将探讨如何使用LangChain的AgentExecutor
(传统模型)构建一个可与本地数据库和搜索引擎交互的Agent,从而实现更复杂的对话和信息检索。
主要内容
使用语言模型
语言模型本身只能生成文本输出,但通过结合LangChain的功能,我们可以让它们调用工具。我们将使用LLM作为推理引擎,指导其进行动作决策。
创建信息检索器
我们将创建一个Retriever,通过本地索引暴露特定信息给我们的Agent。这一步包含下载网页数据,拆分文档,并将其嵌入向量空间。
使用搜索工具
通过Tavily搜索引擎,我们可以让Agent在线搜索信息。需要注意的是,由于API调用的限制,您可能需要使用API代理服务来保证访问的稳定性。
添加聊天历史
为了提高交互的连续性和智能性,我们将在系统中集成聊天历史记录模块,使Agent能"记住"过去的对话。
调试和追踪
借助LangSmith,我们可以对应用程序进行调试和追踪,观察Agent在运行过程中的决策和调用。
代码示例
以下是一个完整的示例代码,展示了如何定义和运行一个LangChain Agent:
# 安装所需库
!pip install langchain langchain-openai langchain_community
import os
from langchain_openai import ChatOpenAI
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
# 配置环境变量
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_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.")
# 使用语言模型
model = ChatOpenAI(model="gpt-4")
# 绑定工具
tools = [search, retriever_tool]
model_with_tools = model.bind_tools(tools)
# 创建Agent和Executor
prompt = "You are a helpful assistant"
agent = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
# 运行Agent
response = agent_executor.invoke({"input": "What's the weather in SF?"})
print(response['output'])
常见问题和解决方案
- API访问问题:若遇到API访问不稳定,可以考虑使用API代理服务。
- 工具调用失败:确保提供了正确的API密钥,并检查工具配置是否正确。
- 模型响应不符合预期:可以调整Agent的Prompt或切换不同的LLM以优化结果。
总结与进一步学习资源
本文介绍了如何使用LangChain构建一个基础的Agent。对于需要更高自由度和控制的应用场景,我们建议查看LangGraph以及相关的扩展指南:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—