<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tech on CAO ZUOHUA</title><link>https://caozuohua.github.io/categories/tech/</link><description>Recent content in Tech on CAO ZUOHUA</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 30 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caozuohua.github.io/categories/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>Grok Bot 的持久化 Agent，给极简个人助理的六点启示</title><link>https://caozuohua.github.io/posts/2026-10-30-grok-bot-personal-assistant/</link><pubDate>Fri, 30 Oct 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-10-30-grok-bot-personal-assistant/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;调研时间：2026 年 10 月 30 日。本文中的 Grok Bot 指 xAI 官方产品，不是 X 上的 @Grok 机器人。结论来自官方产品说明和文档，未独立实测其可靠性、费用或效果；产品和价格可能变化。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;一个个人助理最难的地方，往往不是再接一个更强的模型，而是让人知道：它是否记得上文，是否真的查到了资料，动作有没有完成，以及中断后该怎么办。Grok Bot 把这些问题摆在了产品设计中心。它的答案有值得借鉴的地方，也有不适合照搬到我们项目的地方。&lt;/p&gt;&#10;&lt;h2 id="它到底是什么"&gt;它到底是什么&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://x.ai/news/introducing-grok-bot"&gt;官方介绍&lt;/a&gt;把 Grok Bot 描述为可持续工作的 AI 队友：通过对话接收任务，在云端计算机里使用浏览器、文件和终端，与外部应用交互，遇到需要授权的动作时请求用户处理。&lt;a href="https://docs.x.ai/grok-bot/overview"&gt;当前概览&lt;/a&gt;列出桌面和移动客户端，并称后台任务可以在客户端关闭后继续。它强调的不只是给出建议，而是尽量让工作发生在实际工具中。&lt;/p&gt;&#10;&lt;p&gt;有两个容易误解的细节。第一，多个 Bot 的独立身份不等于每个 Bot 一台隔离计算机：&lt;a href="https://docs.x.ai/grok-bot/faq"&gt;FAQ&lt;/a&gt;称同一账户的 Bot 共享一台云端计算机及其文件、浏览器会话和登录状态，因此不能把不同 Bot 当成安全隔离边界。第二，云端计算机与用户眼前的 Windows 电脑是两种不同的执行环境；本地命令执行另有授权设置。它的服务和计划条件会变化，应以当前文档为准。&lt;/p&gt;&#10;&lt;h2 id="启示一连续性要分层而不是把聊天一直拼长"&gt;启示一：连续性要分层，而不是把聊天一直拼长&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://x.ai/news/designing-grok-bot"&gt;设计文章&lt;/a&gt;将 Bot、聊天、提示、工具和成果作为主要产品对象；&lt;a href="https://docs.x.ai/grok-bot/bots"&gt;Bot 文档&lt;/a&gt;描述了偏好、长期事实和工作记录与聊天历史的区别。官方还说明 Bot 会自行决定保存部分记忆，个人 Bot 的记忆通过对话查看、纠正或删除，重置会话不会同时删除记忆。&lt;/p&gt;&#10;&lt;p&gt;我们的场景需要更克制的分层。当前代码保留进程内最多 12 轮、48000 UTF-8 字节的已送达对话；重启清空，淘汰时提示前文缺失。真实 Lark 长对话及资源消耗尚待验收。QPC 多维表格是用户明确整理的长期知识来源，Lark 日历是日程来源；不能把所有对话自动变成 QPC 事实，也不必为了模仿 Grok Bot 立刻实现长期自动记忆。&lt;/p&gt;&#10;&lt;p&gt;下一步可以先做一组可重复的长对话验收：在第一轮给出合成约束，跨多轮追问并观察约束是否仍在；再故意超过窗口，确认提示出现、模型不编造。记录调用量与实际延迟，而不是把窗口大小等同于理解能力。&lt;/p&gt;&#10;&lt;h2 id="启示二从回答到可核验的结果"&gt;启示二：从“回答”到“可核验的结果”&lt;/h2&gt;&#10;&lt;p&gt;Grok Bot 的产品主张是工作落在真实应用中。对我们的单用户 Lark 助理，这意味着一次“查知识库”应能指出具体记录，而不是让模型凭印象回答。当前 QPC 只读检索已在代码中实现：明确输入关键词，分页查配置中的表，返回匹配片段及记录 ID；部分扫描失败不会说“没有结果”。它尚未完成真实权限与私聊链路验收。&lt;/p&gt;&#10;&lt;p&gt;这条路径比先做通用工具平台更适合现在：先验证本人身份、表访问权限、分页、超时和输出；再根据真实需求决定是否支持自然语言路由。若以后要写入 QPC 或日历，至少要记录目标、参数和外部系统返回的可核验结果。返回成功、明确失败和结果不明应分开：网络超时可能发生在对方已处理之后，不能自动重复创建。&lt;/p&gt;</description></item><item><title>Manus 的启示：让个人助理真正完成任务，而不只是回答</title><link>https://caozuohua.github.io/posts/2026-10-30-manus-personal-assistant/</link><pubDate>Fri, 30 Oct 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-10-30-manus-personal-assistant/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;调研时间：2026 年 10 月。本文依据 Manus 官方公开材料和本项目现状分析，并非独立测评；产品和订阅规则可能变化。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;向一个聊天机器人提问，通常得到一段文字；向一个任务型 agent 提问，我们期待的是一份可以使用、检查、继续修改的成果。Manus 对后者的探索，值得我们研究。但我们要建设的是单用户、Lark 优先、资源节制的个人助理，不必把云端通用工作平台的整套基础设施搬回本机。&lt;/p&gt;&#10;&lt;h2 id="manus-做了什么把回答变成工作过程"&gt;Manus 做了什么：把回答变成工作过程&lt;/h2&gt;&#10;&lt;p&gt;Manus 将任务组织为模型决策与工具执行的循环。其工程文章描述：收到请求后，模型从已有动作空间中选择工具，运行工具得到观察，再把动作和观察加入上下文，直到任务结束。这是厂商对其工程设计的描述，并不意味着每次执行都正确。&lt;a href="https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus"&gt;来源：Context Engineering for AI Agents&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;官方介绍称，每项任务可获得隔离的云端虚拟机，有文件系统、网络、浏览器和工具。隔离环境可以让 agent 做调研、操作文件、编写和执行代码；它仍需要对外部服务的权限和审计，不能因为称作“沙箱”就假设任何联网动作都安全。&lt;a href="https://manus.im/blog/manus-sandbox"&gt;来源：Manus Sandbox&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;此外，Manus 提供本地浏览器和本地计算机接入方式。Browser Operator 文档描述单次授权、任务标签页、人工介入和停止；My Computer 文档描述本地文件夹授权与命令执行许可。这些是特定产品功能的授权机制，不可推导为所有动作都自动安全。&lt;a href="https://manus.im/en/blog/manus-browser-operator"&gt;浏览器操作&lt;/a&gt; · &lt;a href="https://manus.im/blog/manus-my-computer-desktop"&gt;本地计算机&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;对我们最有价值的不是“加一个浏览器”，而是从结果倒推每一步应该留下什么证据：用户要求查询知识库，最终应能看到来源；要求登记日程，应能看到实际创建的事件；遇到超时，应明确“结果未知”，而不是让模型把计划中的动作当作已完成。&lt;/p&gt;&#10;&lt;h2 id="上下文工程保留可以找回的线索"&gt;上下文工程：保留可以找回的线索&lt;/h2&gt;&#10;&lt;p&gt;Manus 在工程文章中提到，长上下文会增加成本，过度压缩也会损失信息；它使用文件系统存放可按需重新读取的信息，并尽量保留 URL、文件路径等可恢复线索。文章也讨论稳定前缀与缓存、保留错误以便恢复，以及通过约束动作选择而不是随意删除工具定义来控制工具集。这些是其公开经验；缓存是否可用、是否节省费用，仍取决于具体模型服务。&lt;a href="https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus"&gt;来源&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;我们的边界不同：当前上下文是进程内最多 12 轮、48,000 UTF-8 字节，按完整轮次淘汰；前文被淘汰后会提示，重启清空。它解决了短期衔接，不能保证任意长对话都不遗忘；真实 Lark 长对话与资源消耗尚待验收。&lt;/p&gt;&#10;&lt;p&gt;因此，下一步不必先做一个“自动永久记忆”系统。可以围绕真实对话，区分三类信息：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;近期对话&lt;/strong&gt;：用于连续回答，有明确容量上限和截断提示。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;知识来源&lt;/strong&gt;：用户明确让助理查询或记录的知识，来源放在已有 QPC 多维表格；长期内容不是聊天摘要。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;外部状态&lt;/strong&gt;：日程、知识记录等以 Lark 实际结果为准，保留对应记录标识，而不是以模型自述为准。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;例如用户问“继续刚才讨论的方案”，如果关键事实已被淘汰且没有可引用的知识记录，助理应该说缺少依据，请用户补充；只有明确请求查询时，才从获准的 QPC 表中检索相关记录。当前 QPC 只读检索已在开发分支实现，但真实权限、字段和端到端收发仍待验证；写入、修改和删除尚未实现。&lt;/p&gt;&#10;&lt;h2 id="从演示走向可靠闭环"&gt;从演示走向可靠闭环&lt;/h2&gt;&#10;&lt;p&gt;Manus 对自动化的介绍强调，可以定义触发条件、数据来源、测试运行、确认方式和失败后的查看与暂停。&lt;a href="https://manus.im/blog/introducing-automations"&gt;来源：Automations&lt;/a&gt;。这启发我们：功能是否可靠，不在于是否能展示一次成功，而在于它能否处理重复输入和不确定结果。&lt;/p&gt;&#10;&lt;p&gt;以“帮我记一条 QPC 知识”为例，一条未来可实现的最小流程应该是：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;用户明确要求记录，助理检查已有表结构与允许的字段；不改表头，不把所有聊天自动存入知识库。&lt;/li&gt;&#10;&lt;li&gt;程序校验内容与权限，发送一次写入请求；只有获得可验证的记录标识后，才报告保存成功。&lt;/li&gt;&#10;&lt;li&gt;接口超时后，不能简单重试或声称失败；先查证是否已经创建，无法查证时明确报告结果未知。&lt;/li&gt;&#10;&lt;li&gt;重复消息、进程重启和发送结果不明都要有独立测试，保证恢复流程不会绕过授权。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;这是设计提议，并非本项目已有能力。第一步仍应先完成 QPC 只读检索的真实验收；之后再根据实际需要选择写入或日历查询。&lt;/p&gt;&#10;&lt;h2 id="并行与成本有用但不必提前拥有"&gt;并行与成本：有用，但不必提前拥有&lt;/h2&gt;&#10;&lt;p&gt;Manus 的 Wide Research 面向需要对大量独立对象逐项调研的任务；其公开介绍描述主任务拆解、独立子任务并行执行以及结果汇总。&lt;a href="https://manus.im/uk/blog/manus-wide-research-solve-context-problem"&gt;来源&lt;/a&gt;。文中的质量提升是厂商对架构的论述，不应当直接当成对所有问题有效的独立基准结论。&lt;/p&gt;</description></item><item><title>设计一个极简资源占用的个人助理智能体</title><link>https://caozuohua.github.io/posts/2026-10-23-minimal-agent-for-low-resource/</link><pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-10-23-minimal-agent-for-low-resource/</guid><description>&lt;p&gt;在资源受限的环境（例如 512MB 内存、1 个共享 vCPU 的 VPS）中部署 AI 智能体，最大的挑战不是模型推理能力，而是&lt;strong&gt;常驻进程的内存占用&lt;/strong&gt;与&lt;strong&gt;不可控的运行开销&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;本文分享一套极简智能体方案，核心设计目标是：&lt;strong&gt;空闲时接近零开销，按需拉起重组件。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="一-核心设计原则"&gt;一、 核心设计原则&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;架构&lt;/strong&gt;：单一常驻进程 + 按需子进程。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;推理&lt;/strong&gt;：本地不跑模型，所有推理走远程 API。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;存储&lt;/strong&gt;：大部分数据存储在 SQLite 和普通文件中，不依赖复杂的中间件。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;按需拉起&lt;/strong&gt;：重型任务（如浏览器自动化）运行时加载，任务结束立即释放。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="二-架构实现方案"&gt;二、 架构实现方案&lt;/h3&gt;&#10;&lt;h4 id="1-网关与路由"&gt;1. 网关与路由&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;网关&lt;/strong&gt;：采用 Telegram 等单一渠道，利用 &lt;code&gt;httpx&lt;/code&gt; 实现长轮询，不引入庞大的 bot 框架，不开 Webhook 服务端口。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;零 AI 路由&lt;/strong&gt;：在进入 LLM 之前，先进行命令前缀和规则匹配。命中确定性技能则直接执行，不调用 LLM。这层路由通常能过滤大部分低价值请求，节省 API Token 和运行资源。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="2-调度与状态机"&gt;2. 调度与状态机&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;状态机&lt;/strong&gt;：手写简单的 asyncio 状态机（约 150 行），限制最多 3 到 4 步。通过结构化的 &lt;code&gt;action_type&lt;/code&gt;（tool_call, clarify, cannot_proceed, done）解决智能体&amp;quot;只计划不执行&amp;quot;的问题。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;调度&lt;/strong&gt;：弃用复杂的 APScheduler，使用 SQLite 任务表结合一个&amp;quot;睡到下一个到期任务&amp;quot;的协程进行调度。若要求极致，可利用 systemd timer 在需要时唤醒进程。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="3-记忆与工具管理"&gt;3. 记忆与工具管理&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;记忆&lt;/strong&gt;：核心数据采用 SQLite + FTS5 全文检索，避免部署笨重的向量数据库。夜间通过远程任务进行压缩和去重。仅在确实需要语义检索时，配合远程 embedding 和 sqlite-vec 按需启用。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;工具&lt;/strong&gt;：实施风险分级注册表。高风险动作需走 &lt;code&gt;pending_confirmation&lt;/code&gt; 闸门。MCP 服务以 stdio 子进程方式懒启动，用完即退。浏览器自动化是最大内存开销项，强制单实例，任务结束立即 Kill。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="4-安全与可观测性"&gt;4. 安全与可观测性&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;安全&lt;/strong&gt;：凭证与 Agent 核心进程分离，由工具层独立持有，Agent 仅发起请求。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;可观测性&lt;/strong&gt;：使用 SQLite 表记录日志并配合日志轮转，不本地部署 Langfuse，需要可视化时利用云端免费版。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="三-资源预算表估算"&gt;三、 资源预算表（估算）&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;项目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;目标&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;strong&gt;常驻内存&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;50–80MB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;strong&gt;空闲 CPU&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;约 0%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;strong&gt;单次对话峰值&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;额外 20–40MB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;strong&gt;浏览器任务峰值&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;额外 300–500MB（限 1 并发）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&lt;strong&gt;磁盘占用&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;&amp;lt;200MB (含依赖)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;硬限制方案&lt;/strong&gt;：写入 &lt;code&gt;systemd&lt;/code&gt; 配置（&lt;code&gt;MemoryMax=400M&lt;/code&gt;, &lt;code&gt;CPUQuota&lt;/code&gt;, &lt;code&gt;TasksMax&lt;/code&gt;），并配少量 &lt;code&gt;zram&lt;/code&gt;。超限时由 systemd 杀掉子进程，确保主进程稳健。&lt;/p&gt;</description></item></channel></rss>