链路 061:getOutputFormatInstruction 进入 system 提示
总体链路图
下图在全系列各篇保持一致,仅通过高亮样式标示本篇所覆盖的环节;箭头表示主成功路径,点线为异常或可选路径。阅读任意一篇时都应能回到本图定位,避免在单文件里「钻太深」而失去上下游语境。
本篇在总体链路中的位置
对应图中节点 N5:提示词、分流条件、写回守卫等均在发起请求前完成。 高亮节点:N5。若本篇同时引用 chatApi 与任务运行器,通常意味着该逻辑处于「编排层与网络层交界」:修改时要同时考虑任务取消与 UI 快照。
深度说明(工程视角)
从工程维护角度看,本篇讨论的对象应当被视为「可替换实现」:只要对外的任务状态、HTTP 契约与文档写回语义保持不变,内部可以重构函数拆分或调整日志字段。阅读时建议始终抓住三个锚点:一是数据从哪来(PluginStorage、localStorage、COM 选区还是全文);二是数据何时离开本机(进入 fetch 之前是否已完成脱敏与快照);三是失败时用户可见的文本由谁归一(chatApi 与助手错误弹窗两条路径)。
就「链路 061:getOutputFormatInstruction 进入 system 提示」而言,源码位置可概括为:assistantTaskRunner.js getOutputFormatInstruction。这与摘要中的判断一致:根据助手 outputFormat(plain/markdown/bullet-list/json)追加一句格式要求,进入 buildAssistantSystemPrompt。模型若违反格式,下游解析可能失败,尤其在 json 模式。关键词「outputFormat、system」提示你在仓库内做全文检索时应优先锁定这些符号,而不是仅依赖界面文案。
与网络请求相关的修改,务必在本地用开发者工具或代理核对:请求体中的 model 字段是否与设置页保存的 modelId 一致;Authorization 是否只取 apiKey 列表的第一段(部分网关对多密钥格式敏感);stream 为 true 时宿主是否稳定消费 SSE。若你引入新的 provider,应对照 getChatApiConfigByProvider 的 URL 拼接分支补充单元测试或手测用例,避免「路径已含 v1 却又重复拼接」类错误。
与文档写回相关的修改,应优先在无界面的纯函数层复现:例如仅调用 applyDocumentAction 或 applyDocumentProcessingPlan 的入参快照,观察 Range 坐标是否在 CRLF 归一化前后发生漂移。WPS 与 Word 在选区、批注锚点上的差异会放大这类问题,因此本篇若在讲坐标或分段,请同时阅读 documentPositionUtils 与 chunk 相关教程篇目。
阅读顺序上,本篇之后建议继续看:与 buildStructuredJsonInstruction(workflowJsonSchemaText)并列影响输出形状。若在总体图中定位,对应图中节点 N5:提示词、分流条件、写回守卫等均在发起请求前完成。 遇到与教程系列术语不一致时,以源码标识符为准:教程侧重导航与概念,本系列侧重调用次序与失败面。
最后说明写作立场:本系列不对任何云厂商或模型服务做优劣评价,也不暗示「必须开通」某类账号;所述配置项仅反映当前仓库为打通 OpenAI 兼容协议而需要的最小字段集合。若组织策略禁止外联,应在网关或 hosts 层拦截,而不是在加载项内写死假地址。
与教程系列文档的对照
下列文档来自docs/chayuan-tutorial-series,侧重「如何阅读仓库」与界面侧概念,与本链路系列互补:不重复推销功能,仅帮助建立目录与模块边界。
- chayuan-tutorial-series/09-bianshen-moban-guize-yu-wendang-shenji.md:与本篇链路相邻的工程说明,可对照变量命名与文件职责。
- chayuan-tutorial-series/23-jiegouhua-pici-tishi-yu-JSON.md:与本篇链路相邻的工程说明,可对照变量命名与文件职责。
摘要
根据助手 outputFormat(plain/markdown/bullet-list/json)追加一句格式要求,进入 buildAssistantSystemPrompt。模型若违反格式,下游解析可能失败,尤其在 json 模式。
关键词
outputFormat;system
链路位置(源码索引)
assistantTaskRunner.js getOutputFormatInstruction。
正文
1. switch 分支
markdown、bullet-list、json、plain 默认。
维护时建议把本节涉及的符号在 IDE 里「查找引用」:确认是否还有对话框专用服务、拼写检查服务或评测脚本以拷贝粘贴方式重复了相似逻辑。若发现重复,优先抽到 chatApi 之上的薄封装,而不是在业务层再次拼接 URL 或 Authorization,以降低安全审查时的遗漏面。
// src/utils/assistantTaskRunner.js 第275-287行functiongetOutputFormatInstruction(outputFormat){switch(outputFormat){case'markdown':return'请使用清晰、规范的 Markdown 输出。'case'bullet-list':return'请使用项目符号列表输出。'case'json':return'请只输出合法 JSON,不要附加说明。'case'plain':default:return'请直接输出结果,不要附加多余解释。'}}上下游衔接
与 buildStructuredJsonInstruction(workflowJsonSchemaText)并列影响输出形状。