blog/content/posts/ai-suite.md

4.0 KiB
Raw Permalink Blame History

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 不只是为了跑代码,它给整个系统提供了一个结构化的工作台。

有了 GiteaAI 的工作流有地方落:代码改动变成 commit 和 PR任务追踪用 issue讨论在 comment 里沉淀。这比在聊天框里说一句「帮我改一下那个文件」然后就消失在历史里强太多了。

noc 拿着 Gitea 的 admin token可以创建 repo、提交代码、管理 issue。Webhook 把事件推过来noc 决定要不要介入。这是一个闭环:聊天里说「开个 issue 跟踪一下」AI 立刻在 Gitea 上建好PR 提上来AI 自动 reviewCI 挂了AI 主动分析原因贴 comment。

代码和讨论都有迹可循,不会散落在聊天记录里。

工具体系

noc 自带一组内置工具:

  • run_shell — 执行任意 shell 命令
  • run_python — uv run 执行 Python支持声明依赖自动安装
  • call_gitea_api — 直接调 Gitea REST API
  • spawn_agent — 启动 Claude Code 子进程处理复杂任务
  • update_memory / update_inner_state — AI 管理自己的记忆和状态
  • set_timer — 设定定时任务

外部工具通过脚本扩展:在 tools/ 目录放一个实现了 --schema 接口的可执行文件就行noc 每次请求自动发现。

设计原则是 noc 只做调度和人格层重活交给专业工具。需要写代码spawn Claude Code。需要跑 Pythonuv 管理环境。需要操作 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 reviewLife Loop 能跑定时任务和反思。接下来想做的是让界面之间的联动更自然——聊天里提到的事自动变成 issuePR merge 后自动通知,那种感觉。