Study Skills · Learn

Cadenvo 生成链路:从后端证据到提示词、设计图与网页

用你的前端开发工作台,理解怎样把业务事实变成可审阅指令、视觉候选和页面代码。把模型生成与浏览器显示分开,把“已经产出”与“可以交付”分开。

计算机基础 × 人工智能应用工程/learn建议 75–100 分钟数学背景入门 → 读源码与工程判断2026-09-15
学习进度0 / 5
本页目录
Primer

先把核心术语认清楚

卡片收起时显示一句话直觉;展开查看定义、案例和边界。后面还有变量与伪代码预备,不需要先猜字段名的意思。

先认词:这门课默认你理解集合、函数、图和概率,不默认你熟悉计算机缩写。先把下面的对象分开,再读生成流程。

Frontend / Backend · 前端 / 后端前端接收人的操作并显示结果;后端执行受控任务、读取数据并维护可信状态。
直觉
眼前的编辑框是前端,真正组织证据并启动模型调用的是工作台后端。
当前案例
Cadenvo 业务后端管理训练数据;本仓库的工作台后端管理证据、生成任务和文件。两个后端不是同一个职责。
边界
“后端”不一定在远方服务器上;这里也可以是你电脑上运行的 Python 服务。
Application Programming Interface (API) · 应用程序接口程序之间约定好的调用入口:提交什么,返回什么,失败怎样表达。
直觉
像一个带输入输出要求的函数入口,只不过调用可能跨进程或网络。
当前案例
浏览器请求生成提示词、确认提示词和生成图片,是三个不同的接口操作。
边界
接口存在只证明有这项约定,不证明当前身份已经成功调用。
Hypertext Transfer Protocol (HTTP) · 超文本传输协议浏览器与服务之间传递请求和响应的规则,包括方法、地址、状态码与正文。
直觉
它规定消息怎样送过去和答回来,不替你决定业务是否正确。
当前案例
读取任务状态通常用 GET;准备、修改、确认、生成等操作在本项目使用 POST。
边界
一次请求失败,不一定表示服务端任务从未执行,可能只是响应没有送回。
JavaScript Object Notation (JSON) · 对象表示法把记录、数组、字符串和数字写成可交换的文本;它是数据,不是自动执行的程序。
直觉
对象可理解为“字段名到值”的映射,数组是有顺序的值序列。
当前案例
后端把任务编号、状态、提示词正文和图片地址装进 JSON,浏览器解析后放进界面。
边界
JSON 格式正确不代表字段值真实,也不代表用户有权限执行其中描述的操作。
Manifest · 项目清单明确登记项目有哪些角色、页面、层级、页面标识和设计建议的结构化文件。
直觉
它回答“当前到底在做哪一个页面”,避免模型或浏览器自行猜测项目结构。
当前案例
workbench-project.json 是页面结构来源,生图任务要绑定对应的项目与页面。
边界
清单声明某个页面,不等于那个页面的业务功能已经实现。
API Contract / Runtime Evidence · 接口契约 / 运行证据契约写明允许的数据形状;运行证据记录某时、某身份、某次请求实际观察到什么。
严格定义
OpenAPI Specification(开放接口描述规范)用于描述接口;JSON Schema(JSON 数据模式)用于表达字段、类型、枚举和约束。
当前案例
接口定义中有“发布”,与教练账号真的完成过一次发布,是两种证据。
边界
列表读取成功不能证明写操作可用;某个账号成功也不能推出所有角色都有权限。
PageContext · 页面上下文把当前页结构、接口契约、源码来源、截图观察和运行证据组织成可校验的任务输入。
直觉
不是把整个仓库塞给模型,而是为当前页准备一份带来源的资料包。
当前案例
同一份上下文产生面向图片、网页代码和交付记录的不同版本。
边界
资料包中存在某条记录,不代表该记录足以支持任意业务结论。
Projection · 数据投影按用途选择、删减或重组数据,保留当前任务需要的部分。
直觉
同一份记录,设计师看页面职责,代码生成器还需要字段与操作约束。
当前案例
project_image 与 project_html 是两种任务投影,不是简单复制全部资料。
边界
这里是软件中的数据变换,不必是线性代数里的正交投影,也不保证无信息损失。
Prompt / Generative Model · 提示词 / 生成模型提示词描述任务与约束;生成模型根据这些输入提出文字、图片或代码候选。
直觉
提示词像任务单,模型像提出方案的执行者;任务单不是算法正确性的证明。
当前案例
本项目分别调用模型整理生图指令、生成设计图、生成网页代码。
边界
模型参数、训练过程和图像模型内部推理算法不在这条应用代码链里实现。
Hash / SHA-256 · 哈希摘要把一份输入映射为固定长度指纹,用于核对内容是否仍与之前绑定的一致。
严格定义
SHA-256 属于 Secure Hash Algorithm 2(安全散列算法第二代),产生 256 位摘要。确定的输入字节产生确定的摘要。
当前案例
确认时记录提示词的完整摘要;生成前重新计算文件摘要,防止确认后换了内容。
边界
摘要不是加密,不证明文字为真,也不单独证明是谁批准的。碰撞并非数学上不可能,只是在适当假设下极难构造。
Finite State Machine (FSM) · 有限状态机用有限状态、事件和转换条件,明确什么操作此时允许发生。
直觉
草稿可以改;生成中的任务不能被当作普通草稿覆盖。
当前案例
提示词任务有 draft、confirmed、generating、generated、failed 等状态。
边界
前端按钮变灰只是交互提示,真正的合法转换还必须在服务端检查。
Optimistic Concurrency Control · 乐观并发控制提交修改时带上自己读到的版本;版本已变化,就拒绝覆盖别人较新的结果。
直觉
你读到第七版,不能在别人提交第八版后,仍把自己的第七版修改强行写回。
当前案例
工作流更新比较 revision 与清单摘要,再在锁保护下写入并递增版本。
边界
这是冲突检测,不是自动合并,也不是完整数据库事务。
HTML / CSS / JavaScript · 网页结构 / 样式 / 行为HTML 定义元素结构,CSS 规定视觉布局,JavaScript 响应操作并改变页面状态。
严格定义
HTML 是 Hypertext Markup Language(超文本标记语言);CSS 是 Cascading Style Sheets(层叠样式表);JavaScript 是程序语言名称。
当前案例
网页生成阶段产出一份包含结构、内联样式和可选脚本的完整文档。
边界
一张 PNG 图片没有这些可执行交互;浏览器显示 HTML,也不意味着真实业务接口已经接通。
Artifact / Acceptance · 产物 / 验收接受产物是生成的文件;验收接受是依据标准和授权,对特定候选作出的决定。
直觉
“有文件了”“文件能打开”“功能满足要求”“人同意交付”,是四种不同判断。
当前案例
图片摘要、尺寸、生成报告、人工选定记录与网页验收应分别保留。
边界
机器记录 confirmed 不能单独证明用户逐字读过;机器评审也不能冒充自然人的签署。
Reading prerequisites

先学会读变量、字段和伪代码

后文不是要求你背一串函数名。这一页先给出读代码需要的最小约定;七个阶段再解释每个真实函数的职责。数学符号、教学伪代码与真实源码会分别标明。

建议学习安排,不是实测试读时长

全课建议安排 75–100 分钟:术语与本页预备 15 分钟,七阶段源码追踪 35–45 分钟,独立作答 10–15 分钟,核对答案与迁移判断 15–25 分钟。已经熟悉网络和并发基础的读者,可以先读阶段三至六,再回看阶段一、二、七。

程序中的名字怎么读

Variable(变量)是给当前值起的名字;Function(函数)接收输入并执行一段规则,圆括号中的值是参数。f(x) 表示调用 f 并传入 x,不是把两个字母相乘。Object(对象或记录)把字段名与值对应起来;job.id 表示读取 job 记录的 id 字段。Array(数组)是一组有顺序的值。字段名不规定真伪,仍需校验内容。

在本课的 Python 风格伪代码中,= 表示把右侧结果赋给左侧变量,== 才是比较两个值是否相等;在数学公式中,等号表示数学等式。assert 条件 表示条件不成立就停止并报错。AND 或数学符号 ∧ 表示条件必须同时成立;OR 或 ∨ 表示至少一个成立。true / false 表示真 / 假,代码注释不是运行步骤。

字段或状态在本课里读作什么
pageId、manifestId页面标识、项目清单标识:区分当前究竟在处理哪个页面、哪个项目。标识不是页面标题。
jobId、job.id任务标识。请求参数可能叫 jobId,返回的 job 对象内部字段叫 id;它们是不同消息中的字段位置。
prompt、promptDigest提示词正文、供界面辨认的提示词摘要。显示用的摘要前缀不能替代服务端保存的完整确认摘要。
confirmedPromptSha256、confirmedDigest前者是保存的完整提示词确认指纹;后者是某些公开响应中的确认摘要表示。后文的数学变量 d 专指完整的确认摘要。
pageContextId、consumerSurfaceDigest页面上下文身份、当前生成消费者所依赖输入的指纹。后者用于判断生成依据是否已经变化,不是生成图片的指纹。
revision、selectionEpoch工作流版本号、浏览器刷新批次号。前者用来发现提交冲突;后者用来辨认迟到响应,不承担业务授权。
status任务状态字段;值不是随意的文案,而会影响下一步操作是否允许。
draft → confirmed → generating → generated / failed提示词任务的草稿、已确认、生成中、已生成或失败。这里只给主线,实际允许转换由服务端函数检查。
queued、running、completedHTML 任务的排队、运行、完成。它们不是“业务已验收”的同义词。
operationId、httpStatus、referencesDigest接口操作标识、HTTP 响应状态码、参考资料指纹。相同字段名可能出现在不同消息中,要同时看其所属记录。

后文公式的符号预备

第一组:E 是全部待处理证据,e 是其中一条证据,p 是当前页面;Bound(e,p) 表示该证据确实绑定到当前页,Valid(e) 表示相应校验通过,Ep 是筛出的页面证据集合。∈ 表示属于集合,花括号表示集合。这些是教学谓词,不是声称源码有同名函数。

第二组:N 是递归遍历的输入节点数,K 是收集到的不同字段数量,T 是该段数据处理时间,O(…) 表示随规模增长的上界量级,log 表示对数。这个估计只讨论局部遍历与排序,不包含外部模型和网络等待。

第三组:H 是 SHA-256 哈希函数,P 是待校验的提示词文件字节,d 是确认时记录的完整摘要,s 是任务状态。在后面的生成流程模型里,C 表示页面上下文,P 表示提示词文本,I 表示设计图,W 表示网页代码,V 表示浏览器可见画面;文本 P 编码为具体文件字节后才能计算摘要。变量名相同,不意味着可以忽略文本与字节的区别。

伪代码中的函数名是解释,不是让你直接运行的脚本

context、source、draft、checked_draft 分别表示上下文、组装后的模型输入、模型草稿、通过检查的草稿。build_page_context 是真实源码中的上下文构造函数;教学写法中省略了它的完整参数。

deterministic_template 表示按固定模板组装,budgeted_projection 表示在预算内选择数据,text_model 表示调用文本模型,validate_output 表示输出检查,current_input_digest 表示重新读取当前输入指纹,save_draft 表示保存草稿。这组别名是为了把机制分开,不是仓库中可复制调用的完整函数列表。context.input_digest 也属于教学化字段别名。

读每一阶段只追四件事:输入属于谁,函数把它变成什么,什么条件会拒绝,输出被下一阶段怎样使用。能够回答这四件事,比背住函数名更接近真正读懂算法。
Orient

这套系统到底在做什么

本课结论:Cadenvo 的核心不是一条神秘的“后端自动生成前端算法”,而是确定性的证据组织与校验,包住多次不保证确定性的模型生成。浏览器负责输入、编辑、查看与选择;工作台后端负责组织可信输入、维护状态、启动生成并接收文件。

先校正仓库定位:Cadenvo_Frontend 是前端开发工作台,而不是训练业务前端本体。业务后端提供训练业务的契约与运行材料;这个工作台把材料变成页面设计和实现任务。不能因为仓库名字带 Frontend,就把其中的 Python 服务误认成浏览器代码。[S1]

层真正负责什么不应该混入的职责
训练业务后端训练数据、身份、业务操作及其接口不能用工作台生成的视觉图证明业务上线
工作台 Python 后端证据、上下文、提示词、生成任务、文件与版本不等于在本地训练了图像模型
工作台浏览器前端发请求、编辑提示词、显示状态、选定候选、预览网页不是收到提示词后就自己进行模型推理
外部模型执行链提出文字、图像、网页代码候选不能替代业务事实、权限检查和最终验收

证据范围:本课核查固定提交 0b4fedc57e8297b78beb2013a5cf2c30c2b6fa3e 的相关函数与前端调用。标为“源码事实”的内容来自该版本;公式和伪代码是“教学抽象”;“改进建议”不是现有功能声明。此次课程分析没有启动你的本机 Codex、调用付费生图通道,或替业务系统做线上功能验收。

阅读安排:先用约十五分钟建立知识地图,再沿七个阶段读源码;最后用故障题检验自己能否区分输入错误、版本错误、模型错误与浏览器错误。前置复习可看软件工程两小时入门。完整的建议活动分配见前面的读码预备页,时长不是实测数据。

Connect

概念关系与最小知识闭包

两张知识图,不要混用

分类关系:它属于什么在本项目中的内容
上位:软件系统与人工智能应用工程组织程序、数据、外部模型与人的决策
当前:有证据约束的内容生成流水线输入治理、模型调用、任务状态与产物接收
组成部分:数据处理、通信、并发控制、生成、验收页面投影、HTTP、摘要、状态机、图片与代码生成
并列:模型训练与浏览器渲染引擎本仓库调用模型和使用浏览器,并未实现它们全部内部算法

学习依赖图:记录与函数 → JSON 和接口 → 页面上下文与投影 → 文件字节与摘要 → 状态和版本 → 多阶段生成 → 浏览器与交付验证。箭头表示“理解右边需要左边”,不是“右边属于左边”。图论、操作系统、网络、数据库和软件工程在这里汇合,并不是只学一门“大模型课”就能覆盖。

先补齐五个基础动作

序列化(Serialization)把内存中的对象变成文本或字节;反序列化再把它读回对象。JSON 是本项目常用的交换格式。进程(Process)是正在执行的程序实例,线程(Thread)是进程里的执行路径;Python 可以启动 Codex 子进程,也可以用线程管理网页生成任务。渲染(Rendering)是浏览器把文档结构和样式计算成可见画面,不是让模型猜下一份内容。

异步(Asynchronous)表示调用者不必占住当前执行路径等待全部工作完成。JavaScript 的 Promise 表示一个以后完成或失败的结果,await 让当前异步函数等待它,并不等于给浏览器启动了一个模型进程。轮询(Polling)则是隔一段时间主动查询任务状态;它与保持一个较长的请求等待响应是两种做法。[D1]

一个贯穿全课的比方:建筑项目

把项目清单想成“要建哪些房间”,把接口契约想成设计标准,把运行证据想成有日期和测量人的现场勘测报告。工作台先为当前房间整理资料,再请设计者写任务单;人看过任务单后得到效果图,选定方案后再生成施工图。浏览器只是会议室里的展示屏和操作台,不会因为显示了效果图就自动盖出房子。

映射关系是:房间清单对应 Manifest,勘测与规范对应不同证据类型,当前房间档案对应 PageContext,任务单对应提示词,效果图对应图像候选,施工图对应网页代码,交付检查对应验收。比方的边界:模型可能误读资料,网页代码也不是实体建筑;最重要的是“规范、观察、方案、实现、接受”属于不同证据阶段,而不是机械类比它们的材料。

别把“编译”误读成数学保证:本课把资料到任务输入的多步转换称为编译式组织。传统编译器主要按明确语言规则变换程序;本项目中间还调用语言模型改写文字,因此不能宣称整个过程语义等价、可重复或已经被形式化证明。
Reconstruct

七阶段生成链路:沿源码追一次请求

源码阅读路线:证据 → 压缩 → 提示词 → 前端与确认 → 生图 → 网页生成 → 并发与交付。

阶段输入 → 输出执行主体
1. 组织证据页面清单、契约、观察 → 带来源的页面上下文工作台后端
2. 选择与压缩完整上下文 → 当前任务需要的有限输入确定性数据变换
3. 编写生图指令模板与证据 → 可编辑中文提示词后端调用文本模型,再校验
4. 保存与确认用户看到的正文 → 服务端绑定的已确认版本浏览器发请求,后端检查并持久化
5. 生成设计图已确认提示词 → 图片、报告、摘要后端调用图像生成通道
6. 生成网页选定图片、上下文、参考 → 网页代码候选另一项 Codex 任务
7. 接收与显示通过当前输入检查的文件 → 受管网页与预览后端接收文件,浏览器渲染

阶段一:先决定“什么材料有资格进入当前页”

源码事实:build_page_context 读取页面片段,选择当前页对应的接口,规范化源码、截图和运行记录。运行包必须绑定当前页;包和其中的声明不能引用当前页面接口集合之外的操作。它保留来源类别与冲突,而不是把所有内容压成一段没有出处的聊天文字。[S2]

这首先是集合筛选与关系连接问题。页面集合、接口集合、证据集合分别用标识关联;“有同名字段”不等于“属于同一业务对象”。假设两个页面都出现“状态”,筛选时必须带着页面、操作与证据来源,而不能只搜索这个词。

用前面已经定义的 E、e、p、Bound 与 Valid,可写成下面的教学模型:

Ep={e∈E:Bound(e,p)∧Valid(e)}

这里 E 是待处理证据集合,p 是当前页面,Bound 表示来源与页面绑定成立,Valid 表示对应校验通过,E 的下标 p 表示筛选后的页面证据。这是解释用的集合表达,不是声称源码恰好实现了这两个同名函数。

随后,project_image、project_html 和 project_delivery 分别生成图像输入、实现输入和交付摘要。图像侧不必拿全部实现细节;网页代码侧保留更丰富的页面、接口、事实和冲突信息。源类别仍在,不能把“契约说有这个字段”升级成“线上已经存在这条用户数据”。[S2]

阶段二:把材料压进预算,不是随意截断

源码事实:page_context_prompt_evidence 先按固定字段组织输入,再计算序列化文本长度。当前 MAX_EVIDENCE_CHARS 是 8000。这里限制的是 Python 字符串长度,不是 8000 个模型词元,也不是 8000 字节。[S3]

词元(Token)是模型处理文本时使用的编码单位,可能对应一个词、一段词或其他文本片段。中文字符数、UTF-8 编码字节数与模型词元数之间没有固定的一比一关系。因此这项限制控制了工程输入大小,但不是精确的模型上下文额度控制。

逐级处理保留与舍弃为什么这样做
完整结构优先保留接口、运行观察、覆盖状态、源码和视觉来源预算足够就不先丢信息
压缩接口模式摘要化字段、枚举、约束、参数,并保留模式摘要减少重复、冗长的定义
观察记录改成元组表列名列一次,每条记录只保存相同顺序的值少重复键名,仍能解释每列含义
接口索引与词汇表保留操作索引,合并部分字段信息,声明省略进一步压缩,承认细节损失
精简操作元组与来源保留方法、路径、认证要求及必要引用优先维持操作身份,不伪造完整模式
仍然超预算拒绝生成,要求收窄当前页责任映射不让截断后的半份证据冒充完整资料

例如把三条记录都写成 {"operationId":...,"httpStatus":...},会重复键名。元组表改为一次声明列名,再存三行值;这是数据表示优化,不需要神经网络。另一方面,删除部分枚举和参数是真正的信息损失,不能一概叫“无损压缩”。

计算机基础:compact_openapi_prompt_contract 递归遍历对象与数组,再排序字段集合。递归就是函数处理子结构时调用自身;集合负责去重。若输入有 N 个节点、收集 K 个不同字段,在通常集合操作成本假设下,遍历加排序可理解为:

T∈O(N+KlogK)

T 是这部分处理时间,O 表示随输入规模增长的量级;它不包含模型推理、文件读取或网络等待,不能拿来声称整条生成链“线性时间”。

值得改进:当前部分压缩逻辑用字段名而非完整路径聚合信息,并以首次出现值为准。两个嵌套对象都叫 status 时,约束可能被合并得不够精确。更稳妥的索引可使用“操作标识 + 数据路径 + 字段名”,并记录具体省略了哪些约束。这是从代码结构推导的风险,不是已经复现的线上故障。[S3]

阶段三:确定性模板 + 模型改写 + 输出检查

源码事实:prompt_for 把页面标题、角色、层级、建议、证据和约束放入固定模板。compile_prompt_with_codex 再调用本机 Codex,把它整理为用户能逐字审阅的中文生图指令。最后 validate_generated_prompt 检查文本,阻止一部分英文技术标识、路径和内部语法进入用户可见正文。[S4]

这是三个不同算子:拼模板是确定性变换,模型改写是候选生成,检查器是接收条件。三者分开,才能判断出了什么问题。字段选错要回到证据层;模型把只读权限写成发布能力,要检查提示与语义验证;正文夹带内部标识,则属于输出约束问题。

规范化(Normalization)把输入改成统一形式。这里的字符规范化有助于识别一些外观不同而含义相近的字符;它和“把敏感字段随便删掉”不是一回事。正则表达式是描述字符匹配规则的方式,擅长找某类文本模式,但不能证明一句中文业务陈述有充分证据。

# 教学伪代码;变量和函数别名已在读码预备页解释。
context = build_page_context(page_id)
source = deterministic_template(page, budgeted_projection(context))
draft = text_model(source)
checked_draft = validate_output(draft)
# 模型运行期间来源也可能变化,因此返回后还要重新比较输入身份。
assert current_input_digest() == context.input_digest
save_draft(checked_draft)

本项目在提示词生成前取输入快照,模型返回后再次读取项目、页面消费摘要和证据文件记录,发现变化就拒绝把旧答案登记为新任务。这个设计是为了处理“模型在想的时候,世界已经变了”,而不是为了让模型每次输出相同内容。[S4]

不要硬套检索术语:检索增强生成(Retrieval-Augmented Generation,RAG)通常指先检索相关材料,再把检索结果交给模型。本课核查的主链以明确的页面绑定、接口映射和证据筛选为核心;没有据此证明它使用向量数据库、向量相似度检索或专门训练的页面模型。可以称它为证据驱动的上下文组织,不必给未实现的机制贴标签。

阶段四:提示词怎样从后端来到前端,又怎样被用于生成

源码事实:app.js 的 preparePrompt 向 /api/prompts/prepare 发送包含 pageId 的请求,等待后端返回任务对象。public_job 暴露可显示的状态、提示词、摘要、当前页面与任务标识等字段。浏览器解析 JSON 后更新自己的状态,再把正文放进编辑器。[S4][S5]

因此传输的不是“模型脑子”,也不是自动执行的提示词。可以把它看作远程函数调用:输入一个页面编号,得到一个任务记录。正文进入文本框,状态决定按钮和提示信息;后端才保存权威的任务文件。

// 教学化的消息示例;值是占位符,不是运行记录。
{
  "job": {
    "id": "example-job",
    "pageId": "example-page",
    "status": "draft",
    "prompt": "围绕当前训练页,呈现证据允许的内容……",
    "promptDigest": "摘要显示前缀"
  }
}

当前界面有一个容易讲错的细节:独立的确认按钮已经不是必经界面。用户点击“生成视觉候选”时,ensureConfirmedPrompt 会在需要时先保存正文,再调用确认接口,随后才调用生图接口。已经确认且未修改时可复用确认。接口层的“保存 → 确认 → 生成”没有因此消失。[S5]

浏览器                         工作台后端
点击生成视觉候选
  ├─ POST /api/prompts/update  → 保存当前正文,状态回到草稿
  ├─ POST /api/prompts/confirm → 比较文件摘要,记录确认摘要
  └─ POST /api/image2/generate → 重新检查确认与当前输入,启动生图
收到任务与候选地址            ← JSON 响应
更新界面、展示候选

提示词编辑采用防抖(Debouncing):输入暂停约一秒再保存,避免每个按键都发请求;切走前也尝试补存。这是减少重复操作的调度办法,不是数据库事务,也不保证突然断电前的最后一个字一定写入。

服务端确认会记录完整的 SHA-256。设 P 为当前提示词文件字节,d 为确认时保存的摘要,那么生图至少必须满足:

H(P)=d∧s=confirmed

H 是 SHA-256 函数,s 是任务状态,confirmed 表示已确认。还要额外验证页面消费来源仍有效,不能只检查这一个等式。界面显示的短摘要只是给人辨认;不是把内部比较也缩短成同样长度。这个协议绑定“生成使用哪一版”,但单凭机器状态无法证明人真的逐字阅读。[S4][S6]

阶段五:设计图怎样生成,失败怎样切换

源码事实:generate 在全局生成锁中检查当前输入、确认状态和提示词摘要。它先探测并尝试原生生图通道;遇到该路径的错误后,清理输出,再尝试已配置的 Sub2API 桥接通道。桥接是把一种调用方式转换到另一条服务接口的适配层,不是本项目新增了一种图像生成模型。[S6]

这属于顺序故障切换(Sequential Failover),不是两个模型并行比赛。原生路径成功就无需等待后备;走到后备时,前面已耗去的时间不会自动消失。两个通道还可能共享上游故障,因此不能不加假设地把它们当作相互独立。

候选接收检查实际文件、PNG 图像格式及尺寸、成功报告和文件摘要。PNG 是 Portable Network Graphics(便携式网络图形),是一种图像文件格式。失败时清掉不完整候选,避免失败的旧图仍被当作成功结果展示。[S6]

这里的应用代码可以证明“调用哪条路径、检查了哪些结果”,不能回答外部图像模型每一层网络怎样计算。文本模型可以抽象为从条件分布提出文字候选;图像模型也可抽象为根据输入提出图像候选。不能只凭一个服务接口,就断言其内部必定采用某种训练配方或生成架构。

通信方式也要如实区分:提示词准备和生图在当前前端都是等待 POST 响应的路径;HTML 生成另有持久化任务与后台执行。JavaScript 使用 await,并不能把整条链描述成统一消息队列,更不能凭空说它采用服务器事件流或双向推送。[S5][S6][S7]

阶段六:图片不会自己变成网页,而是又启动一次代码生成

源码事实:视觉方案选定并获准进入 HTML 阶段后,launch_replica / create_replica_job 创建任务记录,并在线程中执行 run_replica_job。输入包括选定图片、当前页的 HTML 投影、参考资料;编辑任务还会带上现有 HTML 与用户修改要求。[S7]

后端把选定图片以图像输入交给 Codex,并要求在隔离的任务目录里产出完整网页。接收前再次检查页面消费来源、参考资料摘要和所选候选身份。这样模型执行期间发生的页面变化或重新选图,不会被旧任务直接覆盖到新版本上。[S7]

用读码预备页已经定义的 C、P、I、W、V,表达三次生成与一次显示:

C = 当前页面上下文
P = 文本模型(模板 + 图片任务所需的上下文)
I = 图像模型(已确认的 P)
W = 代码模型(已选定的 I + 网页任务上下文 + 修改要求)
V = 浏览器渲染(W)

C、P、I、W、V 分别表示上下文、提示词、图像、网页代码和可见画面。前面三次生成依赖模型提出候选;最后一次由浏览器解释具体代码。I 好看,不能推出 W 正确;W 能打开,也不能推出真实业务已经接通。

HTML 生成不是复制一张图的像素,而是重新构造元素结构、尺寸布局和交互代码。把它类比为“从视觉目标反推实现”更准确。但当前源码并没有实现一个可证明最优的布局求解器,也没有保证设计图与网页逐像素一致。

接收门禁的真实强度:normalized_html 检查字符串、大小,以及是否出现文档类型或 html 标记。这是基础完整性检查,不是完整语法解析,更不是脚本安全审计或功能正确性证明。save_html 还核对当前上下文后保存文件与元数据;这些检查不能被包装成“自动生成的网页已经安全上线”。[S8]

阶段七:状态、版本与浏览器显示为何必须分开控制

层次源码中的防错机制主要防什么
提示词任务草稿 → 确认 → 生成中 → 已生成或失败;改正文会清除旧确认用未确认或被替换的正文生成
页面来源consumerSurfaceDigest 与当前消费输入比较拿旧接口、旧证据或旧页面定义生成新版本
工作流决定清单摘要、revision、候选身份共同核对两个人同时操作时旧决定覆盖新决定
浏览器切页selectionEpoch 递增,完成时检查页面与批次较慢的旧页面响应干扰当前显示
HTML 接收任务结束后在锁内重查来源与选择模型长时间执行后把过时结果写回

批次号(Epoch)在这里是前端为刷新操作递增的编号。你先打开甲页再打开乙页,甲页请求最后才回来时,旧刷新不能据此宣称当前乙页已刷新完。它解决的是响应顺序,不是业务权限。服务器的版本控制仍然必要。[S5]

锁(Lock)让特定临界区同一时刻只由允许的执行者进入;临界区就是不能相互穿插执行的共享状态读写片段。乐观版本比较判断“你读的版本是否仍有效”,锁保护“比较与更新之间不被另一条本进程执行路径插入”。不要把 Python 进程内的锁直接当成多台服务器共同持有的分布式锁。[S7]

原子替换(Atomic Replacement)把临时文件写好后替换目标,让读者尽量看到一份完整旧文件或完整新文件,而不是半份文本。项目使用这种方式写 JSON 和受管内容。但 HTML 与元数据是两个文件,分别替换不等于跨文件的完整事务;原子可见性也不等于已经保证断电后的持久性。[S8][D2]

还有一个细节:生图主函数在启动时检查输入,后续选用候选时又会检查来源;本课没有把它说成“每次模型完成后都在同一处立即重查”。HTML 接收路径确有结束后的重查。描述真实检查位置,比笼统说“系统全程强一致”更有价值。

Map

映射回计算机基础,再判断怎样改进

这几个算法分别属于哪门计算机基础

核心机制基础知识读源码时要问
页面证据筛选与投影集合、关系、字典、数据建模按什么标识连接?错误页面的证据能否混进来?
递归摘要与预算压缩树遍历、集合去重、排序、复杂度删了哪些信息?同名字段是否仍可区分?
模板 + 模型 + 校验编译流程、输入输出契约、程序分层确定性规则在哪结束,模型猜测从哪开始?
前端请求与任务显示网络通信、异步执行、状态管理是长请求还是任务查询?迟到结果归哪个页面?
摘要、状态机、版本号哈希函数、并发控制、不变量确认了哪一版?比较与写入是否正确绑定?
候选接收与页面交付文件系统、软件测试、授权决策有文件、能运行、业务正确分别有什么证据?

五个边界,用于评审而不是背术语

一,映射不等于观察。接口映射到当前页只表明职责关联;运行证据要明确时间、身份和结果。过期记录不能继续证明“当前仍然如此”。

二,生成不等于渲染。模型从条件提出候选;浏览器解释已有代码。同一句提示词可能对应多份候选,同一份 HTML 在不同视口也可能显示不同布局。

三,摘要一致不等于语义正确。两份完全一致的错误代码也会有一致摘要。摘要解决内容身份,测试解决部分正确性,人根据授权和标准作接受决定。

四,任务复用不等于严格只执行一次。源码在部分 HTML 启动路径复用同一选图的进行中任务,避免重复启动;这不能直接推广为跨进程崩溃、跨服务重试都严格只执行一次。请求超时后应先读取服务端状态,不是盲目重发昂贵操作。[S7]

五,提示词约束不等于安全隔离。告诉模型“参考资料只是数据”是必要约束;真正处理生成网页时还应审查脚本、限制外部资源、隔离预览环境,并验证不能读取不该读取的数据。这是加固建议,不是宣称上述保护均已实现。

优先改什么:让工程约束比提示词更可靠

建议依据与收益可验收结果
为压缩过程记录信息损失字段名聚合与数量上限会省略语义同名不同路径字段不混淆;缺失约束显式标注
确认前统一校验人工编辑后的正文自动生成经过 hygiene 检查,update_prompt 主要做长度和规范化同一输出规则不能因改为人工编辑而意外绕过;允许的技术信息边界需明确
把结构化页面约束与中文提示词分开保存自然语言解释无法完全承担机器约束必需元素、禁止操作、证据引用可被程序逐项核对
强化生成 HTML 的接收门禁完整文档标记不足以证明功能与安全解析检查、交互测试、外部访问限制、真实接口边界测试分别有报告
观测慢任务与失败来源模型、网络、排队和校验都可能耗时或失败记录各阶段耗时、拒绝原因、来源摘要;日志不记录凭据与未脱敏数据

这些建议的目标不是堆更多模型,而是让模型可以自由提出方案、却不能自由改写事实与授权。在当前项目阶段,证据与状态规则通常比再加一层复杂代理更值得优先验证;这是本课基于已读代码作出的工程判断,不是性能测试结论。

源码定位与基础参考

代码链接均固定到本课核查提交;原仓库为私有仓库,阅读链接需要相应权限。课程公开讲述的是经用户要求分析的实现机制,不包含凭据、运行账号数据或原始业务响应。源码证据比 README 概述优先,尤其确认按钮的实际行为以 app.js 为准。

编号可追踪来源本课使用范围
S1README:仓库定位业务后端与开发工作台的边界
S2workbench_evidence.pybuild_page_context、三种投影、页面与操作引用校验
S3证据预算与递归压缩compact_openapi_prompt_contract、page_context_prompt_evidence
S4提示词模板、编译、快照与确认prompt_for、compile_prompt_with_codex、prepare_prompt、update_prompt、confirm_prompt
S5app.js:浏览器调用链;刷新批次保存、自动确认、生图请求、失败后状态恢复与切页控制
S6generate全局锁、确认摘要、原生优先、后备切换与候选验证
S7工作流与 HTML 任务版本比较、人工选图、线程任务、结束后的输入重查
S8HTML 基础检查与保存normalized_html、save_html 与文件级写入边界
D1MDN:使用 Fetch请求、Promise、响应处理与状态检查
D2Python:os.replace成功替换的原子性与文件系统边界
Attempt

现在把它当成一道题

场景题:一次生成过程里,四种“看似成功”发生了冲突。你正在为甲页修改提示词。旧版本已经确认,随后正文被改;另一位同事更新了页面所依赖的接口材料。你切到乙页,甲页较慢的请求才返回。与此同时,两位评审都拿着工作流第七版选择不同图片,第一位已经提交成功。最后,浏览器提示某次生图请求超时,但服务器上的图片和成功报告实际上已经写出。

请写一份处理决定:正常界面点击生成,与绕过界面直接调用旧任务生图,有何区别?哪些旧结果需要失效,哪些只是不能影响当前显示?第二位评审能否直接覆盖?遇到请求超时应先查什么?即使最终 HTML 文件写出,还缺哪三类交付证据?

要求按“输入事实 → 状态或不变量 → 允许动作 → 不能声称的结论”作答,不要只写“加锁、重试、重新生成”。

Hint → Answer

分级提示与实际答案

提示一 · 方向

先区分五个对象:提示词正文、页面消费来源、当前显示页面、评审版本、服务器任务。它们没有共用一个“成功”开关。先判断每个对象的身份是否仍然是你当时读到的那个。