Bootstrap

如何返回工具执行的工件

工具是在AI模型中被调用并将输出反馈给模型的实用程序。有时,我们希望将工具执行的工件,例如自定义对象、数据帧或图像,传递给链或代理中的下游组件,但不希望向模型本身暴露这些工件。为了实现这一点,ToolToolMessage 接口提供了一个机制,以区分提供给模型的信息 (ToolMessage.content) 和供外部使用的信息 (ToolMessage.artifact)。

技术背景介绍

在 AI 开发中,工具的设计通常是为了简单地处理数据并将结果反馈给模型。然而,在复杂的应用场景中,我们需要将模型无法处理的数据或信息传递给其他组件,这就涉及到工具工件的处理。

本功能在 langchain-core 版本 0.2.19 中添加。如果您希望使用此功能,请确保您的库版本已更新。

核心原理解析

为了实现工具输出的区分,我们需要定义工具时指定 response_format="content_and_artifact",并确保工具返回一个内容和工件的元组 (content, 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

# 直接调用工具方法
generate_random_ints.invoke(
    {
        "name": "generate_random_ints",
        "args": {"min": 0, "max": 9, "size": 10},
        "id": "123",  # 必须提供的工具调用ID
        "type": "tool_call",  # 必须指定为工具调用
    }
)

上述代码演示了如何定义一个工具以返回执行结果和工件。可以看到,通过提供工具调用相关信息,我们获得了完整的工具消息 ToolMessage,其中包含内容和工件。

应用场景分析

在实际应用中,您可能需要将工具的数值结果传递给其他组件,例如将数据处理结果输入到机器学习模型或数据分析工具中。这个功能为开发者提供了灵活性,能轻松地将所需的工件传递给特定的处理环节。

实践建议

  • 定义工具时,明确区分需要传递给模型的信息和其他需要处理的信息。
  • 确保使用最新的 langchain-core 库版本,以支持这些特性。
  • 当在复杂应用中处理工具工件时,请详细规划每个组件的交互方式,以确保数据流的合理性和有效性。

如果遇到问题欢迎在评论区交流。

—END—