将LangChain Runnables 转化为强大的工具:完整指南

# 将LangChain Runnables 转化为强大的工具:完整指南

## 引言

在现代AI和编程开发中,LangChain提供了一种强大的工具体系,可以帮助开发者高效地构建智能应用。本篇文章将探讨如何将LangChain中的Runnables转化为工具,使其能够被代理、链和聊天模型使用。通过系统的讲解和代码示例,你将学会如何灵活使用这些工具,并了解潜在的挑战和解决方案。

## 主要内容

### 什么是LangChain工具

LangChain工具是供代理、链或聊天模型与外部世界交互的接口。工具的使用受以下限制:

- 输入需要是可序列化的类型,比如字符串和Python字典对象;
- 工具需要有明确的名称和描述,以便语言模型正确调用;
- 详细的参数模式(args_schema)用于指定字典输入所需的具体键和类型信息。

### 将Runnable转换为工具

Runnables可以通过`as_tool`方法转换为工具,并指定名称、描述和参数模式信息。

#### 基本用法

下面的例子展示了如何将一个使用Typeddict输入的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="Explanation of when to use tool.",
)

print(as_tool.description)

这个工具可以用来执行指定的算法逻辑,并定义了输入参数的schema。

无类型信息的Runnables

若没有明确的类型信息,可以通过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]},
)

作为代理应用工具

为代理应用工具,首先实例化一个支持工具调用的聊天模型,如OpenAI、Anthropic等。以下代码以OpenAI的ChatOpenAI为例:

import getpass
import os
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = getpass.getpass()

llm = ChatOpenAI(model="gpt-4o-mini")

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

接着,我们可以通过创建一个简单的LangGraph agent,将LangChain工具应用于实际问答场景中。

代码示例

以下是一个完整的代码示例,展示如何创建并使用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调用的网络问题:在某些地区,可能需要使用API代理服务以提高访问稳定性。

总结和进一步学习资源

通过本文,你学会了如何将LangChain中的Runnables转换为工具,并将其集成到代理应用中。学习更多关于LangChain工具的信息,可以参考以下资源:

参考资料

  • LangChain 官方文档
  • LangGraph 库

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

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值