Skip to content

Web 会话区支持通用文件附件、文档解析与附件管理 #702

@Yumiue

Description

@Yumiue

目标问题

PDF、DOCX 等二进制文档不能直接作为文本加入上下文,需要解析、摘要或转换策略。同时用户需要查看、删除和复用当前会话中已经上传的附件。

前置依赖

依赖以下 issue:

  • Web 会话区支持图片上传并加入会话
  • Web 会话区支持文本类文件上传并作为会话上下文

设计方案

  • 完善 session asset 元数据,包括文件名、MIME、大小、创建时间和用途。
  • 增加会话附件列表、删除和重新引用能力。
  • 为 PDF/DOCX 增加独立解析器,解析结果作为文本上下文进入 Runtime。
  • 解析失败不影响原始文件保存,UI 展示失败原因。
  • 如果后续 provider 原生支持文件输入,只在 provider adapter 内适配,不泄漏到 Web/Runtime 上层。

落地清单

  • Session:
    • 完善 asset 元数据读取接口。
    • 增加按 session 查询附件列表能力。
    • 增加删除附件能力,并校验 session 归属。
  • Runtime:
    • 增加文档解析入口。
    • 对 PDF/DOCX 设置大小、页数和超时限制。
    • 将解析结果转换为 text content part。
  • Web:
    • 增加会话附件面板或附件列表。
    • 支持查看附件状态、删除附件、重新添加到输入区。
    • 展示文档解析中、解析成功、解析失败状态。
  • 文档:
    • 说明支持的文档类型、解析限制、失败行为和回滚方式。

验收标准

  • 会话内可查看当前 session 已上传附件。
  • 可删除未使用或历史附件引用。
  • PDF 可解析为文本上下文并参与模型回复。
  • DOCX 可解析为文本上下文并参与模型回复。
  • 损坏文件、超大文件、解析超时都有明确错误。
  • 历史消息中的附件引用仍可展示元信息。
  • 文档解析逻辑不进入 Web、TUI 或 provider 上层调用方。
  • go test ./... 通过。
  • Web 相关测试通过。

测试场景

  • 上传 PDF 并提问内容。
  • 上传 DOCX 并提问内容。
  • 上传损坏 PDF,确认解析失败提示。
  • 上传超过页数或大小限制的文档,确认被拒绝。
  • 删除附件后再次引用失败。
  • 刷新页面后仍能看到历史附件元信息。

风险与回滚

  • 风险:文档解析会引入依赖、耗时和异常文件处理成本。
  • 风险:解析质量会影响模型回答质量,需要清晰标注解析失败或截断。
  • 回滚:保留原始上传记录,关闭 PDF/DOCX 解析入口,不影响图片和文本附件能力。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions