多模态:文件与音频输入的支持
通过统一的输入建模、附件(Attachment)与工具(Tool)协同机制,系统在不改变运行主干(Run/Plan/Tool/State/Context)的前提 下,为图片、文件与音频等多模态输入提供“可存储/非存储、可流式、可工具联动”的完整支持。
设计目标
- 统一抽象:以
ConversationItem/Input*
为入口,落地为Message
的content/attachments/metadata
。入口统一,内部复用。 - 工具协同:输入即附带可用工具(例如:音频→转写工具、文件→检索/读文件工具),由
Planner/ToolExecutor
无缝触发。 - 端到端流式:保持 Responses/Assistants 的 SSE 输出序列,图片与音频以文本占位描述或事件方式输出。
- Non-Store 兼容:在
store=false
时尽量避免外部持久化,走内存或直传策略。
架构总览
- 入口:
ResponseController.createResponses()
→ResponseService.createResponse()
。 - 转换:
ResponseUtils.checkAndConvertInputToMessages(...)
将多模态输入转为Message
列表(含content/attachments
)。 - 执行:
RunExecutor
复用执行主干;工具由ToolExecutor
并发处理,输出串行化由ToolOutputChannel
保证。