<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SQLite on CAO ZUOHUA</title><link>https://caozuohua.github.io/tags/sqlite/</link><description>Recent content in SQLite 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/sqlite/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><item><title>给本地 Agent 造一块看板（四）：极简单机派——一个二进制、一条命令</title><link>https://caozuohua.github.io/posts/2026-10-08-agent-kanban-03-minimal-local/</link><pubDate>Thu, 08 Oct 2026 21:15:00 +0800</pubDate><guid>https://caozuohua.github.io/posts/2026-10-08-agent-kanban-03-minimal-local/</guid><description>&lt;h1 id="给本地-agent-造一块看板四极简单机派一个二进制一条命令"&gt;给本地 Agent 造一块看板（四）：极简单机派——一个二进制、一条命令&lt;/h1&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;本系列共八篇，用同一套七层能力框架（C1–C7）横向解剖开源任务看板。&#10;本篇覆盖 &lt;code&gt;rgracey/kanban-mcp&lt;/code&gt;、&lt;code&gt;nerkoman/agent-kanban&lt;/code&gt;、&lt;code&gt;mintopia/cocopilot&lt;/code&gt;、&lt;code&gt;AdamManuel-dev/task-kanban-mcp&lt;/code&gt;、&lt;code&gt;SimonBlancoE/kanban-mcp&lt;/code&gt;。&#10;元数据于 2026-10-08 经 GitHub API 一手核验。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="一这一派的共同追求把部署这件事消灭掉"&gt;一、这一派的共同追求：把&amp;quot;部署&amp;quot;这件事消灭掉&lt;/h2&gt;&#10;&lt;p&gt;前两派都在解决&amp;quot;看板该放在哪&amp;quot;（仓库里 / 依赖图里）。这一派不关心这个，它的目标极其单纯：&lt;strong&gt;让一个人在一台机器上、用一条命令，把看板立起来。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;于是它们的形态高度一致：&lt;/p&gt;&#10;&lt;div class="mermaid"&gt;&#10;graph LR&#10; U[&amp;#34;浏览器 / CLI&amp;#34;] --&amp;gt; S[&amp;#34;一个进程&amp;#34;]&#10; S --&amp;gt; DB[(&amp;#34;SQLite 文件&amp;#34;)]&#10; A[&amp;#34;本地 agent&amp;#34;] --&amp;gt;|&amp;#34;HTTP 或 MCP&amp;#34;| S&#10;&lt;/div&gt;&#10;&lt;script type="module"&gt;&#10; import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';&#10; mermaid.initialize({&#10; startOnLoad: true,&#10; theme: 'neutral',&#10; securityLevel: 'strict',&#10; flowchart: { curve: 'basis' }&#10; });&#10;&lt;/script&gt;&#10;&lt;p&gt;一个进程、一个 SQLite 文件、一个 HTTP 面（外加可选一个 MCP 面）。没有 Docker、没有外部数据库、没有鉴权体系。&lt;/p&gt;&#10;&lt;p&gt;这个追求是合理的——本系列的目标场景就是&amp;quot;单人单机&amp;quot;。&lt;strong&gt;但这一派的表现也最参差：它的能力上限不低（有的做到了相当完整的自动派单），可它的存活率是全系列最差的。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;先把项目摆出来。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="二五个项目逐个看"&gt;二、五个项目逐个看&lt;/h2&gt;&#10;&lt;h3 id="21-rgraceykanban-mcp2无许可证go-部署轻量度的满分答案"&gt;2.1 &lt;code&gt;rgracey/kanban-mcp&lt;/code&gt;（2★，无许可证，Go）—— 部署轻量度的满分答案&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;它是&amp;quot;单二进制&amp;quot;这个形态的教科书。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;一个 Go 二进制里，&lt;strong&gt;SQLite + Web UI + MCP server 全部内嵌&lt;/strong&gt;，零外部依赖，Web UI 在 &lt;code&gt;:8080&lt;/code&gt;。功能上也有几个亮点：&lt;/p&gt;</description></item></channel></rss>