<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Optimization on CAO ZUOHUA</title><link>https://caozuohua.github.io/tags/optimization/</link><description>Recent content in Optimization on CAO ZUOHUA</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 23 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caozuohua.github.io/tags/optimization/index.xml" rel="self" type="application/rss+xml"/><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>