<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>由ai协助 on atin的个人小站</title>
        <link>https://atin.asia/categories/%E7%94%B1ai%E5%8D%8F%E5%8A%A9/</link>
        <description>Recent content in 由ai协助 on atin的个人小站</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Mon, 02 Nov 2026 23:45:00 +0800</lastBuildDate><atom:link href="https://atin.asia/categories/%E7%94%B1ai%E5%8D%8F%E5%8A%A9/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Nyral 的多模型协作：讨论团与评审团，让模型一起干活</title>
            <link>https://atin.asia/archives/multi-model-discussion-circle/</link>
            <pubDate>Mon, 02 Nov 2026 23:45:00 +0800</pubDate>
            <guid>https://atin.asia/archives/multi-model-discussion-circle/</guid>
            <description>&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;所有已配置的模型能协作、能当众干活，而 token 消耗始终由用户把关——这是给 Nyral 设计&amp;quot;多模型协作&amp;quot;时的三个目标。方案演化到今天，落地成两种模式：讨论团和评审团。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;起因一次生图模型当主模型翻的车&#34;&gt;起因：一次生图模型当主模型翻的车&#xA;&lt;/h2&gt;&lt;p&gt;Nyral 接入腾讯 TokenHub 聚合网关后，我一度把 &lt;code&gt;hy-image-v3.5-preview&lt;/code&gt;（混元文生图模型）设成了主聊天模型，结果发一句&amp;quot;你好&amp;quot;就报 &lt;code&gt;400 model not exist&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;排查下来的原因很直白：混元多模态是&lt;strong&gt;独立的生成模型&lt;/strong&gt;，没有对话能力，走 &lt;code&gt;chat/completions&lt;/code&gt; 必然失败。它真正的调用端点是 &lt;code&gt;POST {base}/v1/wand/hunyuan-image/v35-generation&lt;/code&gt;——一个聊天式结构的生成端点，支持 &lt;code&gt;messages&lt;/code&gt; 数组、参考图，同步返回 &lt;code&gt;choices[].delta.image.url&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;顺手把生图工具和主链路都改到了这个端点，实测通过。但问题随之而来：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;用户配了一堆模型（DeepSeek、GLM、小米 MiMo、TokenHub 混元），它们却彼此孤立。&lt;/strong&gt; 对话靠一个主模型，生图靠工具写死当前 provider，生视频又是另一套。能力是有的，但&amp;quot;各干各的&amp;quot;，谁也不认识谁。&lt;/p&gt;&#xA;&lt;h2 id=&#34;想法让所有模型互相可见&#34;&gt;想法：让所有模型互相可见&#xA;&lt;/h2&gt;&lt;p&gt;那天凌晨，我说了一句：能不能让所有模型互相看到？DeepSeek 可以直接调用 GLM，GLM 反过来也能用 DeepSeek，小米同样如此。每个模型都有完整能力，主模型甚至可以&amp;quot;偷懒&amp;quot;，让副模型去干活。&lt;/p&gt;&#xA;&lt;p&gt;讨论下来，这个概念落地成三层：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;模型注册表（所有已配置模型，按能力分组）&#xA;      │ 能力路由&#xA;      ▼&#xA;主模型（主持人 + 决策者 + 汇总者）&#xA;      │ model_delegate / 生成工具&#xA;      ▼&#xA;参与模型（顾问团：各抒己见，结果仅供参考）&#xA;      ▼&#xA;用户（最终决策者，可随时打断）&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;模型注册表&lt;/strong&gt;：设置页里所有 provider + 勾选的模型，按能力标注分组（对话 / 生图 / 生视频）。配一次 TokenHub Key，对话选 hy4、生图选 hy-image、生视频选 hy-video，全部互相可见。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;主模型当主持人&lt;/strong&gt;：议题由它定，请谁参与由它提议，观点由它汇总收敛，结论由它呈现给用户。它自己也可以参与讨论——毕竟它掌握上下文和工具。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;参与模型是顾问团&lt;/strong&gt;：每次发言是一次独立调用，输出只是&amp;quot;顾问意见&amp;quot;，不是结论。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;用户拍板&lt;/strong&gt;：主模型给出&amp;quot;结论 + 分歧点 + 推荐&amp;quot;，用户一句话就能推翻。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;演化讨论团还是评审团&#34;&gt;演化：讨论团还是评审团？&#xA;&lt;/h2&gt;&lt;p&gt;初版文章发布后，我又和豆包推演了一版更工程化的设计——评审团。它保留了&amp;quot;多模型协作 + 用户拍板&amp;quot;的核心，但把&amp;quot;模型互相可见&amp;quot;改成了&amp;quot;模型完全隔离&amp;quot;，并补上了上下文传递规则、token 预算、状态机等细节。&lt;/p&gt;&#xA;&lt;p&gt;两种模式摆在一起，一度像二选一：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;维度&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;讨论团&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;评审团&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;模型间关系&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;互相可见，串行碰撞&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;完全隔离，互不可见&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;讨论形态&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;模型间你来我往&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;每轮独立发言 → 汇总 → 用户决定是否再投&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;收敛方式&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;主模型收敛&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;用户拍板 + 收敛检测提示&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;立场污染&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;有风险（汇总带倾向）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;强制&amp;quot;事实/倾向分离&amp;quot;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;成本控制&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;弹窗授权（开团前）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;弹窗授权 + 每轮用户确认&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;但想深一层：&lt;strong&gt;这不是单选题&lt;/strong&gt;。两者的差异只是&amp;quot;信息流拓扑&amp;quot;——讨论团是全连接（每个人看得见别人的发言），评审团是星型（只有主模型全知，评审模型只见汇总）。中间还夹着&amp;quot;只传上轮事实性汇总&amp;quot;的半开放形态。把可见度做成参数，两种模式就统一成&lt;strong&gt;一个多模型协作框架&lt;/strong&gt;了：ReviewOrchestrator 里一个 mode 字段的事，不是两套代码。&lt;/p&gt;&#xA;&lt;h2 id=&#34;关键设计信息流拓扑参数化&#34;&gt;关键设计：信息流拓扑参数化&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;讨论团 = 全连接，串行。&lt;/strong&gt; 讨论的本质是碰撞，后发言者要能看到前面的观点，所以讨论链必须串行——并行只会得到三份各说各话的独立答案，没有讨论价值。但&amp;quot;派发链&amp;quot;可以并行：互不依赖的子任务（比如先各查资料）主模型可以并行派发，结果回来后进入串行讨论阶段。干活的阶段并行，对话的阶段串行。&lt;/p&gt;&#xA;&lt;p&gt;工程上这反而简单：Nyral 的本地引擎本来就是串行工具循环 + SSE 流式输出，讨论就是&amp;quot;主模型循环调 &lt;code&gt;model_delegate&lt;/code&gt;，每调一个副模型就输出一条流式发言&amp;quot;，天然不会打架。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;评审团 = 星型，并行。&lt;/strong&gt; 评审模型之间永不互见，零锚定、零传话失真、零立场污染，每个模型永远从自己的盲区出发给意见。作为回报，评审天然适合并行——互不可见就没有串行依赖，一轮延迟 ≈ 最慢的那个模型。评审模型每轮只看到&amp;quot;问题 + 上轮事实性汇总 + 分歧点&amp;quot;，主模型是唯一全知者，持有完整历史。&lt;/p&gt;&#xA;&lt;p&gt;评审团有个独立的价值：&lt;strong&gt;事实与倾向强制分离&lt;/strong&gt;。主模型也是模型，汇总时必然掺入倾向。若混合呈现，用户（最终决策者）会被悄悄带偏——这是比模型间锚定更严重的污染。所以汇报格式严格分段：&amp;ldquo;各模型观点&amp;quot;只陈述、禁止任何评价性词汇，&amp;ldquo;主模型推荐&amp;quot;必须显式标注&amp;quot;这是主持人的倾向，不是事实&amp;rdquo;，用户有权展开查看任意模型发言原文。&lt;/p&gt;&#xA;&lt;h2 id=&#34;成本控制三重闸门&#34;&gt;成本控制：三重闸门&#xA;&lt;/h2&gt;&lt;p&gt;多模型协作的代价是 token 翻倍，不能默认放开。两个模式共用三道闸门：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;弹窗授权&lt;/strong&gt;：主模型要开团/开评审或调生图工具时，弹出候选模型让用户选、确认或拒绝。讨论团、评审团、生图、生视频共用同一套&amp;quot;选模型 + 确认&amp;quot;弹窗，候选列表不同而已。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;每轮用户确认&lt;/strong&gt;：评审团的&amp;quot;再投一轮&amp;quot;本身就是闸门——不点就不会产生下一轮成本；讨论团里用户随时可以打断。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;模型级开关 + 轮数上限&lt;/strong&gt;：单模型可单独禁用参与协作，&lt;code&gt;max_rounds&lt;/code&gt; 默认 3 轮封顶。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;另加 120 秒超时自动拒绝：没人点弹窗就自动拒绝（这个机制本来就存在），后台任务也不会卡死。&lt;/p&gt;&#xA;&lt;p&gt;成本账也大致算过：3 个评审模型 + 1 个主模型跑一轮约 4800 token（池子快照策略，每轮只传小汇总），全量上下文共享要 3 倍以上，还会让模型观点趋同。&lt;strong&gt;把池子做小，是控制成本的核心。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;交互当众流式随时打断&#34;&gt;交互：当众流式，随时打断&#xA;&lt;/h2&gt;&lt;p&gt;最初的想法是把协作放在后台，跑完甩个结论。但这样有两个问题：用户干等 N 倍时间；结论怎么来的像个黑盒。&lt;/p&gt;&#xA;&lt;p&gt;后来想到一个更顺的形态——&lt;strong&gt;参考多 Agent 交接的剧场感&lt;/strong&gt;：Marvis 调用 browser 子 Agent 时，小弟会&amp;quot;冒出来&amp;quot;说&amp;quot;我去看看&amp;rdquo;，干完再交接回来，用户全程围观，从不觉得在死等。&lt;/p&gt;&#xA;&lt;p&gt;两种模式同理，都做成&lt;strong&gt;可见的流式对话&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;用户：这需求怎么做比较好？&#xA;─────────────────────────────&#xA;[hy4-preview] 我的方案：先建索引再……&#xA;[deepseek]    我不同意，索引成本高，应该直接全量扫&#xA;[glm]         折中：先扫再按需索引，hy4 的方案更稳&#xA;[hy4-preview] 采纳，按我的方案，deepseek 的担忧兜底处理&#xA;─────────────────────────────&#xA;主持人收敛：结论如下……&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;每个模型发言是一个气泡（像子 Agent 冒出来），用户能看到谁在说话、观点怎么碰撞、怎么收敛，随时插一句&amp;quot;别争了，用第二个方案&amp;quot;。评审团模式下，各模型观点独立呈现，分歧点列成清单，最后给&amp;quot;执行推荐 / 再投一轮 / 拒绝修改&amp;quot;三个选项。等待感消失，黑盒变透明。&lt;/p&gt;&#xA;&lt;h2 id=&#34;演进路径&#34;&gt;演进路径&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;第一步：&lt;code&gt;model_delegate&lt;/code&gt; 单次委派&lt;/strong&gt;——主模型&amp;quot;偷懒&amp;quot;让副模型干一件具体的事，成本可控，先解决&amp;quot;互相调用&amp;quot;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;第二步：讨论团&lt;/strong&gt;——串行可见，先跑通信息流拓扑。它天然串行，实现就是&amp;quot;循环调用 + 上下文拼接&amp;quot;，比评审团便宜。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;第三步：评审团&lt;/strong&gt;——加并行调度 + 事实/倾向分离汇总，建立在前面两步的地基上。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;风险清单&#34;&gt;风险清单&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;延迟&lt;/strong&gt;：N 模型 × M 轮的串行讨论总时长不短，靠流式可见缓解&amp;quot;等待感&amp;quot;；评审团并行后延迟收敛到单轮。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;成本&lt;/strong&gt;：弹窗授权 + 每轮确认 + 模型级开关/轮数上限三重闸门。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;稳定性&lt;/strong&gt;：多模型输出格式不一致、某个模型挂了讨论卡住，需要重试和降级（超时跳过，全部失败则终止提示）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;路由准确性&lt;/strong&gt;：模型能力标注靠启发式 + 分组勾选，跨 provider 路由可能指向无权限模型（TokenHub 那类 400/402 的坑），需要对照测试。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;观点不收敛&lt;/strong&gt;：评审团加收敛检测，连续两轮观点一致时提示&amp;quot;继续评审大概率不会产生新信息，建议拍板&amp;quot;——提示只是建议，用户有权无视。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;结语&#34;&gt;结语&#xA;&lt;/h2&gt;&lt;p&gt;这个设计其实没造新轮子：模型注册表是现有配置的升级，弹窗和超时是现成机制，工具循环是 Nyral 本来就有的大脑，多模型协作只是把&amp;quot;单主模型驱动&amp;quot;扩展成&amp;quot;主模型主持、副模型顾问、用户拍板&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;讨论团适合发散（头脑风暴、创意激发），评审团适合收敛（方案评审、重大决策）——不是二选一，是同一个框架下的两种形态。&lt;/p&gt;&#xA;&lt;p&gt;它想回答一个朴素的问题：&lt;strong&gt;用户都配了那么多模型了，为什么不能让它们一起干活？&lt;/strong&gt; 现在至少有了一个不花冤枉 token、又能当众协作的答案。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>AI 专属隐形输入法</title>
            <link>https://atin.asia/archives/invisible-ime/</link>
            <pubDate>Mon, 12 Oct 2026 08:00:00 +0800</pubDate>
            <guid>https://atin.asia/archives/invisible-ime/</guid>
            <description>&lt;p&gt;Android 只允许 InputMethodService 向输入框写文本。AI 要合法注入字符串，就得拿输入法身份，不需要键盘 UI。&lt;/p&gt;&#xA;&lt;h2 id=&#34;设计&#34;&gt;设计&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;UI：点击输入框只弹一条 1px 横线，不弹软键盘，截屏零遮挡&lt;/li&gt;&#xA;&lt;li&gt;协议：HTTP + JSON，固定端口 8767&lt;/li&gt;&#xA;&lt;li&gt;入口：adb forward 访问 HTTP；adb shell am broadcast 走广播&lt;/li&gt;&#xA;&lt;li&gt;服务名编码协议：com.aixtin.invisime/.Ime_tcp8767_http_json，dumpsys 可见即用&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;协议&#34;&gt;协议&#xA;&lt;/h2&gt;&lt;p&gt;HTTP 主入口：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;adb forward tcp:8767 localabstract:httpd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST  -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{&amp;#34;cmd&amp;#34;:&amp;#34;type&amp;#34;,&amp;#34;text&amp;#34;:&amp;#34;你好&amp;#34;}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;广播快速入口：&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;adb shell am broadcast -a AIX_INPUT_TEXT --es text &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;你好&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;指令集：type / backspace / enter / get_text（回读输入框内容）/ &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt;（选区）/ composition（模拟真人打字节奏）。核心动作只有一个：commitText&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CharSequence&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;实现&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;四个组件：&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ImeState：状态机，当前输入法开关与注入目标&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;InvisImeService：InputMethodService，onCreateInputView 返回 1px View&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;InvisHttpServer：NanoHTTPD 监听 8767，解析 JSON 指令&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;InjectReceiver：广播接收，解析 intent extra&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;文本写入统一走 commitText；读回走 InputConnection 的 getTextBeforeCursor / getTextAfterCursor。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;历史 bug：初版 executeType 重复 commitText，已修；fixMojibake&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; 做 ISO-8859-1→UTF-8 回转。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;安全边界&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;只写不点：不点发送按钮、enter 默认换行、不改写已有文本、不静默切换系统输入法。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;实测&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;真机 OPPO ColorOS Android 14（一加 Ace &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; Pro，WireGuard 10.10.10.3:5555）。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;坑：ColorOS 输入法导航栏默认不可见，NavigationBarFrame 被设 alpha&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;0.0；定位后在 onWindowShown postDelayed 300ms 扫 decorView setAlpha&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1.0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; 恢复。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HTTP 与广播注入中文、英文、删除、回读均验证通过。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item><item>
            <title>定时岗位：让 AI 从「戳一下动一下」变成「自己上班」</title>
            <link>https://atin.asia/archives/ding-shi-gang-wei/</link>
            <pubDate>Wed, 07 Oct 2026 08:00:00 +0800</pubDate>
            <guid>https://atin.asia/archives/ding-shi-gang-wei/</guid>
            <description>&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;本文整理自一次想法碰撞的记录：当对话式 AI 遇上“以天为单位”的任务，缺的到底是什么。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;一个被忽略的错位&#34;&gt;一个被忽略的错位&#xA;&lt;/h2&gt;&lt;p&gt;现在几乎所有对话式 AI 都是响应式的：你发一句话，它动一下；你不说话，它就静静待着。哪怕它能查资料、能写代码、能操作手机，&lt;strong&gt;只要你不出手，它永远不会主动做任何事&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;但用户真实的需求往往不是“一问一答”，而是一条长时间线：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;帮我把这个账号管起来：今天点赞、明天评论、后天发帖&lt;/li&gt;&#xA;&lt;li&gt;盯着这个价格，降了告诉我&lt;/li&gt;&#xA;&lt;li&gt;每天睡前把今天的事整理成日记&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些任务的共同点是：&lt;strong&gt;跨度以天为单位、触发条件不确定、执行过程需要判断&lt;/strong&gt;。一次性对话撑不起这种需求。&lt;/p&gt;&#xA;&lt;h2 id=&#34;拆一下主动唤醒--能力边界&#34;&gt;拆一下：主动唤醒 + 能力边界&#xA;&lt;/h2&gt;&lt;p&gt;「定时岗位」想做的事，本质上是给 AI 一张&lt;strong&gt;排班表&lt;/strong&gt;和一张&lt;strong&gt;工牌&lt;/strong&gt;。工牌上写的是“能做什么”，不是“怎么做”：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;维度&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;具体设计&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;能力域授权&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;只锁能力，不锁参数——允许发帖，但发什么它自己定&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;站点白名单&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;明确列出允许操作的域名，名单外一律拒绝&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;每日自主排班&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;每天自己规划动作，不必等指令&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;日报审计&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;干了什么必须留痕，可回溯&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;随时撤职&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;一个开关收回授权，岗位立即终止&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;生命周期也清晰：draft → 用户一键授权 → 独立会话入职沟通 → 退下自主干活 → 可随时进出查看。&lt;/p&gt;&#xA;&lt;h2 id=&#34;最难的一步怎么防止它越权&#34;&gt;最难的一步：怎么防止它越权&#xA;&lt;/h2&gt;&lt;p&gt;让 AI 自主行动，第一个要回答的问题不是“能不能做”，而是“怎么让它做不了不该做的”。目前想到的三道锁：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;系统级 Banner&lt;/strong&gt;：关键操作由系统在通知栏横幅提示。逻辑很朴素——用户只信系统、不信 AI 的话术。AI 说“我没乱动”不可信，系统说“它调用了发帖接口”才是事实。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Native 层注入 Header&lt;/strong&gt;：把身份标识放在原生层注入的请求头里，脚本层无法伪造，也绕不过去。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;能力清单绑定&lt;/strong&gt;：把授权内容固化成一份清单，运行时逐条比对。曾考虑“参数 hash 过死”，但被否了——参数一变就失效，既不现实也没必要。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这套思路不是凭空来的。多 Agent 架构里早有成熟先例：主 Agent 派活给子 Agent，子 Agent 有独立上下文、明确的能力边界、干完要汇报。「定时岗位」真正新的地方只有两点——&lt;strong&gt;主动唤醒&lt;/strong&gt;和&lt;strong&gt;自主排班&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;它和联想引擎是同一棵树&#34;&gt;它和联想引擎是同一棵树&#xA;&lt;/h2&gt;&lt;p&gt;把两个想法放在一起看，会发现它们是同一根树干上的两根枝：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;联想引擎&lt;/strong&gt;解决“记忆什么时候被调用”——让调用从被迫变成自觉&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;定时岗位&lt;/strong&gt;解决“AI 什么时候开始干活”——让动手从被动变成主动&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;两者的交汇点是同一个：&lt;strong&gt;AI 需要一个属于自己的时间轴&lt;/strong&gt;。夜间自省可以挂在定时岗位上跑（每天固定时段回顾经历、写入记忆），而岗位的执行记录又成为联想引擎的素材。一个负责“什么时候想”，一个负责“什么时候做”。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结论&#34;&gt;结论&#xA;&lt;/h2&gt;&lt;p&gt;「定时岗位」不是要把 AI 变成无所不能的自动机，而是把它从“工具”变成“值班的人”：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;有明确的岗位职责&lt;/li&gt;&#xA;&lt;li&gt;有可审计的动作记录&lt;/li&gt;&#xA;&lt;li&gt;有随时被撤职的觉悟&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这条路还很长，但方向可能比“再训一个更聪明的模型”更实在——&lt;strong&gt;很多时候缺的不是能力，是主动性。&lt;/strong&gt;&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>联想引擎：给 AI 装上&#34;自主回忆&#34;的能力</title>
            <link>https://atin.asia/archives/lian-xiang-yin-qing/</link>
            <pubDate>Wed, 07 Oct 2026 08:00:00 +0800</pubDate>
            <guid>https://atin.asia/archives/lian-xiang-yin-qing/</guid>
            <description>&lt;p&gt;你有没有过这种体验：明明记得自己见过某个东西，但怎么也想不起来关键词，搜不出来，只能干着急？&lt;/p&gt;&#xA;&lt;p&gt;AI 的“记忆”现在就是这个状态。它有一整座图书馆，却只会在你明确提问时才去翻书——你问什么它查什么，绝不多看一眼。&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题不在存储在触发方式&#34;&gt;问题不在存储，在“触发方式”&#xA;&lt;/h2&gt;&lt;p&gt;人类回忆是联想式的：闻到一股味道、听到一句歌，某段记忆自动浮上来。这个过程不需要你主动“检索”，它常驻在后台，线索一碰就激活。&lt;/p&gt;&#xA;&lt;p&gt;而 AI 的记忆是命令式的：被提示才检索，检索完就回到沉默。两者的差距不在数据库大小，而在&lt;strong&gt;什么时候开始想&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;联想引擎三个改动&#34;&gt;联想引擎：三个改动&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;一、事件驱动自主检索。&lt;/strong&gt; 新信息进入时不等人提问，直接触发一轮关联比对。就像你听到一个新名字，脑子里立刻冒出“这人跟谁有点像”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;二、三级相关性漏斗。&lt;/strong&gt; 检索结果不再一刀切，而是分三层浮现：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;层级&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;相关度&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;处理方式&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;对应人脑体验&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;L1&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;高&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;全文注入上下文&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;脱口而出&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;L2&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;中&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;只给标题+摘要钩子&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;“隐约见过”&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;L3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;低&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;仅留索引，显式检索才命中&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;深挖才想起&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;三、夜间自省进程。&lt;/strong&gt; 每天回顾当天经历，主动写入记忆库并与旧记忆建立关联。这相当于把人类的睡眠巩固机制移植过来——今天不整理，明天检索命中率就是会掉。&lt;/p&gt;&#xA;&lt;p&gt;相关性评分由四维加权：语义相似、关键词命中、时间衰减、话题实体绑定。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么值得做&#34;&gt;为什么值得做&#xA;&lt;/h2&gt;&lt;p&gt;这个方案比“定时任务”更底层。定时岗位解决的是“AI 能不能自己干活”，联想引擎解决的是“AI 能不能自己想起来”。前者是手脚，后者是海马体。&lt;/p&gt;&#xA;&lt;p&gt;两者其实是同一棵树：夜间自省进程完全可以由定时岗位承载，而联想引擎为它提供记忆写入的规则。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一句话&#34;&gt;一句话&#xA;&lt;/h2&gt;&lt;p&gt;别急着给 AI 加更多记忆容量，先让它在没人提问的时候，也愿意想一想。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>用 Nyral 打理博客的一天</title>
            <link>https://atin.asia/archives/yong-nyral-da-li-bo-ke-de-yi-tian/</link>
            <pubDate>Mon, 05 Oct 2026 08:00:00 +0800</pubDate>
            <guid>https://atin.asia/archives/yong-nyral-da-li-bo-ke-de-yi-tian/</guid>
            <description>&lt;p&gt;今天试着让 Nyral 帮我打理博客后台：登录、发文、配标签，一套流程走下来居然比我自己点还快。它不啰嗦，问到点子上就给方案，拿不准的地方会先确认再动手。工具用对了，效率是真的能翻倍。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>一个微信小程序的8个版本，我踩了哪些坑</title>
            <link>https://atin.asia/archives/miniapp-six-versions-lessons/</link>
            <pubDate>Sat, 22 Aug 2026 08:00:00 +0800</pubDate>
            <guid>https://atin.asia/archives/miniapp-six-versions-lessons/</guid>
            <description>&lt;p&gt;「确实佷难压缩」是一个微信图片压缩小程序。从 v1.0.1 到 v2.0.1，8 个版本迭代，每次以为稳了都会冒出新问题。这篇文章记录每个版本的核心改动和踩过的坑。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;扫码体验小程序：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://atin.asia/upload/qrcode.jpg&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;v101能用就行&#34;&gt;v1.0.1：能用就行&#xA;&lt;/h2&gt;&lt;p&gt;第一个版本只做了一件事：选图片 → 压缩 → 保存。&lt;/p&gt;&#xA;&lt;p&gt;核心能力：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Canvas 本地压缩，图片不上传服务器&lt;/li&gt;&#xA;&lt;li&gt;基础的 JPG/PNG 格式支持&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;上线第一天就发现：微信会审核图片内容。纯本地压缩不走微信 API，违规图片直接能保存出去。于是加了 imgSecCheck 云函数，压缩后先过一遍微信内容安全审查。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;踩坑&lt;/strong&gt;：审查是异步的，用户看到红色呼吸灯会本能等待，不知道能不能点保存。后来加了&amp;quot;边审边存&amp;quot;提示。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v104压缩算法重写&#34;&gt;v1.0.4：压缩算法重写&#xA;&lt;/h2&gt;&lt;p&gt;最初的压缩逻辑很粗暴：直接降 quality。结果发现一个问题——选 20KB 压不出来，选 100KB 能压，选 50KB 也能压，再选 20KB 又能压了。不稳定。&lt;/p&gt;&#xA;&lt;p&gt;原因：单次 quality 调整无法精确控制输出大小。&lt;/p&gt;&#xA;&lt;p&gt;重写方案：&lt;strong&gt;二分搜索 + 两点采样&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;先在 quality=0.5 和 quality=0.1 各压一次，得到两个点&lt;/li&gt;&#xA;&lt;li&gt;线性插值估算目标 quality&lt;/li&gt;&#xA;&lt;li&gt;最多修正 2 轮，最大 Canvas 调用 4 次&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;顺便把 UI 改成了深色毛玻璃风格。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v105大图压不到目标&#34;&gt;v1.0.5：大图压不到目标&#xA;&lt;/h2&gt;&lt;p&gt;5000 万像素的大图，原始数据 150MB。二分搜索在 quality 空间里找，但 quality 再低也就那样——像素数太多了。&lt;/p&gt;&#xA;&lt;p&gt;修复：&lt;strong&gt;大图先等比缩小到 4096px 以内，再走二分搜索&lt;/strong&gt;。4096 是微信 Canvas 的安全上限，再大就崩。&lt;/p&gt;&#xA;&lt;p&gt;最低 quality 也从 0.1 降到了 0.05，给极端情况多留余地。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v106页面闪白&#34;&gt;v1.0.6：页面闪白&#xA;&lt;/h2&gt;&lt;p&gt;用户反馈：页面切换时会闪一下白屏。&lt;/p&gt;&#xA;&lt;p&gt;原因：微信小程序的页面背景默认是白色。深色毛玻璃 UI 在页面切换瞬间，新页面还没渲染完就露出了白色底层。&lt;/p&gt;&#xA;&lt;p&gt;修复：给所有页面的 JSON 配置补上 navigationBarBackgroundColor 和 backgroundColor，消除视觉断裂。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v107进度条--自定义裁剪&#34;&gt;v1.0.7：进度条 + 自定义裁剪&#xA;&lt;/h2&gt;&lt;p&gt;两个大功能：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;压缩进度条&lt;/strong&gt;：之前压缩时只有一个 loading 动画，用户不知道压到哪了。改成百分比 + 状态文字（&amp;ldquo;压缩中 60%&amp;rdquo; → &amp;ldquo;审查中 90%&amp;rdquo; → &amp;ldquo;完成&amp;rdquo;）。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;自定义裁剪尺寸&lt;/strong&gt;：用户可以手动输入宽高（如 295×413 一寸照）。加了最小值 30px 的限制——输入太小会弹提示。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v108canvas-2d-升级&#34;&gt;v1.0.8：Canvas 2D 升级&#xA;&lt;/h2&gt;&lt;p&gt;微信旧版 Canvas API 性能差，大图操作卡顿。升级到 Canvas 2D（type=&amp;ldquo;2d&amp;rdquo;），速度提升 2-3 倍。&lt;/p&gt;&#xA;&lt;p&gt;但升级带来了新坑：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;drawImage 必须用 9 参数形式 (img, 0, 0, img.w, img.h, 0, 0, w, h)，不然会截取图片&lt;/li&gt;&#xA;&lt;li&gt;canvasToTempFilePath 在 Canvas 2D 下不能传 x/y/width/height，只传 destWidth/destHeight&lt;/li&gt;&#xA;&lt;li&gt;改 canvas 宽高后上下文会重置，必须重新 getContext(&amp;lsquo;2d&amp;rsquo;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;还修了一个 bug：裁剪后输出体积反而变大了。原因是裁剪输出格式没跟随用户选择——选了 PNG 就强制输出 PNG，但 PNG 的 Canvas 重编码体积控制很差。改成跟随格式选择。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v109裁剪框大修&#34;&gt;v1.0.9：裁剪框大修&#xA;&lt;/h2&gt;&lt;p&gt;这是改动最大的一个版本，问题也最多。&lt;/p&gt;&#xA;&lt;h3 id=&#34;根因坐标系不一致&#34;&gt;根因：坐标系不一致&#xA;&lt;/h3&gt;&lt;p&gt;裁剪框的四角拖拽在自定义尺寸模式下完全失灵。拖左下角，右下角在动。&lt;/p&gt;&#xA;&lt;p&gt;真正原因不是判定逻辑，而是&lt;strong&gt;坐标系偏移&lt;/strong&gt;。touch.clientX/Y 是 WebView 坐标，frameX/frameY 是 crop-area 内部坐标。两者差了一个 crop-area 的 left/top 偏移。&lt;/p&gt;&#xA;&lt;p&gt;修法：在 onReady 用 boundingClientRect 缓存偏移量，触摸时统一减掉。&lt;/p&gt;&#xA;&lt;h3 id=&#34;横图变竖条&#34;&gt;横图变竖条&#xA;&lt;/h3&gt;&lt;p&gt;16:9 的横构图照片，裁剪框显示成了一个竖条。&lt;/p&gt;&#xA;&lt;p&gt;原因：之前用高度占满 areaH 来定裁剪框尺寸。横图高度小、宽度大，高度占满意味着宽度溢出被 overflow:hidden 切掉左右，只剩中间一条。&lt;/p&gt;&#xA;&lt;p&gt;修法：横构图改用宽度上限 areaW*0.96，再反推高度。&lt;/p&gt;&#xA;&lt;h3 id=&#34;其他修复&#34;&gt;其他修复&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;角判定热区从无下限改为 44-64px（触控标准）&lt;/li&gt;&#xA;&lt;li&gt;比例锁定：边界钳制时以宽度为基准驱动高度，不再双向独立钳制把比例搞歪&lt;/li&gt;&#xA;&lt;li&gt;_ready 守卫：图片没加载完就禁止触摸，避免 frame 为 0 误判&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;踩过的最严重的坑&#34;&gt;踩过的最严重的坑&#xA;&lt;/h3&gt;&lt;p&gt;debug 版在 onTouchStart 里引用了 initImage 作用域的局部变量 imgW。一跑就 ReferenceError: imgW is not defined，所有拖拽全部失效。&lt;/p&gt;&#xA;&lt;p&gt;教训：console.log 埋点用的变量如果跨作用域，发布前必须删干净。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v200对比页全新改版&#34;&gt;v2.0.0：对比页全新改版&#xA;&lt;/h2&gt;&lt;p&gt;从&amp;quot;压完就完&amp;quot;变成&amp;quot;压完还能看&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;滑动分割线对比&lt;/strong&gt;：压缩前后并排，中间一条分割线左右拖动。比之前切换原图/效果图直观得多。竖图横图统一用垂直分割线，不搞两套交互。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;一键重新裁剪&lt;/strong&gt;：对比页不满意？不用返回首页重来。直接点&amp;quot;重新裁剪&amp;quot;，弹出预设/自定义/自由裁剪选项，闭环操作。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;裁剪输出优化&lt;/strong&gt;：裁剪不再降画质（quality 保持 0.92），格式标注文案也修正了——之前显示&amp;quot;PNG&amp;quot;但实际输出 JPG，误导用户。&lt;/p&gt;&#xA;&lt;h2 id=&#34;v201自定义尺寸修正&#34;&gt;v2.0.1：自定义尺寸修正&#xA;&lt;/h2&gt;&lt;p&gt;用户反馈：指定 632×532 的裁剪尺寸，输出却是约 1000×900。&lt;/p&gt;&#xA;&lt;p&gt;原因：自定义尺寸输入后，canvasToTempFilePath 的 destWidth/destHeight 没有严格取用户输入值，而是走了默认的缩放逻辑。&lt;/p&gt;&#xA;&lt;p&gt;修复：自定义尺寸模式下，输出尺寸严格按用户输入值，不做任何缩放。&lt;/p&gt;&#xA;&lt;h2 id=&#34;版本一览&#34;&gt;版本一览&#xA;&lt;/h2&gt;&lt;p&gt;版本&#xA;核心改动&#xA;踩坑&lt;/p&gt;&#xA;&lt;p&gt;v1.0.1&#xA;基础压缩 + 内容审查&#xA;审查异步导致用户困惑&lt;/p&gt;&#xA;&lt;p&gt;v1.0.4&#xA;二分搜索压缩算法&#xA;quality 空间不稳定&lt;/p&gt;&#xA;&lt;p&gt;v1.0.5&#xA;大图先缩小再压缩&#xA;5000万像素直接崩&lt;/p&gt;&#xA;&lt;p&gt;v1.0.6&#xA;修复页面闪白&#xA;页面背景色未配置&lt;/p&gt;&#xA;&lt;p&gt;v1.0.7&#xA;进度条 + 自定义裁剪&#xA;最小值限制&lt;/p&gt;&#xA;&lt;p&gt;v1.0.8&#xA;Canvas 2D 升级&#xA;API 参数差异、格式不跟随&lt;/p&gt;&#xA;&lt;p&gt;v1.0.9&#xA;裁剪框全面重写&#xA;坐标系偏移、横图比例、跨作用域变量&lt;/p&gt;&#xA;&lt;p&gt;v2.0.0&#xA;对比重塑 + 重新裁剪闭环&#xA;分割线交互统一&lt;/p&gt;&#xA;&lt;p&gt;v2.0.1&#xA;自定义尺寸精确输出&#xA;destWidth/destHeight 缩放逻辑&lt;/p&gt;&#xA;&lt;h2 id=&#34;写在后面&#34;&gt;写在后面&#xA;&lt;/h2&gt;&lt;p&gt;8 个版本，核心功能其实没变——选图、压缩、保存。但每个版本都有&amp;quot;以为修好了其实没有&amp;quot;的时刻。&lt;/p&gt;&#xA;&lt;p&gt;最有意思的教训是：大部分 bug 不是逻辑错，而是&lt;strong&gt;假设错&lt;/strong&gt;。假设坐标系一致、假设高度占满就行、假设 debug 代码不影响正式版。每一个&amp;quot;假设&amp;quot;都变成了一个线上 bug。&lt;/p&gt;&#xA;&lt;p&gt;如果你也在做小程序，记住两件事：真机测试不能省，debug 代码发布前必须删。&lt;/p&gt;&#xA;&lt;h1 id=&#34;由ai协助&#34;&gt;由ai协助&#xA;&lt;/h1&gt;</description>
        </item><item>
            <title>AI 长期记忆方案：记忆与执行分离，MiMo-V2.5 实测一次整理 2 厘钱</title>
            <link>https://atin.asia/archives/ai-memory-butler/</link>
            <pubDate>Wed, 19 Aug 2026 08:00:00 +0800</pubDate>
            <guid>https://atin.asia/archives/ai-memory-butler/</guid>
            <description>&lt;p&gt;AI 的长期记忆问题不是靠&amp;quot;记住&amp;quot;解决，是靠&amp;quot;架构&amp;quot;解决。本文给出完整方案与实测数据。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一ai-为什么会失忆&#34;&gt;一、AI 为什么会&amp;quot;失忆&amp;quot;&#xA;&lt;/h2&gt;&lt;p&gt;AI 的记忆 = 上下文窗口。窗口像滚动纸张，新内容写入，旧内容被挤出。窗口一滚动，之前的指令物理消失。&lt;/p&gt;&#xA;&lt;p&gt;让 AI&amp;quot;存到外部&amp;quot;的常见做法会翻车：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;让 AI 存记忆到外部文件 → 执行两次后开始乱建本地文件&lt;/li&gt;&#xA;&lt;li&gt;系统提示词写&amp;quot;必须优先查记忆&amp;quot; → 无效&lt;/li&gt;&#xA;&lt;li&gt;自动压缩历史 → 压缩时对话暂停，体验差&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;原因：记忆管理靠&amp;quot;自觉&amp;quot;不靠谱，得靠&amp;quot;强制&amp;quot;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;二方案记忆与执行分离&#34;&gt;二、方案：记忆与执行分离&#xA;&lt;/h2&gt;&lt;p&gt;给 AI 配一个专职管家，主 AI 干活、管家管记忆，物理隔离。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;主 AI（干活）         记忆管家（专职管记忆）&#xA;   │                       │&#xA;   │  存/取记忆（唯一通道） │&#xA;   └──────────→────────────┘&#xA;              │&#xA;         记忆库（本地磁盘）&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;核心三条：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;管家是独立进程&lt;/strong&gt;：不参与对话，只碰磁盘。压缩、归档、删除后台跑，主 AI 和用户无感&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;索引文件是唯一接口&lt;/strong&gt;：主 AI 查记忆直接读索引文件（Markdown 表格：主题 → 文件名 → 一句话摘要），零改造接入&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;写入实时、压缩低频&lt;/strong&gt;：新记忆落盘脚本执行（毫秒级），压缩旧记忆 AI 执行（深夜批量）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;三四个关键细节&#34;&gt;三、四个关键细节&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1. 索引慢了怎么办&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;索引是加速器不是唯一入口。索引查不到，退回原文目录 grep 兜底。索引是缓存，原文是真相——缓存挂了功能还在，只是慢一点。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. 主 AI 偷懒跳过索引&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI 是走捷径大师，索引连续 miss 会直接翻原文。解法：让索引永远比原文好用——实时同步、查索引 2 步 vs 翻原文 5 个文件，AI 会自己算账。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. 防止写坏文件&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;用原子替换：先写临时文件，再 rename 覆盖。主 AI 永远读到完整版。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;4. 思考过程过滤&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;推理模型返回 reasoning_content（思维链），接入框架时过滤该字段，只取正式答案。&lt;/p&gt;&#xA;&lt;h2 id=&#34;四实测小米-mimo-v25-当管家&#34;&gt;四、实测：小米 MiMo-V2.5 当管家&#xA;&lt;/h2&gt;&lt;p&gt;选型标准：便宜、上下文长、守规矩、能理解。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;维度&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;实测数据&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;上下文&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1M tokens（105 万）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;价格&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;输入 $0.14/1M，输出 $0.28/1M&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;摘要一段对话&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;33.5s，成本 $0.00032（约 2 厘钱）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;整理索引&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;28.8s，关键词准确，不编造&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;守规矩&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;严格按格式输出&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;实测效果：整段对话压缩后自动分为&amp;quot;主题/决策/资产/教训/待办&amp;quot;五段，技术细节保留，寒暄删除。每天跑一百次成本不到 3 毛钱。&lt;/p&gt;&#xA;&lt;h2 id=&#34;五适用人群&#34;&gt;五、适用人群&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;折腾过 AI 本地部署、API 接入的玩家&lt;/li&gt;&#xA;&lt;li&gt;被 AI 失忆困扰的效率工具党&lt;/li&gt;&#xA;&lt;li&gt;想给 AI 配外置大脑的开发者&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;日常聊天用不上这套，大厂 AI 入口已自带记忆。需要 AI 长期维护项目、管理文档、记住偏好时，此架构是标配。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;核心一句话：存储靠脚本，压缩靠便宜 AI，决策靠聪明 AI，索引永远当最优解。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;推荐试试我做的图片压缩小程序「确实佷难压缩」——微信扫码即用，免费、无广告、压完不糊：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;确实佷难压缩&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;240px&#34; data-flex-grow=&#34;100&#34; height=&#34;1280&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://www.atin.asia/upload/qrcode.jpg&#34; srcset=&#34;https://atin.asia/qrcode_8874906014265119181_hu_ffda5b367696878d.jpg 800w, https://www.atin.asia/upload/qrcode.jpg 1280w&#34; width=&#34;1280&#34;&gt;&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>图片压缩原理与实操：一张照片原始 150MB，为什么你看到的是 3MB</title>
            <link>https://atin.asia/archives/image-compress-guide/</link>
            <pubDate>Wed, 19 Aug 2026 08:00:00 +0800</pubDate>
            <guid>https://atin.asia/archives/image-compress-guide/</guid>
            <description>&lt;p&gt;图片压缩解决两个问题：文件太大传不出去、上传平台被拒。本文讲清原理，给出微信里直接用的压缩方案。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一为什么图片这么大&#34;&gt;一、为什么图片这么大&#xA;&lt;/h2&gt;&lt;p&gt;手机摄像头 5000 万像素起步。一张照片的原始信息量：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5000 万像素 = 5000 万个颜色点&lt;/li&gt;&#xA;&lt;li&gt;每个颜色点需要红、绿、蓝三通道，每通道 8 bit&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;一张未压缩照片的原始数据约 &lt;strong&gt;150MB&lt;/strong&gt;。平时看到的 3-5MB 照片，都是压缩过的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;二压缩原理删掉人眼不敏感的信息&#34;&gt;二、压缩原理：删掉人眼不敏感的信息&#xA;&lt;/h2&gt;&lt;p&gt;核心逻辑：&lt;strong&gt;去掉人眼不敏感的信息&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. 有损压缩（JPG/JPEG）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;人眼对亮度变化敏感，对颜色细微变化不敏感。JPG 大幅简化颜色细节、保留亮度细节，压缩后肉眼几乎看不出差别，文件可小 10 倍以上。压缩率过高会出现马赛克和色块。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. 无损压缩（PNG）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;不丢信息，只合并重复数据。纯色截图 100 万相同像素，PNG 记为&amp;quot;连续 100 万个红色&amp;quot;而非存 100 万遍。适合：截图、文字、图标、透明背景。缺点：照片类复杂图片压缩效果差，文件可能比 JPG 更大。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. 新一代格式（WebP/HEIC）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;同等质量下比 JPG 再小约 30%。微信传输的图片很多已是此类格式，但大部分工具不支持导出。&lt;/p&gt;&#xA;&lt;h2 id=&#34;三格式选择&#34;&gt;三、格式选择&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;场景&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;推荐格式&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;照片、风景、人物&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;JPG / WebP&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;截图、文字、图标&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;PNG&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;需要透明背景&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;PNG&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;网页使用&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;WebP（更小更快）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;四压缩工具对比&#34;&gt;四、压缩工具对比&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;方式&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;优点&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;缺点&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;电脑软件（Photoshop、TinyPNG）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;功能强&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;贵、麻烦、要开电脑&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;在线网站&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;免安装&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;上传限制、付费、隐私风险&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;微信小程序&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;手机直接处理&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;无&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;日常需求（发微信、做文档、传平台），手机上直接解决最方便。&lt;/p&gt;&#xA;&lt;h2 id=&#34;五推荐确实佷难压缩&#34;&gt;五、推荐：确实佷难压缩&#xA;&lt;/h2&gt;&lt;p&gt;微信小程序「确实佷难压缩」：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;微信搜索即用，无需下载 App&lt;/li&gt;&#xA;&lt;li&gt;支持图片压缩、裁剪、对比预览&lt;/li&gt;&#xA;&lt;li&gt;压缩前后并排对比&lt;/li&gt;&#xA;&lt;li&gt;免费&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;确实佷难压缩小程序码&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;240px&#34; data-flex-grow=&#34;100&#34; height=&#34;1280&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://www.atin.asia/upload/qrcode.jpg&#34; srcset=&#34;https://atin.asia/qrcode_8874906014265119181_hu_ffda5b367696878d.jpg 800w, https://www.atin.asia/upload/qrcode.jpg 1280w&#34; width=&#34;1280&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;图片大是正常的，一张照片原始数据上百 MB&lt;/li&gt;&#xA;&lt;li&gt;压缩的本质：删掉人眼不敏感的信息。JPG 压照片、PNG 压截图&lt;/li&gt;&#xA;&lt;li&gt;日常压缩用手机小程序，微信搜「确实佷难压缩」&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
