以编程方式使用文档

Deep Agents 在您使用 大型语言模型 (支持多模态输入和工具结果或返回多模态输出)时支持多模态工作流。您可以将图像和其他媒体附加到用户消息,使用内置 read_file 工具读取非文本文件,并从自定义工具返回多模态内容。

Built-in 上下文压缩 主要面向文本。请相应规划多模态工作负载:将大型媒体存储在后端并尽可能传递引用。

多模态用户输入

使用 messages 将多模态内容传递给代理,使用与 LangChain 聊天模型相同的 标准内容块

const result = await agent.invoke({
  messages: [{
    role: "user",
    content: [
      { type: "text", text: "What is in this screenshot?" },
      { type: "image", url: "https://example.com/screenshot.png" },
    ],
  }],
});

有关块类型、提供商特定要求以及更多示例(PDF、音频、视频),请参阅 多模态消息.

Built-in read_file 工具

测试工具返回 read_file 支持的 标准内容块 来替代纯文本(用于支持的多模态文件)。代理可以检查存储在其 文件系统 中的图像、文档和媒体(当所选模型支持相应模态时)。请查阅提供商的文档以了解模型支持的 MIME 类型。

Supported multimodal file extensions

类型扩展名
图像.png, .jpg, .jpeg, .gif, .webp, .heic, .heif
视频.mp4, .mpeg, .mov, .avi, .flv, .mpg, .webm, .wmv, .3gpp
音频.wav, .mp3, .aiff, .aac, .ogg, .flac
文件.pdf, .ppt, .pptx

自定义工具输出

自定义工具 可以包含多模态文件,例如图像:

const captureScreenshot = tool(
  async () => [
    { type: "text", text: "Screenshot of the current page:" },
    { type: "image", url: "https://example.com/page.png" },
  ],
  {
    name: "capture_screenshot",
    description: "Capture a screenshot of the current page.",
    schema: z.object({}),
  }
);

返回值将转换为 ToolMessage 模型在下一轮中读取该内容。使用 content_blocks 访问结果消息上的规范化表示形式。有关返回类型选项、序列化行为和 MCP 示例,请参阅 工具返回值多模态工具内容.

上下文压缩和多模态内容

内置的卸载和摘要功能针对文本和消息历史进行了优化:

  • 卸载 仅计算文本 token。非文本块(包括图像)保留在替换消息中而不是被压缩。仅包含图像的消息不会仅基于图像大小进行卸载。
  • 摘要 将较早的消息压缩为纯文本摘要。该范围内的图片、音频、视频和文件块不会被保留——模型只能看到摘要器所写的内容。低于保留阈值的最新消息保持不变。

当摘要功能运行时,早期轮次中的媒体块会从活跃上下文中移除:

    // Before — model receives image blocks in older turns
    { role: "user", content: [
        { type: "text", text: "What trends do you see in this chart?" },
        { type: "image", url: "https://example.com/chart.png" },
    ]}
    { role: "tool", content: [
        { type: "text", text: "Updated chart:" },
        { type: "image", url: "https://example.com/chart-v2.png" },
    ]}

    // After — those turns collapse to text; image blocks are gone
    { content:
        "User asked about trends in a chart screenshot. " +
        "Tool returned an updated chart. Agent identified Q3 revenue growth."
    }
    

原始对话仍以文本形式写入文件系统。参见 摘要 了解触发条件、保留阈值和完整流程。

对于多模态密集型工作负载:

  • - 将图片、截图和图表存储在文件系统后端或外部对象存储中,然后通过消息传递文件路径或 URL。
  • - 在长时间运行的对话中,优先使用引用而非 base64 编码的图片块。
  • - 使用 子代理 进行图片密集型检查,以便主代理接收紧凑的文本结果。
  • - 当您的提供商对图片收取大量 token 时,调整摘要阈值或提供自定义 token 计数器。

参见 上下文压缩 了解卸载阈值、摘要触发条件和自定义选项。