主题
多模态输入与输出
当你的模型支持多模态输入和工具结果时,可在 Deep Agents 中使用图像、音频、视频和文档
当你使用接受多模态输入和工具结果或返回多模态输出的 大型语言模型 时,Deep Agents 支持多模态工作流。你可以将图像和其他媒体附加到用户消息中,使用内置的 read_file 工具读取非文本文件,并从自定义工具返回多模态内容。
内置的 上下文压缩 主要面向文本。请相应地规划多模态工作负载:将大型媒体存储在某个后端中,并尽可能传递引用。
多模态用户输入
在发送给智能体的 messages 中传入多模态内容,使用与 LangChain 聊天模型相同的 标准内容块:
python
result = agent.invoke({
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this screenshot?"},
{"type": "image", "url": "https://example.com/screenshot.png"},
],
}],
})有关块类型、服务商特定的要求以及更多示例(PDF、音频、视频),请参阅 多模态消息。
内置的 read_file 工具
harness 的 read_file 工具会为受支持的多模态文件返回 标准内容块,而不是纯文本。当所选模型支持相应模态时,智能体可以检查存储在其 文件系统 中的图像、文档和媒体。请查看服务商的文档,了解你的模型支持的 MIME 类型。
支持的多模态文件扩展名
| 类型 | 扩展名 |
|---|---|
| 图像 | .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 |
自定义工具输出
自定义工具 可以包含多模态文件,例如图像:
python
from langchain.tools import tool
@tool
def capture_screenshot() -> list[dict]:
"""Capture a screenshot of the current page."""
return [
{"type": "text", "text": "Screenshot of the current page:"},
{"type": "image", "url": "https://example.com/page.png"},
]返回值会被转换为一条 ToolMessage,模型会在下一轮读取它。可通过结果消息上的 content_blocks 访问规范化后的表示。
有关返回类型选项、序列化行为以及 MCP 示例,请参阅 多模态内容。
上下文压缩与多模态内容
内置的卸载和摘要功能针对文本和消息历史进行了优化:
卸载 只计量文本 token。非文本块(包括图像)会在替换消息中被保留,而不是被压缩。仅包含一张图像的消息不会仅根据图像大小就被卸载。
摘要 会将较旧的消息压缩为仅含文本的摘要。该范围内的图像、音频、视频和文件块不会被继续保留——模型只能看到摘要器对它们的描述。低于保留阈值的近期消息保持不变。
当摘要运行时,较旧轮次中的媒体块会从活跃上下文中移除:
python# Before — model receives image blocks in older turns [ HumanMessage( content=[ {"type": "text", "text": "What trends do you see in this chart?"}, {"type": "image", "base64": IMG, "mime_type": "image/png"}, ] ), ToolMessage( content=[ {"type": "text", "text": "Updated chart:"}, {"type": "image", "base64": IMG, "mime_type": "image/png"}, ], tool_call_id="call_chart_1", ), AIMessage(content="Revenue rose in Q3 based on the chart trend."), HumanMessage(content="Reply with one sentence summarizing our analysis."), ] # 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 计数器。
有关卸载阈值、摘要触发条件和自定义选项,请参阅 上下文压缩。