由 AI Meeting Memory Assistant 升级而来,会议助手能力现在作为“会议纪要 Skill”保留。产品定位是一个面向办公场景的 AI Agent 原型:用户输入会议、周报或需求材料后,系统展示 Agent Plan,并调用对应 Skill 生成结构化办公输出、质量自检、保存记录和反馈迭代清单。
- 用户系统:注册 / 登录后才能进入应用,数据按账号隔离
- Skill 工作台:会议纪要、周报生成、需求评审三个办公 Skill
- 会议纪要 Skill:浏览器录音 / 上传音频 / 会议文本转结构化纪要
- 周报生成 Skill:工作记录、会议引用、待办状态转结构化周报
- 需求评审 Skill:功能想法、用户反馈、背景资料转 PRD 草稿和验收标准
- Agent Plan:展示目标理解、Skill 选择、信息缺口、执行步骤和风险提示
- 质量自检:检查幻觉、夸大、遗漏、不可复制等问题
- 输出记录:PocketBase 持久化保存办公 Skill 输出
- 反馈迭代:保存准确性、可复制性、完整性评分和下一版建议
- 会议记忆库:PocketBase 持久化保存,支持标题、关键词、参会人搜索和类型筛选
- RAG 配置:在独立页面保存项目背景、业务规则和术语资料
- 会议追问:基于单条会议记录回答问题
- React + TypeScript + Vite
- Express API server
- PocketBase:本地数据库、用户认证、会议记忆和 RAG 资料库
- 用户自定义 AI Provider(OpenAI 兼容 / Gemini 兼容)
- Free Joy(FJ)设计系统 —— 暖纸白 + Joy Coral 珊瑚色,组件 vendored 在
src/freejoy/,适配组件在src/ui/
本项目通过登录用户的“AI 连接配置”保存 Provider、Base URL、模型和 API key。API key 使用 AI_CONFIG_SECRET 加密后存入 PocketBase;服务端不再读取 .env 中的默认 Gemini key 作为兜底配置。
复制 .env.example 为 .env,设置服务端口、PocketBase 地址和用于加密自定义 API key 的 AI_CONFIG_SECRET:
cp .env.example .envPORT=8788
PB_URL=http://127.0.0.1:8090
JSON_BODY_LIMIT=10mb
AI_CONFIG_SECRET=
AI_VALIDATE_TIMEOUT_MS=15000未设置可用的用户默认 AI 配置时,服务端会降级为本地演示解析,前端会标记为“演示模式”。纯文本、Markdown、CSV、JSON、HTML、XML、RTF、DOCX、ODT、PPTX 和 XLSX 会在服务端本地提取文本;图片和音频类能力需要配置支持对应能力的 Provider。
准备 PocketBase:
# macOS 示例,也可以从 https://pocketbase.io/docs/ 下载对应系统版本
curl -L https://github.com/pocketbase/pocketbase/releases/download/v0.31.0/pocketbase_0.31.0_darwin_arm64.zip -o pocketbase.zip
unzip pocketbase.zip pocketbase
chmod +x pocketbasenpm install
./pocketbase migrate up
./pocketbase serve另开一个终端启动前后端:
npm run dev默认地址:
- 前端:
http://localhost:5173/office-agent/ - API:
http://localhost:8788 - PocketBase:
http://127.0.0.1:8090
首次进入前端需要注册或登录账号。所有会议、追问和 RAG 文档都会通过 PocketBase token 绑定到当前用户。
生产构建:
npm run build
npm start单元测试基于 Node 内置的 node:test,无需启动服务、数据库或配置 API key:
npm run typecheck # tsc -b
npm run lint # 覆盖 src、server、scripts、test
npm test # server 纯函数单测(mock/gemini/rag/extractor/analyzer)
npm run build # 生产构建端到端脚本 npm run verify:memory 只需要本地 PocketBase;npm run verify:ai 会注册临时账号、用 VERIFY_AI_API_KEY(可选 VERIFY_AI_PROVIDER / VERIFY_AI_MODEL)创建并验证一条 AI 配置后跑完整链路。CI(.github/workflows/ci.yml)会自动执行 typecheck、lint、test 和 build。工程说明见 AGENTS.md。
服务端保留原会议 Prompt 链路,并新增办公 Agent Prompt 链路:
- Agent Plan:任务理解、Skill 选择、输入缺口、RAG 判断和执行步骤
- Skill 执行:会议纪要复用原链路;周报 / 需求评审使用新增 Prompt
- 质量自检:检查幻觉、夸大、遗漏、不可复制和不可验证内容
- 输出保存:保存 input、agent_plan、output、quality_check 和 rag
- 反馈总结:把用户评分和文字反馈整理为迭代建议
核心文件:
server/prompts.jsserver/analyzer.jsserver/gemini.jsserver/storage.jsserver/pocketbase.jspb_migrations/*
前端采用 Free Joy(FJ)设计系统 重构(来自 claude.ai/design,经 Claude 设计 MCP 导入):
- 暖纸白底(
--paper)+ 单一 Joy Coral 珊瑚色交互强调(--accent#F2603C) - Bricolage Grotesque 标题 + Hanken Grotesk 正文
- 白色发丝边框卡片、pill 按钮/标签、克制圆角与轻柔玻璃质感
- 会议纪要分类(决策/待办/风险/问题/记忆/摘要)用 FJ 软色点缀区分
接入方式:FJ token 在 src/index.css 引入,src/App.css 的 :root 做 token bridge 全站换肤;FJ 组件 vendored 在 src/freejoy/,应用适配组件在 src/ui/。项目内的设计基准见 DESIGN.md。
- 多会议 RAG 检索
- 项目维度长期记忆
- 自动生成下次会议议程
- 飞书 / Notion 导出