核心职责:将用户上传的文件信息注入到 Agent 的对话上下文中,使模型能够感知并利用已上传的文件
流程分析:
1 获取新上传文件 — 从最后一条 HumanMessage 的 additional_kwargs.files 中提取(前端上传后写入)
2 获取历史文件 — 扫描线程专属的上传目录,排除新文件外的所有已有文件
3 提取文档大纲 — 对每个文件查找同名的 .md 转换文件,调用 extract_outline() 提取标题结构;若无标题则取前几行作为预览
4 生成提示文本 — 构建 <uploaded_files>…</uploaded_files> 格式的文本块,区分”本次上传”和”历史可用”两类文件
5 注入消息 — 将文件信息预置到最后一条 HumanMessage 的内容前面(支持字符串和多模态列表两种格式)
函数解析:
_extract_outline_for_file 从文件中抽取大纲
_format_file_entry 将单个文件的信息追加到 lines 列表中
_create_files_message 组装完整的 <uploaded_files> XML 标签文本块
before_agent: 在 Agent 执行前被调用,获取新文件,抽取大纲,注入xml,插入了HumanMessage之前