首页/作品/Nomi
开源2026

Nomi

无需向量库的轻量多用户 Agent 底座:以飞书连接个人记忆、团队知识与受控工具,提供可直接体验的 Web 场景。

在线体验空间 ↗首个公开版本 v0.0.1 ↗GitHub ↗
⊘
解决的问题

单人 Agent 的记忆和工具能力,在多人使用时需要明确身份、资料权限与操作责任,不能只共用一个聊天入口。

◈
我的贡献

基于 nanobot 构建多用户飞书底座,将个人与共享知识、受控工具、审核确认和可复现评测组织成可配置能力。

◉
项目成果

开源多用户飞书 Bot,并上线无需登录的 Web 体验空间,展示资料阅读、多轮问答与可追溯引用。

技术栈
#Python#nanobot#飞书 SDK#SQLite#ripgrep#Docker

从一个聊天入口,到可维护的团队助手

我希望做一个可以逐步扩展的通用 Bot:先跑通基础聊天,再按需要启用记忆、知识检索和工具。多人接入后,问题不只是模型能做什么,还包括它以谁的身份读取资料、哪些知识可以共享,以及谁批准一次外部操作。

Nomi 基于 nanobot SDK,当前接入飞书文本私聊与群聊 @。它面向希望自托管 Agent 的开发者与小规模团队:同一套服务支持个人能力和团队知识,但不把每个人的资料混进一个公共上下文。

项目采用 MIT 许可证,首个公开源码快照为 v0.0.1。现在也提供 Web 体验空间,可以先体验知识问答,再决定是否部署完整 Bot。

为什么选择这条轻量路线

无需向量库,也无需文档嵌入计算(Embedding)。 文档保存为可直接查看的文本快照,SQLite 记录来源与状态,ripgrep 执行有界词面检索。文档更新后不需要重新计算向量;可选模型查询改写用于补充表达,而不是替代权限校验。

基础 Bot 单容器运行。 状态和后台任务由 SQLite、文本文件与持久化数据卷承载,不需要额外部署 Redis、PostgreSQL 或独立任务队列。Web 体验入口单独部署。这里减少的是部署组件,不代表无需模型服务或飞书授权。

一个 Bot,多个独立用户。 个人数据库、文档目录、Agent 工作区和授权凭据按作用域隔离;群聊使用独立上下文,只读取获授权的共享知识。隔离由应用层权限与数据范围实现,不等同于每用户独立容器或操作系统沙箱。

模型理解意图,程序约束执行。 知识候选经审核后生效,外部写操作由服务端生成真实预览,用户确认后执行并核对结果。来源、版本和操作状态都需要能追溯,而不是只让模型在回答里声称“已经完成”。

这些取舍适合资料量和访问规模可控的团队。我没有据此宣称它比向量检索更准确,或在大规模、高并发场景下性能更好。

先体验,再部署

在线体验 Nomi 无需登录,提供 Zulip 产品客服与 GitLab 团队知识两个只读场景。可以阅读官方资料的中文摘要、查看预置多轮示例,或自己提问,通过引用跳转核对答案依据。

体验页复用 Nomi 的检索、查询改写、nanobot runtime 与证据校验链路,但不连接飞书消息接收服务,也不开放个人记忆、知识学习、文档导入、飞书授权或日程与任务写入。它展示的是知识问答能力,不是完整 Bot 的全部功能。

匿名体验有请求额度和会话保留期限。请使用公开问题,不提交个人隐私或团队机密;具体规则以体验页和仓库文档为准。

把能力做成可选项

  • 个人记忆:维护个人档案和精选事实,支持确认候选、纠错与屏蔽。
  • 个人文档:使用各用户独立授权,导入其有权访问的飞书文档,保存文本快照并定期检查更新。
  • 共享知识:按业务库配置读者、群和管理员。普通回答只使用已发布内容,知识候选需本人或管理员审核。
  • 受控工具:在私聊中查询日程与本人任务;有限写操作先展示完整预览,确认后再执行。

进阶能力默认关闭,按配置启用;工具还受允许名单和能力依赖约束。模型可以准备草稿,但不能自行批准知识发布或外部写操作。

技术路径

飞书消息
  → 身份与会话范围校验
  → nanobot 用户 / 群工作区
  → 按权限读取记忆、知识或调用受控工具
  → 核对证据与操作状态
  → 最终答复

SQLite 保存来源、版本、任务和刷新元数据;文档正文保存为隔离的文本快照,通过 ripgrep 做有界检索。可选查询改写用于补充检索表达,失败时回退原查询。当前不是向量检索系统,同义表达仍可能漏检。

持久化消息队列处理去重、失败重试和重启恢复。应用以 Docker 常驻运行,会话、用户授权和知识状态保存在持久化数据卷中。

验证不只看一个总分

项目将程序测试、离线评测与真实模型、真实飞书平台验收分开记录。程序测试检查隔离、配置、队列和确认逻辑;离线评测检查固定任务的检索与权限行为;现场验收则核对实际消息、授权和工具结果。

Web 体验部署还核对了公网多轮回答、引用跳转、重复请求、访客隔离与容器重建。首次回答曾因同步下载分词器资源挂起,后来将资源预装进镜像,避免容器重建后再次依赖运行时下载。这是一次具体部署问题的修复,不是整体性能优势的证明。

这些证据回答的是不同问题。开发回归通过,不等于已经证明陌生团队、大规模知识库或长期生产运行的效果。公开仓库提供测试和评测入口,便于部署者在自己的环境中复核。

当前边界

完整 Bot 当前只实现飞书通道和有限工具,Web 是独立的只读体验入口。项目采用单实例架构,尚未提供多实例部署或插件市场,不支持任意 CLI、代发即时消息或写文档。知识学习是“提出候选、审核后生效”,不是自动发布,也不是完整 Wiki 页面系统或全自动自进化。

文档刷新是定期检查,不是实时权限同步。写操作有确认与状态核对,但外部平台并发修改和长期幂等仍有边界。暂停记忆不等于彻底删除全部历史数据;具体行为以仓库文档为准。

这个项目对我最重要的实践,是把 Agent 的能力与责任放在一起设计:先限定身份、资料范围和操作权限,再讨论如何增加能力。

相关作品
抖抖先知
TypeScript · Cloudflare Workers