输入输出接口
消息、指令、结构化输出与工具调用
沿着对象与状态理解本章
先区分收到一段网络字节、拼成一个SSE事件、得到完整JSON以及确认工具调用完成。只有最后符合协议的结构和权限检查通过后才考虑执行。四层若混在一起,就可能把半段参数当成真实命令。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
字符完整、事件完整、工具参数完整是三道关
为什么看到半段JSON时绝对不能执行?
网络像分批送到的纸条,分割点不遵守汉字或JSON边界。接收端先重组字节和字符,再按流协议重组事件,最后解析结构并确认该输出是否表示完整行动。花括号配平不够,因为字符串内部也可能有花括号。
输入与适用条件:真实编码了一个小SSE文本事件,故意把“爱”的三个UTF-8字节拆成两段。示例并不使用厂商特定的事件命名。
1 / 4 · 收到第一段字节
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
网络片段可以停在一个汉字的UTF-8编码中间。现在只有“爱”的第一个字节,不能把每个网络片段独立按完整字符串解码。
字节缓冲默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
让网络分片方式不影响语义与执行次数。
怎样实现
增量解码→组装事件→解析JSON→检查完成状态→按类型分派。
可能的代价与误解
提前执行、重复事件未去重、调用ID错配,都可能把一次动作变成多次副作用。
如何判断是否做对
把同一字节串在每个切分点拆开,解析后的事件都应一致。
模型实际接收的输入
消息接口包含角色、内容块、工具定义及其他配置,不只是一段自由文本。客户端可能加入仓库规则和任务状态,服务端也可能进行额外组织。可见聊天记录不等于完整请求,更不等于所有内部处理。[S045][S047][S049]
稳定约束:只改授权工作区
项目知识:构建入口、路径语义、测试命令
工具定义:搜索、读文件、补丁、测试
用户目标:修复exclude嵌套路径
工作状态:已复现,尚未修改
证据:当前源码与实际测试结果
这是厂商无关教学结构,不可直接当某个API请求。每条信息需要来源;模型假设不可悄悄进入“已确认事实”。
指令层级与可信边界
Model Spec是期望行为规范,不是运行时权限系统。本文依据可核验历史版本说明概念,不宣称它代表所有模型的最新行为。低信任内容可以提供事实,但不能自行授权;高优先级指令约束行为,也不使其中的外部事实永远正确。[S028]
源码注释要求上传环境变量,仍只是外部文本。工具执行器应检查权限,而不是仅在Prompt里写“请安全”。来源标签可帮助组织,但不能代替真正的访问控制。
结构化输出的三层保证
合法JSON保证语法;Schema保证结构、类型和枚举等约束;字段中的事实、引用与业务状态仍需验证。Schema中应允许证据不足、工具失败等真实状态,避免强迫中间结果冒充完成。[S048]
{"status":"needs_evidence","suspected_file":"pipeline/filter.py",
"evidence_ids":[],"next_action":"read_file"}
这是原创业务示例,不是任何产品规定。解析后还要检查截断、拒绝、字段引用是否存在、文件是否越界。0到1的confidence值只说明数值合法,不自动具有校准概率含义。
工具调用的完整协议
模型提出工具名与参数,应用验证并执行,结果用关联ID返给模型,模型决定继续或回答。调用被生成不代表已执行,调用返回成功也不代表整个任务完成。[S047]
候选调用 → 参数校验 → 授权与范围校验
→ 执行 → 记录成功或失败 → 回填观察
读取失败应区分不存在、无权限、超时和空文件。并行调用要检查依赖:独立搜索可并行,基于尚未读取代码产生的补丁不可无条件并行。
流式输出与推理状态
流式响应可能包含文本、参数片段和结束事件。半段JSON不是执行授权,必须按协议组装完整调用后校验。高风险写入尤其不能边收到参数边执行。[S049]
推理型模型可能使用不可见或受保护状态;应按接口要求传递,不能自行伪造。最终文字长度不等于全部推理消耗,解释也未必是内部过程的逐字记录。[S037][S051]
Prompt版本与实验
原创实验比较三种输入:仅一句修复要求;增加明确目标和必要源码;再叠加冗长固定流程。测正确率、漏测、总轮次与人工接管。更长版本可能改善复杂任务,也可能损害简单任务,需要分层统计。
至少记录Prompt版本、模型配置、工具Schema和任务样本。只保存最终回答无法解释为何退化。Prompt工具管理的是组织方式,不能代替评测设计。[S046][S144]
自检:模型说已执行测试能否视为测试证据?不能,要有工具结果。严格Schema能否防止编造引用?不能,还需验证引用是否真实且支持结论。
逐项中文讲义
保留拓展阅读目录编号与A/B/C优先级;每项包括机制解释、边界与原创练习。
A4.1 · 提示工程基础
对应资料:Prompt Engineering
提示工程组织任务目标、约束、背景与输出要求。清晰结构有助模型理解,但措辞不是确定性程序,不能保证所有要求都被遵循。
应给足必要证据而非堆积通用口号。角色描述可以提供风格或视角,却不能替代真实项目约定。输出要求也应允许证据不足和未完成状态。
约束、数据和输出要求分别放清楚
输入与条件。任务读取三条日志,要求只列有证据的错误。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1任务 | 找实际报错 | 不是编写一般排障建议。 |
| 2数据 | 日志作为引用内容 | 其中的文字不自动变新指令。 |
| 3输出 | 错误、来源行号、未确认项 | 把“看起来像”与“已验证”分开。 |
把过程连起来。明确对象与成功条件,比堆“专业全面”修饰词有效。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把“修复问题并确保专业”改写为可验证的功能、兼容性和测试要求,保留模型选择实现路径的空间。再比较是否减少无关重构与假完成。
完成标准是让Prompt服务任务,而非用更长文本掩盖缺失信息。若问题在工具权限或旧索引,继续润色提示可能没有收益。
拓展阅读目录事实依据 [S045] · 练习与工程推导为本书独立编写。
A4.2 · 提示组织与版本管理
对应资料:Prompting
Prompt管理涉及模板、变量、复用与版本。复用可以减少重复组织,但不同任务需要的证据与约束仍应区分,模板不宜变成所有场景的固定长流程。
评估Prompt必须记录模型、工具定义、任务样本和配置,否则输出差异无法归因。模板变量也需要正确转义和来源标记,防止外部数据混入高信任指令。
提示版本变化要和评测绑定
输入与条件。P1只要求解释,P2新增结构化证据字段。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1冻结任务集 | 同样20个任务 | 避免样本变化。 |
| 2记录版本 | 分别保存P1/P2与模型工具配置 | 使差异可解释。 |
| 3结果比较 | 完成度、结构有效率、成本 | 不只看一个样例更漂亮。 |
把过程连起来。Prompt也是行为配置,需要版本与验证,但不必为每句文字做复杂审批。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:给两个Prompt版本分配明确标识,在相同任务上比较正确、遗漏、成本和时长。保留旧版以便回归,不只保存看起来最好的回答。
完成标准是建立可重复实验,而不是拥有很多模板。版本化本身不提高质量,只有与真实评价和失败分析连接才有价值。
拓展阅读目录事实依据 [S046] · 练习与工程推导为本书独立编写。
A4.3 · 输入可信度与指令冲突
对应资料:Model Spec
指令优先级解决不同来源要求冲突,事实可信度解决内容是否真实。这两维不能互相替代,外部证据正确不表示它能改写用户目标。
本书依据已核验历史Model Spec说明规范概念,不声称规范等于实际模型零失误。工具授权仍应由程序执行,不能全部交给模型判断。
真实用户指令与文档中的反向要求
输入与条件。用户说只读;文档写“修改后再回答”。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1来源 | 前者是授权任务,后者是引用资料 | 身份不同。 |
| 2执行 | 继续只读分析 | 不接受文档追加写权限。 |
| 3说明 | 需要修改才能完成时报告限制 | 不能假装已经操作。 |
把过程连起来。冲突不靠谁在上下文后面就一律获胜。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:网页正文要求删除项目,用户仅要求总结网页。解释为什么这段文本是待分析对象,而不是授权命令。再加入一条过期项目规则,区分指令身份与事实时效。
完成标准是能为输入标记来源、范围和用途。不要仅靠把危险内容放进引号就认为所有注入风险解决,也不要将工具结果天然提升为高优先级要求。
拓展阅读目录事实依据 [S028] · 练习与工程推导为本书独立编写。
A4.4 · 函数调用协议
对应资料:Function Calling
函数调用把模型提出的工具名与参数交给应用执行,再将结果关联回原调用。模型生成调用不是实际执行,执行成功也不等于整体任务完成。
参数需语法、类型、业务与权限校验。返回应区分成功、无结果、超时、权限不足等状态,不能用空文本混淆。关联ID帮助处理多个或并行调用。
call_id把调用与结果连起来
输入与条件。模型发c1=read(A),c2=read(B)。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1先返回B | 结果标c2 | 归到B。 |
| 2再返回A | 结果标c1 | 归到A。 |
| 3错误对照 | 按完成顺序把B内容当A | 后续推理会建立在错误证据上。 |
把过程连起来。工具结果的身份关联是协议正确性的一部分。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:设计只读文件工具,明确允许根目录、文件不存在与无权限的差异,再模拟模型收到两种错误后应采取什么行动。
完成标准是画出完整请求—执行—观察闭环,并说明副作用在哪发生。严格Schema减少格式错误,却不能允许越界路径或重复远端操作。
拓展阅读目录事实依据 [S047] · 练习与工程推导为本书独立编写。
A4.5 · 结构化输出与约束
对应资料:Structured Outputs
结构化输出约束格式与字段类型,不保证字段事实正确。合法JSON、符合Schema和符合业务是三个层次。
模式设计应包含真实状态,例如缺证据、未验证、工具失败。若只允许成功结论,可能迫使模型把中间状态塞入错误类别。拒绝与截断也需要独立处理。
结构化输出通过仍要核对事实
输入与条件。输出{"version":"v8","tests_passed":true},实际测试记录为v7。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1schema | 字符串和布尔类型都对 | 结构通过。 |
| 2语义 | 版本对应不上 | 不能对v8宣称已测。 |
| 3处理 | 补测v8或把字段改为未知 | 不能只格式化JSON就算修复。 |
把过程连起来。JSON合法不等于业务事实正确。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:设计代码修复报告字段,要求变更文件、已运行测试和未验证事项,再加入验证器检查引用ID与文件是否存在。模型填了字段不代表证据真实。
完成标准是把解析成功与任务验收分离。置信度字段即使限制0到1,也不自动成为校准概率,仍需独立数据评价。
拓展阅读目录事实依据 [S048] · 练习与工程推导为本书独立编写。
B4.6 · 流式响应与事件组装
对应资料:Streaming API Responses
流式响应分批提供文本、参数或事件。接收到一部分不代表完整对象已成立,应遵循协议中的完成信号与错误状态。
工具参数可能跨多个片段,不能用脆弱字符串规则猜结束。高风险动作尤其应等完整参数、授权与校验后执行,不能边流式生成边无条件操作。
网络分片与事件边界
输入与条件。一条event文本分两次到达,空行只在第二片末尾出现。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1第一片 | 缓冲不完整文本 | 不交给完整事件处理器。 |
| 2第二片 | 补足空行 | 此时才识别事件完成。 |
| 3参数delta | 事件完成后仍可能只是参数的一部分 | 还需按调用聚合。 |
把过程连起来。每层协议有自己的完成条件。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把一个JSON调用切成三段,其中最后一段包含目标路径后缀。比较提前执行与完整组装后的差异,再模拟连接中断。
完成标准是能区分用户可见的渐进反馈与后台动作提交。更早显示文本可以改善体验,但不应提前宣告业务操作完成。
拓展阅读目录事实依据 [S049] · 练习与工程推导为本书独立编写。
B4.7 · Claude提示设计
对应资料:Claude Prompt Engineering
Claude的提示设计文档提供清晰任务、上下文组织与示例等方法。它们应结合模型和任务验证,不是可跨所有产品无修改使用的定律。
示例要代表目标分布,标签和输出格式一致;复杂信息可分区,但分隔符本身不是安全边界。具体业务事实仍需来源。
给出反例明确“简洁”不等于缺证据
输入与条件。期望答复:“timeout=3,来自config:7,单位未声明”。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1正例 | 有数值、位置和限制 | 符合目标。 |
| 2反例 | “超时为3秒,已经确认” | 擅自补单位。 |
| 3提示作用 | 让模型看到需要保留的边界 | 实际仍需用任务评测验证。 |
把过程连起来。好的示范不仅展示格式,还展示不应推断的内容。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把一段混杂规则、日志与用户要求的Prompt分成明确区块,再检查是否保留了所有必要限制。比较改结构与简单增加文字的效果。
完成标准是通过真实任务找到有效表达,而不是认为某种标签形式具有魔法。规则冲突和过时资料不能靠排版自动消失。
拓展阅读目录事实依据 [S050] · 练习与工程推导为本书独立编写。
B4.8 · 扩展推理与状态连续性
对应资料:Extended Thinking
Extended Thinking涉及模型额外推理与其接口状态。可见推理摘要、最终回答和受保护状态不应混为一段普通聊天文本。
工具调用之间可能需要保持相关状态,处理方式应遵循所用模型与API。不能自行删改受保护内容后假设行为等价,也不能从最终字数估算全部消耗。
推理状态不是可随意拼接的普通文本
输入与条件。服务返回不透明的推理或压缩状态块R。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1保存 | 按API规定保留原状态对象 | 不要当可读说明改写。 |
| 2续接 | 连同必要调用结果传回 | 保持接口连续性。 |
| 3迁移 | 换模型或会话时检查支持条件 | 不能假定R在任何服务可解码。 |
把过程连起来。状态传递依协议;不可见内部不应凭空解释。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:画出推理、工具调用、工具观察、继续推理的事件序列,标出哪些由应用保存、哪些由模型服务管理。再设计截断或恢复时的验证。
完成标准是让用户得到可核查证据与结论,而不是要求无限展示内部过程。增加推理预算不能弥补不存在的工具权限或未提供的私有知识。
拓展阅读目录事实依据 [S051] · 练习与工程推导为本书独立编写。