[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-76335":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":14,"starSnapshotCount":14,"syncStatus":13,"lastSyncTime":25,"discoverSource":26},76335,"xiaoyan-ai-dev-assistant","ZJunCher\u002Fxiaoyan-ai-dev-assistant","ZJunCher","基于 RAG 混合检索与多轮记忆的 AI 研发助手，支持团队知识问答，也适合新手学习 RAG 应用开发。",null,"Java",107,6,2,0,1,14,2.54,false,"main",true,[],"2026-06-12 02:03:41","# 智能效研 AI 研发助手\n\n智能效研 AI 研发助手（`xiaoyan-ai-dev-assistant`）是一个面向团队研发提效场景的 RAG 智能问答知识库系统。项目用于集中管理团队项目资料、研发文档、开发规范、新人培训材料和常见问题，帮助成员快速检索知识、理解项目背景、减少重复沟通。\n\n系统基于 Spring Boot 和 LangChain4j 构建，支持多格式文档解析、结构感知分块、语义分块、向量检索、BM25 关键词检索、Query 重写、多轮会话记忆和长期记忆主动录入。\n\n## 功能特性\n\n- 文档知识入库：支持 PDF、Word、Markdown、TXT 等文档上传，基于 Apache Tika 提取文本。\n- 智能分块策略：结合结构特征识别、策略路由、结构感知分块、语义分块和混合分段处理。\n- RAG 混合检索：结合 Pinecone 向量检索与内存 BM25 关键词检索，并支持 RRF 融合、去重和重排序。\n- 查询重写策略：结合短期记忆对用户问题进行上下文补全，支持多意图拆分和关键词扩展。\n- 短期记忆：基于 Redis 保存会话上下文，采用 32K Token 阈值触发和 overlap 摘要压缩机制。\n- 长期记忆：支持用户主动录入长期记忆，并按 userId 隔离召回。\n- 流式问答：提供 SSE 风格的流式聊天接口，前端可实时展示生成结果。\n- 轻量前端：内置聊天、文档上传、文档列表、删除文档和长期记忆录入页面。\n\n## 技术栈\n\n- 后端框架：Spring Boot 3.5\n- 大模型开发框架：LangChain4j\n- 大模型：Qwen-Plus\n- 向量模型：text-embedding-v3\n- 向量数据库：Pinecone\n- 文档解析：Apache Tika\n- 关键词检索：内存 BM25\n- 中文分词：HanLP\n- 缓存与短期记忆：Redis\n- 数据存储：MySQL\n- ORM：MyBatis\n- 前端：Vue 3 CDN + 原生 HTML\u002FCSS\n\n## 系统流程\n\n### 文档入库流程\n\n1. 用户上传文档。\n2. 后端使用 Apache Tika 提取正文文本。\n3. 对文本进行清洗，去除重复空白和无效字符。\n4. 分析标题密度、段落长度、格式标记密度等结构特征。\n5. 自动选择结构分块、语义分块或混合分块策略。\n6. 将文档和 chunk 元数据写入 MySQL。\n7. 将 chunk 文本向量化后写入 Pinecone 的 `knowledge` namespace。\n8. 重建内存 BM25 索引。\n\n### 在线问答流程\n\n1. 用户发送问题。\n2. 根据 `userId + sessionId` 读取 Redis 中的短期记忆。\n3. 使用 LLM 对问题进行 Query 重写、多意图拆分和关键词扩展。\n4. 从 Pinecone 的 `memory` namespace 召回长期记忆。\n5. 使用向量检索和 BM25 检索召回知识库片段。\n6. 对候选结果进行融合、去重和重排序。\n7. 构建 Prompt，融合原问题、重写结果、短期记忆、长期记忆和 RAG 片段。\n8. 调用 Qwen-Plus 生成流式回答。\n9. 将本轮问答写入 Redis，并在超过阈值时触发摘要压缩。\n\n## 项目结构\n\n```text\nsrc\u002Fmain\u002Fjava\u002Fcom\u002Fxiaoyan\u002Faiassistant\n├── chat          # 聊天、Prompt 构建、Query 重写与多意图分析\n├── config        # 应用配置、向量库配置\n├── controller    # REST API\n├── document      # 文档解析、清洗、分块、入库\n├── memory        # 短期记忆、长期记忆\n└── retrieval     # BM25、向量检索、混合检索、去重、重排序\n```\n\n## 环境要求\n\n- JDK 17+\n- Maven 3.8+\n- MySQL 8+\n- Redis 6+\n- Pinecone 账号和 index（可选，本地默认使用内存向量库）\n- 阿里百炼 DashScope API Key\n\n## 快速开始\n\n### 1. 创建数据库\n\n默认数据库名为 `team_knowledge`，可按需修改：\n\n```sql\nCREATE DATABASE team_knowledge DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n```\n\n执行初始化脚本：\n\n```text\nsrc\u002Fmain\u002Fresources\u002Fschema.sql\n```\n\n如果是从旧版本升级长期记忆 userId 隔离能力，再执行：\n\n```text\nsrc\u002Fmain\u002Fresources\u002Fschema-user-memory-migration.sql\n```\n\n### 2. 配置环境变量\n\n可以参考 `.env.example`：\n\n```bash\nAPI_KEY=你的DashScopeApiKey\n\nMYSQL_URL=jdbc:mysql:\u002F\u002Flocalhost:3307\u002Fteam_knowledge?serverTimezone=Asia\u002FShanghai&useSSL=false&allowPublicKeyRetrieval=true\nMYSQL_USERNAME=root\nMYSQL_PASSWORD=你的数据库密码\n\nREDIS_HOST=localhost\nREDIS_PORT=6379\n\nPINECONE_ENABLED=false\nPINECONE_API_KEY=\nPINECONE_INDEX=team-knowledge\n```\n\n本地开发时，`PINECONE_ENABLED=false` 会使用内存向量库，便于启动和测试。生产或演示环境需要真实向量检索时，再开启 Pinecone。\n\n### 3. 启动项目\n\n```bash\nmvn spring-boot:run\n```\n\n启动后访问：\n\n```text\nhttp:\u002F\u002Flocalhost:8080\n```\n\n### 4. 运行测试\n\n```bash\nmvn test\n```\n\n## 接口说明\n\n### 文档接口\n\n上传文档：\n\n```http\nPOST \u002Fapi\u002Fdocuments\nContent-Type: multipart\u002Fform-data\n```\n\n参数：\n\n```text\nfile: 文档文件\n```\n\n查询文档列表：\n\n```http\nGET \u002Fapi\u002Fdocuments\n```\n\n删除文档：\n\n```http\nDELETE \u002Fapi\u002Fdocuments\u002F{id}\n```\n\n### 聊天接口\n\n流式问答：\n\n```http\nPOST \u002Fapi\u002Fchat\u002Fstream\nContent-Type: application\u002Fjson\nAccept: text\u002Fevent-stream\n```\n\n请求示例：\n\n```json\n{\n  \"userId\": \"default\",\n  \"sessionId\": \"session-001\",\n  \"message\": \"团队 Java 开发规范里对异常处理有什么要求？\"\n}\n```\n\n### 长期记忆接口\n\n新增长期记忆：\n\n```http\nPOST \u002Fapi\u002Fmemories\nContent-Type: application\u002Fjson\n```\n\n请求示例：\n\n```json\n{\n  \"userId\": \"default\",\n  \"title\": \"代码生成偏好\",\n  \"content\": \"我主要使用 Java 开发，生成代码时优先使用 Java。\",\n  \"tags\": \"preference,java\"\n}\n```\n\n查询长期记忆：\n\n```http\nGET \u002Fapi\u002Fmemories?userId=default\n```\n\n## 关键配置\n\n主要配置位于 `src\u002Fmain\u002Fresources\u002Fapplication.yml`。\n\n```yaml\napp:\n  pinecone:\n    enabled: false\n    knowledge-namespace: knowledge\n    memory-namespace: memory\n  rag:\n    vector-top-k: 8\n    bm25-top-k: 8\n    final-top-k: 5\n    candidate-top-k: 30\n    semantic-dedup-threshold: 0.9\n  memory:\n    max-token-budget: 32000\n    recent-token-budget: 24000\n    summarize-overlap-ratio: 0.5\n    ttl-days: 7\n```\n\n说明：\n\n- `max-token-budget`：短期记忆总预算，超过后触发摘要压缩。\n- `recent-token-budget`：压缩后保留的最新原文对话预算。\n- `summarize-overlap-ratio`：摘要时带入窗口内较早一部分内容，增强上下文衔接。\n- `semantic-dedup-threshold`：语义去重阈值，用于过滤高度相似 chunk。\n- `reranker.enabled`：是否启用外部 Reranker 服务，本地默认关闭。\n","智能效研 AI 研发助手是一个基于 RAG 混合检索与多轮记忆的系统，旨在帮助团队高效管理和查询项目资料、研发文档等知识。该项目采用 Spring Boot 和 LangChain4j 构建，支持多种格式文档解析、结构感知分块、语义分块及向量检索等功能，并结合了 Pinecone 向量数据库和 BM25 关键词检索技术以实现精准的知识检索。此外，它还具备短期与长期记忆功能，能够记住用户的会话历史并主动学习新信息。适用于需要频繁查阅技术文档、进行内部知识共享的企业或组织，以及希望探索 RAG 技术应用的学习者。","2026-06-11 03:54:56","CREATED_QUERY"]