4.0 KiB
title, date, draft, summary
| title | date | draft | summary |
|---|---|---|---|
| 工程化 AI 助理:一个整合方案 | 2026-04-10T22:30:00+01:00 | false | 把 AI 聊天、代码协作和后台任务整合到一个套件里,跑在一台 VPS 上。 |
AI 助手的问题不是不够聪明,而是太碎片化。聊天用一个 bot,代码用 Copilot,自动化用另一套东西。它们之间没有共享状态,每个都是孤岛。
我想要的是一个整合的方案:同一个 AI 内核,接入不同的工作场景,共享上下文和记忆。于是造了这么个东西。
架构
一个 Rust binary,跑三个循环:
noc (Rust binary)
├── Telegram 消息循环 → 聊天
├── Axum HTTP server → Gitea webhook
└── Life loop → 定时任务、反思、自主行为
后端是 OpenAI 兼容的 LLM API(目前用 vLLM 跑 Gemma 4),状态存 SQLite。整个东西部署在一台 4C8G 的 VPS 上,加上 Docker 跑 Gitea、Caddy 做反代和 HTTPS。
三种界面,一个内核
聊天是最基础的。Telegram bot,流式输出,支持工具调用。AI 可以直接跑 shell 命令、执行 Python、调 Gitea API,或者 spawn 一个 Claude Code 子进程去处理复杂任务。
Gitea Bot 是把 AI 拉进代码流程。在 PR 或 issue 里 @bot,它会拿到 diff 或 issue 内容,跑一轮分析,把结果作为 comment 贴回去。这不是一个独立的 review 工具,而是同一个 AI 以另一种方式出现——它知道你们之前在聊天里讨论了什么。
Life Loop 是后台引擎。timer 驱动,跑定时巡检、异步任务,也负责 AI 的自我反思。每次对话结束后,它会回顾交互内容,更新内部状态——不是存对话日志,而是沉淀对当前情况的理解。
关键是这三个界面共享同一份 persona、memory 和 inner state。不管 AI 在哪个场景出现,它对你的理解是连续的。
Gitea 带来的秩序
自建 Gitea 不只是为了跑代码,它给整个系统提供了一个结构化的工作台。
有了 Gitea,AI 的工作流有地方落:代码改动变成 commit 和 PR,任务追踪用 issue,讨论在 comment 里沉淀。这比在聊天框里说一句「帮我改一下那个文件」然后就消失在历史里强太多了。
noc 拿着 Gitea 的 admin token,可以创建 repo、提交代码、管理 issue。Webhook 把事件推过来,noc 决定要不要介入。这是一个闭环:聊天里说「开个 issue 跟踪一下」,AI 立刻在 Gitea 上建好;PR 提上来,AI 自动 review;CI 挂了,AI 主动分析原因贴 comment。
代码和讨论都有迹可循,不会散落在聊天记录里。
工具体系
noc 自带一组内置工具:
run_shell— 执行任意 shell 命令run_python— uv run 执行 Python,支持声明依赖自动安装call_gitea_api— 直接调 Gitea REST APIspawn_agent— 启动 Claude Code 子进程处理复杂任务update_memory/update_inner_state— AI 管理自己的记忆和状态set_timer— 设定定时任务
外部工具通过脚本扩展:在 tools/ 目录放一个实现了 --schema 接口的可执行文件就行,noc 每次请求自动发现。
设计原则是 noc 只做调度和人格层,重活交给专业工具。需要写代码?spawn Claude Code。需要跑 Python?uv 管理环境。需要操作 git?调 Gitea API。不重复造轮子。
部署
整个 suite 跑在一台 VPS 上:
- noc: systemd user service
- Gitea: Docker,数据挂载到
/data/noc/gitea/ - Caddy: 系统级 service,自动 HTTPS,按子域名路由
make deploy 从本地编译 + scp 到 VPS + 重启服务,一把梭。
所有数据在 /data/noc/ 下面,备份和迁移都简单。
现状
能用了,但还在早期。聊天和工具调用比较稳定,Gitea Bot 有基础的 @mention 响应和 PR review,Life Loop 能跑定时任务和反思。接下来想做的是让界面之间的联动更自然——聊天里提到的事自动变成 issue,PR merge 后自动通知,那种感觉。