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 计数器。
参见 上下文压缩 了解卸载阈值、摘要触发条件和自定义选项。