新闻详情

新闻详情

首页 / 资讯中心 / 详情

Snapcompact 位图帧中的角色来源溯源:oh-my-pi 的 exp06 零开销角色元数据实验设计

发布时间:2026/9/12 17:24:49来源:尧图网络
Snapcompact 位图帧中的角色来源溯源:oh-my-pi 的 exp06 零开销角色元数据实验设计
Snapcompact 位图帧中的角色来源溯源oh-my-pi 的 exp06 零开销角色元数据实验设计【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi导读在 oh-my-pi 的 snapcompact面向视觉大模型的位图帧上下文压缩研究线中如何让视觉模型准确回答这条信息来自哪一方用户 / 助手 / 工具直接决定了压缩归档的可用性——如果模型无法分辨帧内消息的归属即使内容识别再准重建出来的上下文也是错乱的。本文围绕实验脚本 research/exp06_rolecolor.py 与其配套提示词 exp06-prov-image.md完整解析这条角色来源溯源provenance评测协议的设计思路它以字形颜色编码角色归属、以零字符开销写入元数据并通过强制二选一user/assistant/tool的输出约束完成量化评测。读完本文你将掌握这个提示词逐字逐行在做什么、它如何与实验主流程衔接、另外两套对照条件文本标签、无元数据各自的作用以及这套零开销元数据设计如何被上层生产代码snapcompact.ts 中的sent/bw变体与角色色调逻辑呼应。一、实验背景provenance来源溯源评测从何而来1.1 snapcompact 的研究脉络packages/snapcompact 的核心思路是被压缩丢弃的对话历史经序列化后以等宽像素字体的方式渲染成密集 PNG 帧再由视觉模型直接读回。整个流程本地且确定性——不需要额外的 LLM 调用无 API key延迟仅限渲染本身光栅化与 PNG 编码发生在原生代码renderSnapcompactPng见 crates/pi-natives中。既然帧里承载的是对话转录而对话天然由三种角色user / assistant / tool的消息交织而成那么压缩重建后必须回答一个关键问题帧里这段文本究竟是用户说的、助手说的还是工具返回的这就是 provenance来源溯源评测要量化的能力。仓库中一系列exp*实验脚本research/正是为此服务的评测工场而 exp06_rolecolor.py 是其中把角色元数据当作自变量来研究的专线。1.2 exp06 在实验编号中的位置exp05 系列exp05_anchors.py研究锚点exp06 是**角色色彩rolecolor**专线验证用字形颜色编码消息归属这一零字符开销方案是否可行、能否与文本标签方案多花约 7 字符/条在溯源准确率上打平exp07exp07_readtax.py则转入读取税问题图像条件耗时被 CoT 转写主导需用提示词协议effort-low、locate-then-answer等削减。可见 exp06 的 provenance 问题是一个独立的、可量化验证的研究对象。二、逐字逐句解析 exp06-prov-image.md该提示词prompts/exp06-prov-image.md的完整正文如下The attached image contains a conversation transcript rendered as a bitmap: monospace pixel font, {cols} characters per row, {rows} rows, read left-to-right then top-to-bottom. The transcript interleaves messages from three roles: user, assistant, and tool. {encoding} For each numbered question below, do NOT answer the question itself. Instead identify which roles message contains the answer to it. - Reply with exactly one word per line: user, assistant, or tool. - You must choose one of the three roles for every question, even if uncertain — never reply UNREADABLE. - Output a numbered list, one role per line, no commentary.逐段功能拆解如下。2.1 帧描述段第 12 行让模型建立位图阅读坐标系The attached image contains a conversation transcript rendered as a bitmap: monospace pixel font, {cols} characters per row, {rows} rows, read left-to-right then top-to-bottom. The transcript interleaves messages from three roles: user, assistant, and tool. {encoding}{cols}/{rows}是格式化占位符由实验脚本在运行时以.format(colscols, rowsrows, encodingENCODING[cond])填入见下方运行时机一节。值来自capacity(FONT, args.size)——即当前字体在当前帧尺寸下能容纳的列数、行数。之所以要显式告知行列数是因为位图没有天然的行列边界信息明确每行 N 字符、共 M 行、从左到右、从上到下之后模型才能把像素映射回文本网格后续定位到某条消息所在区域才有坐标基础。{encoding}是角色编码方式的说明插槽它并非写死而是由脚本按条件注入ENCODING[cond]保证模型知道当前这张图用的是哪种角色标记手段。这是该提示词最重要的设计点之一同一个 provenance 提示词模板通过一个占位符即可切换三种编码说明从而在不改题面结构的前提下做条件对照。三种编码说明原文来自 exp06_rolecolor.py 的ENCODING常量条件注入的 encoding 说明角色元数据载体img-6x10-roleGlyph color encodes the author role: dark blue user, dark green assistant, dark red tool. A message boundary is where the glyph color changes.字形颜色色调通道img-6x10-tagbwEach message is preceded by a bracketed role tag rendered in the text: [user], [asst], or [tool].行内文本标签img-6x10-nometaThe rendering does NOT visually indicate roles; glyph colors only cycle per sentence and carry no role information. Use your best guess.无强制猜测注意第三种条件非常刻意它明确告诉模型图里没有任何角色信息只能猜。这就为溯源准确率提供了一个下限参照provenance floor。2.2 任务指令段第 34 行把回答问题改写成定位来源角色For each numbered question below, do NOT answer the question itself. Instead identify which roles message contains the answer to it.这是 provenance 评测与常规 QA如 exp06-qa-image.md的根本区别评分对象不是答案文本而是答案所在消息的归属角色。do NOT answer the question itself 防止模型顺手把答案写出来而干扰逐行解析它要求模型必须先把注意力放到哪一段、属于谁上。2.3 输出格式约束段第 59 行强制闭合、可机读、零注释- Reply with exactly one word per line: user, assistant, or tool. - You must choose one of the three roles for every question, even if uncertain — never reply UNREADABLE. - Output a numbered list, one role per line, no commentary.三条约束逐条看每行一个词且只能是user/assistant/tool三者之一让输出天然可机读无需额外解析容错。这与脚本侧parse_numbered的解析逻辑对接。必须为每个问题选一个角色不确定也绝不输出UNREADABLE这是与常规 QA 提示词如 qa-image.md 允许UNREADABLE的最大差异。为什么逼模型硬选因为溯源准确率按答案所在消息的真实角色计分一旦允许UNREADABLE模型会把所有没把握的问题全部甩给这个逃生舱实验将拿不到任何区分度。硬选 随机正确率 1/3 的地板使得高于 1/3 的准确率都具有统计意义。编号列表、无任何评论保证输出与问题编号一一对应供脚本逐行对齐计分。2.4 与常规 QA 提示词的区别小结维度exp06-prov-image.mdexp06-qa-image.md内容 QA任务指出答案所在消息的角色抽取答案文本允许 UNREADABLE禁止硬选允许读不清就报 UNREADABLE输出格式每行一个角色词每行一个短语/词评分口径角色归属准确率accuracy内容 F1元数据说明有{encoding}插槽固定Glyph color encodes the author...说明两者在同一张图上、同一组问题下并行运行形成内容能读对 归属能分对的双维评测。三、提示词在实验主流程中的运行时机provenance 提示词不是孤立存在的它被 exp06_rolecolor.py 的run_cell驱动与内容 QA 在同一轮实验里先后执行。3.1 三条件同构的评测网格MODELS {gpt-5.5: (2.0, 16.0), google/gemini-3.5-flash: (0.6, 4.0)} LENGTHS (50, 150) CONDITIONS (img-6x10-role, img-6x10-tagbw, img-6x10-nometa)评测网格 模型 × 归档长度 × 渲染条件。同一个 SQuAD 语料块分别以三种方式渲染img-6x10-role纯文本 逐字符角色色调蓝user、绿assistant、红tool即零字符开销元数据主条件img-6x10-tagbw纯文本前加[user]/[asst]/[tool]文本标签黑底白字即文本等价物对照img-6x10-nometa无任何角色元数据退化为sent变体即溯源地板参照。角色分配方式为轮询 确定性洗牌assign_rolesseed 固定每三条连续段落恰好覆盖三种角色各一次段落组内顺序由 rng 打乱。这样任何位置的任何一条消息都有近似均匀的角色先验避免角色与位置相关的混淆变量。3.2 分块逻辑三条件共享同一分块边界def build_chunks(paras: list[dict], budget: int) - list[tuple[int, int]]: Greedy consecutive passage ranges [a, b) whose TAGGED rendering fits budget. chunks, cur, cur_len [], 0, 0 for i, p in enumerate(paras): add 7 len(p[ctx]) 1 # [xxxx] ctx if cur_len add budget and i cur: chunks.append((cur, i)) cur, cur_len i, 0 cur_len add chunks.append((cur, len(paras))) return chunks分块以**带标签tagged**文本的容量为准预算 40716 字符对应 6x10 字体的帧容量。因此三种条件下同一张图对应的段落集合完全一致、问题集完全一致唯一差异就是元数据载体本身——这是干净对照实验的关键前提。代价是分块边界会与基线纯文本恰好 40716 字符略有偏移问题集高度重叠但并非逐字符相同脚本注释里明确说明了这一点。3.3 提问采样与溯源记录def sample_questions(...): ... picked.append({ q: .join(qa[question].split()), golds: sorted({a[text] for a in qa[answers]}), pos_rel: (offsets[pi] - start) / (end - start), pi: pi, # 记录来源段落下标 })每个问题都记录了其来源段落下标pi配合轮询角色分配结果即可确定正确答案所在消息的真实角色——这就是 provenance 评分的 ground truth。同时pos_rel记录了答案在块内的相对位置为后续 exp07 的按区域定位实验埋下伏笔。3.4 提示词格式化与双评测调用prov_messages [ { role: user, content: [ { text: load_prompt(exp06-prov-image.md).format( colscols, rowsrows, encodingENCODING[cond] ) }, {image_path: png}, {text: q_block}, ], } ]load_prompt(exp06-prov-image.md)读取提示词模板.format(cols..., rows..., encoding...)注入帧几何与编码说明消息内容按「提示词文本 → 图片 → 编号问题块」的顺序组装cached(...)走实验框架的缓存run.py的QA_CACHE/RESULTS同一输入只调用一次供应商 API支持断点续跑与复现内容 QA 与 provenance QA 各走一次llm_complete分别记录 usagetoken 消耗为成本-收益分析提供数据。3.5 溯源答案的归一化def norm_role(answer: str) - str: a answer.lower().strip( \t.[]()\*) if assist in a or a asst: return assistant if user in a or human in a: return user if tool in a or function in a: return tool return a模型偶尔会输出asst标签条件的原文或human/function等变体归一化函数把它们映射回三值角色空间保证计分口径统一。注意输出约束本身每行一个词已经大幅压缩了归一化需求这里只是兜底。四、为什么用颜色编码角色零字符开销的元数据设计4.1 颜色即元数据ROLE_HUES {user: 0.62, assistant: 0.33, tool: 0.02}再经colorsys.hls_to_rgb转为 RGBrender_role中逐字符上色。角色信息不占用任何字符位完全寄生于已有的字形像素。对比文本标签方案[user]、[asst]、[tool]每条消息多花恰好 7 个字符脚本注释特意标注all [xxxx] 7 chars在帧容量固定的前提下标签会挤占真实内容的空间。而颜色方案的边际字符成本为零——这正是它被称为zero-char metadata的原因见脚本 docstring。4.2 消息边界 颜色跳变ENCODING里明确写了A message boundary is where the glyph color changes。也就是说颜色通道同时承担了两层语义归属谁说的和分段消息在哪里结束、下一条在哪里开始。模型在溯源时只要发现颜色跳变就能划出一条消息边界再按颜色对应角色。4.3 与生产代码sent/bw变体的呼应这套颜色 元数据的思想在生产代码里以两种形态出现packages/snapcompact/src/snapcompact.tssent变体Ink: sent cycles six hues at sentence boundaries——在句边界循环六种色调此时颜色编码的是句子边界结构化信息bw变体纯黑墨水颜色通道全部让位给可读性此时没有任何色调元数据。实验里的img-6x10-role角色色调与img-6x10-nometa退化为sent变体颜色只按句子循环、不携带角色信息恰好是颜色承载语义元数据与颜色仅作装饰的对照——实验结论直接影响生产变体选型若角色色调能显著提升溯源准确率未来帧格式可引入角色色调这类新 ink 变体若收益不显著则维持sent/bw两态即可。从源码结构看Shape.variant目前只支持sent | bw两种取值见 snapcompact.ts 中Shape接口实验若验证角色色调有效需要为该字段扩展取值。4.4 饱和度随新鲜度衰减被刻意省略的设计脚本 docstring 特别说明Saturation-decay-by-recency was considered and deliberately omitted——按消息新鲜度对旧消息降饱和度的方案被考虑过但刻意不做。理由有二当前评测问题没有覆盖新近度维度衰减方案无评测目标可验证降饱和会破坏角色色调信号本身——provenance 任务测的就是色调自毁变量等于自毁实验。这个省略本身就是研究边界意识的体现不引入无评测支撑的复杂度。五、评测口径与可验证依据5.1 计分方式内容 F1常规 QAimg-6x10-role与img-6x10-tagbw两种条件走 exp06-qa-image.md / exp06-qa-image-tag.md用 SQuAD 标准 F1 计分溯源准确率provenance QA三种条件都跑逐行解析输出与消息真实角色比对计 accuracynometa条件不跑内容 QA内容评测与基线共享只跑 provenance以提供溯源地板。5.2 与相邻实验的关系实验文件角色/溯源相关要点exp06 rolecolorexp06_rolecolor.py色调 vs 标签 vs 无元数据 的溯源对比exp07 readtaxexp07_readtax.py削减图像条件下的 CoT 转写开销no-transcribe、locate-then-answer等协议exp08exp08_foveate.py等归档中段的中央凹降采样等一个值得注意的衔接exp06 记录下每个答案的pos_rel块内相对位置exp07 的按行带定位再读取协议与之形成互补——前者验证能不能分对归属后者验证能不能低成本地只读相关区域。5.3 生产测试的呼应test/snapcompact.test.ts 中有与形状/供应商相关的测试如maps provider APIs to their eval-winning shapes、provider image budgets stay permissive等验证生产侧的 shape 解析与预算逻辑与实验侧的角色/形状选型形成实验定调、测试守线的闭环。六、如何复现与延伸6.1 运行实验脚本头部以 PEP 723 声明运行环境Python ≥ 3.10依赖pillowdocstring 给出运行方式# 在 packages/snapcompact 目录下 uv run exp06_rolecolor.py需要说明的适用前提需要供应商 API key脚本通过providers.py的load_env_key加载MODELS字典里列出的是当时评测的模型与价格假设如gpt-5.5、google/gemini-3.5-flash帧渲染依赖bdf.pyBDF 位图字体解析与渲染与本地字体缓存CACHE结果与中间 PNG 均写入CACHE/RESULTS通过cached()保证可复现、可断点续跑。6.2 想换新条件怎么做新增角色编码方式在CONDITIONS增加条件名在ENCODING增加对应说明在build_image/QA_PROMPT增加渲染与 QA 提示词分支新增角色扩展ROLES与ROLE_HUES当前三角色对应三种色相多于三种时色相间隔会被压缩需重新验证可分辨性换字体/帧尺寸改FONT与--sizecapacity()会自动重新计算列行数提示词中的{cols}/{rows}随之更新。6.3 延伸方向基于实验注释的合理推断若角色色调被验证显著有效可扩展Shape.variant支持角色色调ink 变体目前 snapcompact.ts 仅支持sent/bw可引入按新鲜度降饱和的变体设计但需先有覆盖新近度维度的评测任务可结合 exp07 的定位协议将溯源与低成本定位读取合并为一条更省 token 的读取管线。七、小结exp06-prov-image.md 是 snapcompact 角色溯源实验的核心测评契约它以一段可格式化的帧描述含{cols}/{rows}/{encoding}占位符建立阅读坐标系与编码说明以不答问题、只判归属的任务定义把内容 QA 改写成溯源 QA以每行一个角色词、禁止 UNREADABLE、编号输出的约束保证机读性与统计有效性。它由 exp06_rolecolor.py 驱动在同一分块、同一问题集下对比三种元数据载体色调 / 文本标签 / 无并把结论与生产代码的sent/bw变体设计、test/snapcompact.test.ts 的预算测试贯通起来。理解这份提示词就理解了 oh-my-pi 如何用零字符开销的视觉元数据解决压缩上下文中的消息归属问题——这正是位图压缩方案能否在生产环境中安全落地的关键一环。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TPOT自动化机器学习工具:原理、应用与优化实践 2026/9/12 18:43:00

TPOT自动化机器学习工具:原理、应用与优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Tasmota Berry 固件固化(Solidification)的预处理器宏转储机制:tasmota_defines_for_berry.h 的设计与消费链路 2026/9/12 18:43:00

Tasmota Berry 固件固化(Solidification)的预处理器宏转储机制:tasmota_defines_for_berry.h 的设计与消费链路

Tasmota Berry 固件固化(Solidification)的预处理器宏转储机制:tasmota_defines_for_berry.h 的设计与消费链路 【免费下载链接】Tasmota Alternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, O…

阅读更多 →
MATLAB搭建EEG神经反馈系统:实时采集与标记同步实践 2026/9/12 18:43:00

MATLAB搭建EEG神经反馈系统:实时采集与标记同步实践

简介:一套基于MATLAB的脑电神经反馈训练系统,面向神经科学、心理学研究者及脑机接口爱好者,用于实时采集并记录脑电信号,结合神经反馈训练帮助用户学习自我调节大脑活动,适用于注意力提升、焦虑缓解等认知训练场景。系…

阅读更多 →
基于鲁棒优化的应急电源配置与调度系统实现 2026/9/12 18:43:00

基于鲁棒优化的应急电源配置与调度系统实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
链表补充练习,双链表的模拟实现 2026/9/12 18:43:00

链表补充练习,双链表的模拟实现

前言❤️❤️ hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹 这篇博客是链表博客的最后一篇,内容…

阅读更多 →
射频器件选型实战:滤波器、功分器、放大器与混频器的判断框架 2026/9/12 18:39:59

射频器件选型实战:滤波器、功分器、放大器与混频器的判断框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞