Go
-Stock
介绍
分析报告
项目文档
赞助支持
人生模拟
K线王者
GitHub
← 返回文档列表
知识库与长期记忆功能说明
功能说明
浏览 116
更新 2026-08-26 17:36
> 正在渲染文档内容…
# 知识库与长期记忆功能说明 ## 功能概述 go-stock 内置两套互补的「记忆」体系,让 AI 不仅能获取实时行情,还能调用你沉淀的私有知识与历史问答经验: | 体系 | 性质 | 内容来源 | 检索方式 | |------|------|---------|---------| | **知识库(Knowledge Base)** | 主动维护的私有文档库 | 你上传的研报、财报、笔记、规则文档等 | 按知识库名检索 / 跨所有库统一检索 | | **长期记忆(Long-Term Memory)** | 自动沉淀的历史问答经验 | AI 历次分析问答的自动归档 | 语义召回相关历史问答 | 两者底层共享同一套向量库(chromem-go,纯 Go 嵌入式,零 CGO 依赖),但用途分明: - 知识库 = **你喂给 AI 的资料**(文档型,可管理) - 长期记忆 = **AI 自己的经验积累**(问答型,自动生长) 此外提供「知识库问答」入口,一次调用即跨所有知识库 + 长期记忆统一检索,再由 Agent 综合回答。 ## 架构与存储 ### 存储位置 所有向量数据与归档报告均存放在程序所在目录的 `memory/` 下: ``` <程序目录>/memory/ ├── .vectorstore/ # 向量库(chromem-go 持久化) │ ├── .kb_meta.json # 知识库元信息(各 KB 绑定的 AI 服务 + embedding 模型) │ └── <chromem 内部存储> # 各 KB collection + qa_history collection └── 2026-01-10/ # 按日期归档的分析报告 └── 2026-01-10_143022_xxxx.md ``` ### 关键设计 - **每个知识库独立绑定 AI 服务 + Embedding 模型**:不同 KB 可用不同 embedding(如中文用 bge-m3,英文用 text-embedding-3-small),检索时按 KB 元信息解析对应的 embedding 函数 - **长期记忆单独 collection**:`qa_history`,与自定义 KB 隔离,避免历史问答污染文档检索结果 - **embedding 函数统一构造**:`buildEmbeddingFunc` 按 AI 服务的 OpenAI 兼容接口调用 embedding API ## 知识库功能详解 ### 多知识库管理 你可以创建多个相互独立的知识库,按主题分库管理(例如「财报知识」「行业研报」「交易规则」「个股资料」)。每个知识库: - 独立的 collection(向量互不干扰) - 独立绑定 AI 服务与 embedding 模型 - 独立的文档列表、向量化状态、知识图谱 进入「研究中心 → 知识库管理」即可创建、删除、配置知识库。 ### 文件导入与向量化 #### 支持的文件格式 | 格式 | 支持 | 说明 | |------|------|------| | `.txt` | ✅ | 直接读取 UTF-8 文本 | | `.md` / `.markdown` | ✅ | 按 markdown 文本处理 | | `.pdf` / `.docx` / `.doc` | ❌ | 请先转换为 .txt 或 .md(后续版本将支持) | #### 向量化流程 1. 选择知识库,点击「上传文件」或「添加文档」 2. 系统读取文件内容,按语义分块(`text_chunker.go`) 3. 用该 KB 绑定的 embedding 模型对每个分块生成向量 4. 入库到该 KB 的 collection 5. 单个文件失败不影响其他文件继续导入 向量化是异步任务,上传后可在列表中查看实时进度(向量化中 / 已完成 / 失败)。 ### 检索 #### 单知识库检索 `SearchKnowledgeBase(kbName, query, topK)`:在指定知识库内语义检索,返回最相关的 Top-K 分块(含内容、来源文件、相似度、metadata)。 #### 跨知识库统一检索 `SearchAllKnowledge(query, topK)`:一次调用并发检索**所有自定义知识库 + 长期记忆**,合并后按相似度全局降序重排,返回带来源标签的统一结果。 - 各源取 `topK*2` 条用于全局重排,最终截断到 topK - 单个源失败不影响其他源(容错) - 结果标注来源类型:`knowledge_base`(知识库)/ `long_term_memory`(历史经验) ### 知识图谱 部分知识库可构建知识图谱(`BuildKBGraph`),将文档中的实体与关系结构化,便于可视化与关联检索。图谱构建同样为异步任务,构建完成后可在界面查看。 ### Agent 工具 知识库能力以 Agent 工具形式暴露,AI 在对话中可自主调用: | 工具 | 参数 | 用途 | |------|------|------| | `ListKnowledgeBases` | 无 | 列出所有知识库名称 | | `SearchKnowledgeBase` | `kb_name`, `query`, `top_k` | 在**指定**知识库内检索 | | `SearchAllKnowledge` | `query`, `top_k` | **跨所有知识库 + 长期记忆**统一检索 | 工具注册于 `GetAllTools` / `getToolsByQuestion`,在主聊天、飞书机器人、定时任务等所有 Agent 入口均可使用。 ## 长期记忆功能详解 ### 自动归档机制 长期记忆**无需手动维护**——AI 每次完成分析问答后,自动将「问题 + 回答 + 模式 + 日期 + 报告路径」归档: - 触发点:`archiveAnalysisReport`(react / plan_execute / deepagents 模式下,Agent 回答完成后调用) - 归档内容写入 `memory/<日期>/<时间戳>.md`(便于人工查阅全文) - 同时调用 `AddMemory` 异步入库到 `qa_history` collection(不阻塞主流程) - 文档 ID 采用 `日期+时间戳+chunk序号`,同一问题多次归档不会互相覆盖 ### 自进化检索 每次新对话时,Agent 会自动从长期记忆中检索与当前问题相关的历史问答(`buildSelfEvolutionPrompt` → `SearchRelevant`),作为背景经验注入系统提示词。这意味着: - AI 能「记住」你之前问过什么、它之前怎么回答的 - 相似问题不会每次从零分析,可参考历史结论 - 历史报告路径一并存储,必要时可追溯全文 ### 配置 长期记忆需要配置一个 AI 服务用于 embedding。进入「知识库管理 → 长期记忆检索」Tab,可: - 查看 long-term memory 配置的 AI 服务 - 修改绑定的 AI 服务(`SetLongTermMemoryAiConfigId`) - 查看记忆库信息(文档数等) - 检索测试(语义召回历史问答) ## 知识库问答(统一检索 + Agent 综合回答) 「知识库管理 → 知识库问答」Tab 提供一键式 RAG 问答体验: ### 工作流程 ``` 输入问题 + TopK + AI 服务 + Agent 模式 │ ├─① 统一检索:SearchAllKnowledge │ 并发检索所有 KB + qa_history │ 全局相似度重排 → 展示命中片段(按来源着色) │ └─② Agent 综合回答:ChatWithAgentKBQA 将命中片段注入系统提示词 Agent 基于检索内容生成回答(流式) 支持 Markdown 渲染(MdPreview) ``` ### 界面特性 - **左右布局**:检索命中片段与 Agent 回答并排展示,均可点击标题折叠隐藏 - **来源标签**:每条命中标注「知识库 / 历史经验」、KB 名、来源文件、相似度 - **Markdown 渲染**:Agent 回答用 `MdPreview` 组件渲染,支持标题、列表、代码块、表格等 - **思考过程**:若 Agent 输出推理过程,单独弱化展示 - **可中止**:回答过程中可随时中止 ### 与主聊天的区别 | 维度 | 知识库问答 Tab | 主聊天 | |------|--------------|--------| | 检索 | 先统一检索展示,再注入回答 | Agent 自主决定是否调检索工具 | | 上下文 | 每次独立(无历史记忆污染) | 可携带对话历史 | | 透明度 | 命中片段可见、可控 | 检索过程不可见 | | 归档 | 回答仍会归档到长期记忆 | 同样归档 | ## 使用说明 ### 一、配置 AI 服务 知识库与长期记忆都需要 embedding 服务。先在「AI 服务管理」中配置至少一个支持 embedding 的 AI 服务(如 OpenAI text-embedding-3-small、硅基流动 bge-m3 等)。 ### 二、创建知识库并导入文档 1. 进入「研究中心 → 知识库管理」 2. 点击「新建知识库」,输入名称(如「白酒财报」) 3. 在新建/配置时绑定 AI 服务与 embedding 模型 4. 选中该知识库,点击「上传文件」,选择 `.txt` / `.md` 文件 5. 等待向量化完成(状态栏显示进度) ### 三、检索测试 - **单库测试**:在知识库列表的抽屉中找到「检索测试」卡片,输入查询语句查看命中 - **长期记忆测试**:切换到「长期记忆检索」Tab,输入查询查看历史问答召回 - **统一检索**:切换到「知识库问答」Tab,输入问题点「统一检索」 ### 四、让 AI 在对话中调用知识库 无需手动操作——只要知识库已建立,Agent 在主聊天中会根据问题自主判断是否调用 `SearchKnowledgeBase` / `SearchAllKnowledge` 工具。例如你问「贵州茅台 2024 年营收情况」,若「白酒财报」知识库中有相关内容,Agent 会自动检索并引用。 ### 五、知识库问答一键问答 1. 切换到「知识库问答」Tab 2. 输入问题(如「对比白酒板块龙头企业近三年毛利率变化」) 3. 选择 AI 服务(对话型)与 Agent 模式(复杂分析建议「规划」或「DeepAgents」) 4. 设置 TopK(建议 5~10) 5. 点击「检索并回答」:先看检索命中的片段,再读 Agent 综合回答 ### 六、配置长期记忆 1. 切换到「长期记忆检索」Tab 2. 确认绑定的 AI 服务(用于 embedding 历史问答) 3. 随着日常使用,长期记忆会自动积累;可在此 Tab 检索验证 ## 应用场景 ### 场景一:个股深度研究 **痛点**:每次分析一只股票都要重新搜集财报、研报,AI 无法复用你已整理的资料。 **方案**: 1. 建立知识库「个股资料」,上传该股的历年年报、研报、公告(转成 .md) 2. 建立知识库「行业研报」,上传行业分析文档 3. 在主聊天问「该公司未来三年的增长驱动力」,Agent 自动检索这两个库综合分析 4. 分析结论自动归档到长期记忆,下次问相关问题时 AI 会参考 ### 场景二:交易规则与策略沉淀 **痛点**:你有自己的一套选股逻辑、止损规则,但 AI 不知道,每次都要重新说明。 **方案**: 1. 建立知识库「我的交易规则」,把你的选股条件、仓位管理、止损策略写成 .md 上传 2. 问 Agent「按我的规则,当前 XXX 是否符合买入条件」 3. Agent 检索你的规则 + 实时行情,给出符合你个人体系的判断 ### 场景三:跨知识库综合问答 **痛点**:问题涉及多个知识库(如「对比 A 股和 B 股的财务表现」),逐个检索效率低。 **方案**: 1. 在「知识库问答」Tab 输入问题 2. `SearchAllKnowledge` 一次检索所有 KB + 历史经验,全局重排 3. Agent 基于跨库检索内容综合回答,并标注每条结论的来源 ### 场景四:经验积累与自进化 **痛点**:AI 每次分析都是「从零开始」,无法复用历史判断。 **方案**: 1. 日常使用中,Agent 的每次分析自动归档到长期记忆 2. 下次问相似问题时,`buildSelfEvolutionPrompt` 自动召回相关历史问答注入 3. AI 可参考之前的结论与逻辑,给出更连贯的分析 4. 在「长期记忆检索」Tab 可回溯任意历史问答与报告全文 ### 场景五:团队知识共享 **痛点**:团队的研究成果散落在各人电脑,无法被 AI 调用。 **方案**: 1. 将团队沉淀的行业框架、个股模板、复盘笔记整理成 .md 2. 统一导入知识库(可按「行业」「个股」「策略」分库) 3. 团队成员的 AI 对话都能检索这些共享知识 4. 高质量问答自动进入长期记忆,形成团队经验资产 ### 场景六:飞书/定时任务的智能问答 **痛点**:飞书机器人或定时任务也需要调用私有知识。 **方案**: - 知识库工具注册于 `GetAllTools`,飞书机器人、定时任务等所有 Agent 入口均可自主调用 - 例如定时任务「每日盘后总结」可让 Agent 先检索「交易规则」库中的复盘模板,再结合当日行情生成总结 ## 常见问题 ### Q: 为什么检索结果相似度不高? - 检查知识库绑定的 embedding 模型是否与文档语言匹配(中文文档建议用 bge-m3 等中文优化模型) - 确认文档已完成向量化(状态为「已完成」) - 调整查询语句,用更具体的关键词 - 适当增大 TopK ### Q: 知识库问答和主聊天有什么区别,该用哪个? - **知识库问答**:明确知道答案在知识库里,想看检索过程 + 基于 knowledge 的回答 → 用此 Tab - **主聊天**:综合分析、需调实时数据工具、或日常问答 → 用主聊天,Agent 会自主决定是否检索知识库 ### Q: 长期记忆会无限增长吗?会影响性能吗? - 长期记忆随使用自动积累。chromem-go 是嵌入式向量库,检索性能在万级文档量级内无明显衰减 - 如需清理,可删除 `memory/.vectorstore/` 下对应 collection 数据后重启 ### Q: 不同知识库可以用不同的 embedding 模型吗? 可以。每个 KB 独立绑定 AI 服务 + embedding 模型,检索时按 KB 元信息解析对应 embedding 函数。但跨库统一检索时,不同模型的相似度并非严格可比(作为粗排依据足够)。 ### Q: 上传的文档会被修改吗? 不会。系统只读取文件内容进行分块与向量化,原始文件不受影响。归档的分析报告另存于 `memory/<日期>/` 目录。