From 1e4eff0dc229dc9c1276f14b2178e517a76f3145 Mon Sep 17 00:00:00 2001 From: LinMoQC <2896311434@qq.com> Date: Sun, 26 Apr 2026 01:15:07 +0800 Subject: [PATCH 1/2] :fire: chore(git): stop tracking api storage artifacts --- .gitignore | 5 + .../3acf8dfe-1723-4896-a9e6-23a547d5737a.md | 3 - .../41b24de4-9d20-48d8-bc3c-9fe8fdeb4934.md | 7 - .../72708d3a-a42e-4a96-9fe2-28081462ed31.md | 7 - .../85239377-83ad-478b-b819-f36d894bb9e3.pdf | Bin 34860 -> 0 bytes .../a9b726fd-1b6f-4444-a297-0dbdb73fdd3c.md | 7 - .../a9e24316-a846-4e3c-8b20-52234859609e.md | 240 ------------------ 7 files changed, 5 insertions(+), 264 deletions(-) delete mode 100644 apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/3acf8dfe-1723-4896-a9e6-23a547d5737a.md delete mode 100644 apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/41b24de4-9d20-48d8-bc3c-9fe8fdeb4934.md delete mode 100644 apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/72708d3a-a42e-4a96-9fe2-28081462ed31.md delete mode 100644 apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/85239377-83ad-478b-b819-f36d894bb9e3.pdf delete mode 100644 apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9b726fd-1b6f-4444-a297-0dbdb73fdd3c.md delete mode 100644 apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9e24316-a846-4e3c-8b20-52234859609e.md diff --git a/.gitignore b/.gitignore index dd3ca40..141eb19 100644 --- a/.gitignore +++ b/.gitignore @@ -71,9 +71,14 @@ env/ # local storage api/storage/ +apps/api/storage/ # agent memory (runtime data, user-specific — not for version control) api/data/memory/ +apps/api/data/memory/ + +# local runtime caches +apps/api/tmp/ # daily rotating log files api/logs/ diff --git a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/3acf8dfe-1723-4896-a9e6-23a547d5737a.md b/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/3acf8dfe-1723-4896-a9e6-23a547d5737a.md deleted file mode 100644 index 901fdac..0000000 --- a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/3acf8dfe-1723-4896-a9e6-23a547d5737a.md +++ /dev/null @@ -1,3 +0,0 @@ -# test - -this is a tiny ingestion regression check \ No newline at end of file diff --git a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/41b24de4-9d20-48d8-bc3c-9fe8fdeb4934.md b/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/41b24de4-9d20-48d8-bc3c-9fe8fdeb4934.md deleted file mode 100644 index 1822a81..0000000 --- a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/41b24de4-9d20-48d8-bc3c-9fe8fdeb4934.md +++ /dev/null @@ -1,7 +0,0 @@ -# Codex Ingestion Smoke Test - -This source is used to verify the pending -> processing -> indexed pipeline. - -- queue routing -- after commit dispatch -- worker consumption diff --git a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/72708d3a-a42e-4a96-9fe2-28081462ed31.md b/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/72708d3a-a42e-4a96-9fe2-28081462ed31.md deleted file mode 100644 index 1822a81..0000000 --- a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/72708d3a-a42e-4a96-9fe2-28081462ed31.md +++ /dev/null @@ -1,7 +0,0 @@ -# Codex Ingestion Smoke Test - -This source is used to verify the pending -> processing -> indexed pipeline. - -- queue routing -- after commit dispatch -- worker consumption diff --git a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/85239377-83ad-478b-b819-f36d894bb9e3.pdf b/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/85239377-83ad-478b-b819-f36d894bb9e3.pdf deleted file mode 100644 index e1571d1ffdad6711b1ad28721fe98924afb5de45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34860 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 diff --git a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9b726fd-1b6f-4444-a297-0dbdb73fdd3c.md b/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9b726fd-1b6f-4444-a297-0dbdb73fdd3c.md deleted file mode 100644 index 1822a81..0000000 --- a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9b726fd-1b6f-4444-a297-0dbdb73fdd3c.md +++ /dev/null @@ -1,7 +0,0 @@ -# Codex Ingestion Smoke Test - -This source is used to verify the pending -> processing -> indexed pipeline. - -- queue routing -- after commit dispatch -- worker consumption diff --git a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9e24316-a846-4e3c-8b20-52234859609e.md b/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9e24316-a846-4e3c-8b20-52234859609e.md deleted file mode 100644 index d3b8c27..0000000 --- a/apps/api/storage/notebooks/9a2371fa-8a99-4436-b330-f35bf43c893c/a9e24316-a846-4e3c-8b20-52234859609e.md +++ /dev/null @@ -1,240 +0,0 @@ -# LyraNote 本科毕设全局设计说明(论文版) - -> 文档用途:用于本科毕业论文中的“研究背景、系统设计、技术特点、关键难点与创新点”章节初稿。 -> -> 版本日期:2026-03-26 -> -> 适用对象:论文作者、答辩评审、项目协作者 - ---- - -## 摘要 - -LyraNote 是一个面向个人研究与知识管理场景的 AI 驱动系统,目标是将传统“知识存储工具”升级为“可持续协作的研究伙伴”。系统围绕“私有知识优先”的设计原则,整合了 RAG 检索增强、多 Agent 编排、长期记忆、主动感知、深度研究与可视化生成界面(GenUI)等能力,形成从信息采集、理解、生成到反馈演化的闭环。 - -与常见 AI 笔记产品相比,LyraNote 不仅提供被动问答,还重点探索 AI 的主动性与持续性:在用户未显式提问时,系统仍可基于上下文状态进行低干扰主动辅助;在长周期任务中,系统支持定时调度与自动投递;在多轮交互中,系统通过多层记忆与画像机制持续提升个性化质量。该系统具有较强工程实现价值与研究讨论价值,适合作为“智能知识系统 + Agent 工程化”方向的本科毕设课题。 - ---- - -## 1. 研究背景与意义 - -### 1.1 研究背景 - -当前主流知识管理工具(笔记类应用、文档类应用)普遍存在两类不足: - -1. 知识层面:多来源信息可存储但难以深度理解,跨文档关联弱,检索结果与用户真实任务脱节。 -2. AI 层面:大多停留在“你问我答”的被动模式,缺乏持续状态感知、长期个性化与任务自动执行能力。 - -与此同时,通用大模型虽然具备强生成能力,但在真实研究流程中仍面临幻觉、上下文窗口限制、长任务中断、可解释性不足、部署复杂等问题。基于此,LyraNote 以“面向研究场景的 AI 原生第二大脑”为目标,尝试把 LLM 能力转化为可持续、可控、可落地的系统能力。 - -### 1.2 研究意义 - -1. 应用意义:提高个人研究与学习效率,减少“搜集-整理-输出”的重复劳动。 -2. 工程意义:构建可扩展的 AI 系统架构,验证多 Agent、记忆系统、事件驱动链路在真实产品中的可行性。 -3. 学术意义:为“从被动对话到主动协作”的 AI Agent 产品化路径提供可复用方法与实验设计。 - ---- - -## 2. 研究目标与问题定义 - -### 2.1 总体目标 - -构建一个支持“知识摄取—语义检索—深度研究—结构化表达—长期演化”的 AI 研究笔记系统,实现 AI 从工具属性向伙伴属性的演进。 - -### 2.2 核心研究问题 - -1. 如何让 AI 回答建立在用户私有知识之上,而不是泛化互联网知识? -2. 如何在复杂任务中提升质量与稳定性,避免单 Agent 架构的能力拥挤? -3. 如何让 AI 在不打扰用户的前提下实现主动感知与主动辅助? -4. 如何在工程上实现可扩展、可维护、可自托管的系统架构? - ---- - -## 3. 系统总体架构设计 - -### 3.1 分层总体架构 - -LyraNote 采用“前端交互层 + 后端服务层 + AI 能力层 + 基础设施层”的分层设计: - -1. 前端交互层(Next.js + Tiptap + SSE) -用于笔记编辑、对话交互、研究进度可视化、结构化内容展示。 -2. 后端服务层(FastAPI) -负责路由编排、鉴权、业务规则与 API 暴露。 -3. AI 能力层(Agents + Skills + Memory) -负责检索、写作、深度研究、工具调用、记忆更新与主动洞察。 -4. 基础设施层(PostgreSQL/pgvector + Redis + Celery + S3 兼容存储) -负责结构化数据、向量索引、异步任务、对象存储与调度。 - -### 3.2 关键数据闭环 - -系统形成“源→知识→对话→笔记→再入库”的闭环: - -1. 用户导入 PDF/网页/Markdown。 -2. 后端异步完成解析、分块、向量化并入库(RAG 索引)。 -3. 对话阶段基于检索证据生成回答并附引用。 -4. 用户将结果沉淀为笔记、摘要或报告(Artifact)。 -5. 笔记可再次作为来源进入知识库(Note-as-Source),形成持续演化。 - -### 3.3 AI 核心架构 - -#### 3.3.1 多 Agent 协作架构(System A) - -采用“主 Agent(Orchestrator)+ 专家 Agent(RAG/Research/Writing/Memory/Web)”的两层决策: - -1. 主 Agent 负责任务级路由(把问题交给最合适的专家)。 -2. 专家 Agent 负责步骤级执行(检索、搜索、写作、记忆更新等)。 - -该设计缓解了单 ReAct 循环能力拥挤、复杂任务步骤不足的问题。 - -#### 3.3.2 Soul 持续思维与表达机制(System B) - -通过活动感知、后台思维循环和表达门控机制,让 AI 在用户静默期仍可进行低频高价值思考,并在合适时机以可忽略的方式推送洞察。 - -#### 3.3.3 用户画像与记忆体系(System C) - -系统从“碎片记忆”升级到“多层记忆 + 用户画像”: - -1. 记忆层存储偏好、事实、场景与反思信息。 -2. 画像层按周期进行综合,形成对用户研究方向、能力水平、表达偏好的立体表征。 -3. 画像结果回注到路由决策与回答策略,实现长期个性化。 - ---- - -## 4. 核心特点(面向论文阐述) - -### 4.1 私有知识优先的 RAG 管道 - -系统在 Query 改写、多路检索、混合排序、重排与去重环节进行优化,重点解决多轮指代、召回不足和内容冗余问题。根据优化设计预期: - -1. 召回率提升约 25%~35%。 -2. 精确率提升约 20%。 -3. 首次响应延迟下降约 30%。 - -### 4.2 深度研究(Deep Research)能力 - -区别于单轮问答,深度研究支持“规划→检索→递归扩展→综合成文”的多阶段流程,支持 Quick/Deep 两种预算模式,并通过 SSE 反馈研究过程。为提升鲁棒性,研究任务与连接流解耦,支持刷新恢复与断点续传。 - -### 4.3 GenUI 结构化表达能力 - -通过统一 `genui` 协议将模型输出映射为可交互组件(图表、表格、时间轴、矩阵、看板等),提升研究结果可读性与可操作性,使 AI 输出从“纯文本”升级为“可视化知识单元”。 - -### 4.4 主动感知与自动化执行 - -系统提出“微交互渗透→上下文智能→自主行动”的三层主动架构: - -1. 在索引完成、编辑停顿、页面切换等时机提供低打扰提示。 -2. 通过定时任务实现持续任务自动执行(采集、生成、投递)。 -3. 将 AI 从一次性交互扩展为长期运行助手。 - -### 4.5 可自托管与工程可扩展性 - -1. 认证从外部 Clerk 迁移到本地单用户方案(bcrypt + JWT + 初始化向导),降低部署门槛。 -2. 存储层引入 `StorageProvider` 抽象,统一本地与 S3 兼容后端,支持横向扩展与多环境部署。 -3. 后端引入分层重构思路(Router/Service/Modules/Infrastructure),提升可维护性与测试性。 - ---- - -## 5. 关键难点与解决思路 - -### 难点 1:检索质量与多轮语义理解 - -问题:用户问题口语化、上下文省略、语义跨度大,导致检索召回不稳定。 -解决:引入对话感知 Query 改写、多 Query 并行、向量+全文混合检索、MMR 去重与 Cross-Encoder 重排。 - -### 难点 2:深度研究任务长链路稳定性 - -问题:若研究流程与 SSE 连接强耦合,用户刷新页面会导致任务中断。 -解决:任务后台化(独立运行)+ 事件缓冲 + 状态查询,支持断点续传与结果恢复。 - -### 难点 3:上下文窗口与成本控制 - -问题:深度研究在多轮检索后易超出上下文窗口,且联网搜索有调用成本。 -解决:学习结果摘要压缩、结果数量上限、检索阈值触发 Web Search、关键词去重与模式化预算(Quick/Deep)。 - -### 难点 4:主动性与用户体验平衡 - -问题:主动提示过多会造成干扰。 -解决:采用“适时、适量、可忽略”原则,限制触发频率与展示密度,允许用户关闭或忽略。 - -### 难点 5:系统复杂度持续上升 - -问题:功能扩展导致路由臃肿、职责混乱、可维护性下降。 -解决:推进 Service 分层、模块化 Agents、统一 Provider 接口、Schema 规范化,降低耦合度。 - -### 难点 6:自托管部署与多环境兼容 - -问题:文件存储、认证依赖、异步任务在不同部署环境中易出兼容性问题。 -解决:认证本地化、存储抽象化、任务队列标准化(Celery + Redis)、配置集中化管理。 - ---- - -## 6. 论文可主张的创新点 - -1. 提出并实现“多 Agent 协作 + Soul 持续感知 + 用户画像演化”的三系统耦合架构。 -2. 将 AI 交互从“被动问答”扩展到“主动感知与任务执行”的产品形态。 -3. 在研究报告场景中实现 Deep Research 的工程化闭环(多阶段推理、可恢复任务、可复用产物)。 -4. 提出并落地面向生成式应用的统一 GenUI 协议,增强 LLM 输出可视化表达能力。 -5. 结合记忆与技能系统,实现“能力可插拔 + 个性可演化”的长期 Agent 机制。 - ---- - -## 7. 论文实验与评估建议(可直接写入实验章节) - -### 7.1 建议评估维度 - -1. 检索效果:Recall@K、Precision@K、nDCG。 -2. 回答质量:事实一致性、引用覆盖率、结构完整度。 -3. 任务能力:复杂任务完成率、平均完成时长、失败重试率。 -4. 主动交互:建议点击率、忽略率、用户主观满意度。 -5. 个性化效果:开启/关闭记忆后的质量差异、长期 `quality_score` 变化。 -6. 工程性能:首 token 延迟、平均响应时延、任务吞吐量、资源消耗。 - -### 7.2 建议对比实验 - -1. 单 Agent vs 多 Agent(复杂任务完成率对比)。 -2. 无记忆 vs V1 记忆 vs V2 记忆(个性化质量对比)。 -3. 被动模式 vs 主动模式(交互效率与满意度对比)。 -4. 纯文本输出 vs GenUI 输出(信息理解效率与可用性对比)。 - ---- - -## 8. 局限性与后续工作 - -1. 深度研究仍依赖外部搜索服务,成本与稳定性受第三方接口影响。 -2. 多 Agent 路由效果对 Prompt 与结构化输出稳定性敏感。 -3. 主动机制目前主要面向单用户场景,多用户协作机制有待拓展。 -4. 评估体系仍需更大规模用户实验来验证泛化性。 - -后续可重点推进: - -1. 更细粒度的路由评估与自动纠偏机制。 -2. 更强的多模态研究能力(图像/表格/代码执行)。 -3. 研究任务模板化与可复现实验流水线。 -4. 面向团队协作的多租户与权限机制。 - ---- - -## 9. 文档依据(可作为论文内部参考来源) - -1. `architecture.md`(系统总架构、AI 流水线) -2. `lyra-soul-system.md`(多 Agent + Soul + 画像) -3. `memory-system-v2.md`(五层记忆体系) -4. `skills-system.md`(可插拔技能架构) -5. `deep-research.md`(多阶段研究流程与任务解耦) -6. `rag-optimization.md`(检索优化链路) -7. `genui-integration.md`(GenUI 协议) -8. `proactive-ai-system.md`(主动感知体系) -9. `scheduled-tasks.md`(定时任务自动化) -10. `backend-architecture-refactor.md`(后端分层重构) -11. `storage-system.md`(存储抽象) -12. `single-user-auth.md`(单用户自托管认证) - ---- - -## 附:论文写作使用建议 - -1. 可将第 1-3 节作为“绪论 + 总体设计”。 -2. 可将第 4-5 节拆为“关键技术实现”。 -3. 可将第 6-7 节作为“创新点与实验设计”。 -4. 可将第 8 节作为“总结与展望”。 - From 54ac5bd1cc4bea88cffffee3f1e97e5480b355f6 Mon Sep 17 00:00:00 2001 From: LinMoQC <2896311434@qq.com> Date: Sun, 26 Apr 2026 01:29:33 +0800 Subject: [PATCH 2/2] :fire: chore(repo): remove one-off thesis and patch scripts --- patch_home.js | 140 ----- scripts/create_db_table_design_docx.py | 470 ---------------- scripts/fix_thesis_er_diagrams.py | 639 ---------------------- scripts/fix_thesis_er_diagrams_mermaid.py | 303 ---------- scripts/generate_thesis_pdfs.py | 297 ---------- 5 files changed, 1849 deletions(-) delete mode 100644 patch_home.js delete mode 100644 scripts/create_db_table_design_docx.py delete mode 100644 scripts/fix_thesis_er_diagrams.py delete mode 100644 scripts/fix_thesis_er_diagrams_mermaid.py delete mode 100644 scripts/generate_thesis_pdfs.py diff --git a/patch_home.js b/patch_home.js deleted file mode 100644 index 96c1888..0000000 --- a/patch_home.js +++ /dev/null @@ -1,140 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const filePath = path.join(process.cwd(), "apps/desktop/src/pages/home/home-page.tsx"); -let content = fs.readFileSync(filePath, "utf-8"); - -// replace SUGGESTIONS -content = content.replace( - /const SUGGESTIONS = \[\s*"分析知识库核心主题",\s*"生成结构化研究摘要",\s*"对比不同来源观点",\s*"根据笔记制定学习计划",\s*\]/g, - `const SUGGESTIONS = [ - { icon: , text: "帮我分析知识库中的核心主题" }, - { icon: , text: "为我的研究生成一份结构化摘要" }, - { icon: , text: "对比不同来源中的相似观点" }, - { icon: , text: "根据笔记内容生成学习计划" }, -]` -); - -// replace render -content = content.replace( - /return \(\s*
[\s\S]*?\)\n\}/, - \`return ( -
- {/* Title Area */} - -
- AI Avatar -
-
-

- 有什么我可以帮你的? -

-

- 基于你的知识库,我可以帮你分析、总结和探索任何内容 -

-
-
- - {/* Suggestions Grid */} - - {SUGGESTIONS.map((s, idx) => ( - handleSuggestion(s.text)} - className="flex items-center gap-2.5 px-4 py-3.5 rounded-xl text-left text-[12.5px] transition-colors" - style={{ - background: "rgba(255,255,255,0.015)", - border: "1px solid rgba(255,255,255,0.05)", - color: "var(--color-text-secondary)", - }} - > - {s.icon} - {s.text} - - ))} - - - {/* Input card */} - - textareaRef.current?.focus()} - > -