杠精派
派聪明
0/512

热门评论

再拖ddl就是🐷 2026年03月10日 20:58
引用原文:第二阶段:关键词过滤
@派聪明 这个第二阶段的关键词过滤是否是再knn召回的topK*30的基础上进行过滤的
点赞
回复7 取消回复
派聪明 2026年03月10日 20:59
是的,第二阶段的关键词过滤是在KNN召回的topK*30基础上进行的。 根据参考资料中的描述,混合检索包含三个阶段: 1. 第一阶段:KNN向量召回,获取topK*30个候选文档 2. 第二阶段:关键词过滤,在KNN召回结果基础上进行关键词匹配和权限过滤 3. 第三阶段:BM25重排序,对通过过滤的文档进行重新排序 在第二阶段,系统会对KNN召回的候选文档集进行关键词匹配(must条件)和权限过滤(filter条件),确保返回的文档既与查询关键词相关,又符合用户的访问权限。
点赞
回复 取消回复
展开剩余 6 条回复

238 条评论

A.Mars(水准) 2026年07月06日 12:31
引用原文:控制向量化的粒度
什么叫做“控制向量化的粒度”,是精度的意思吗?
点赞
回复 取消回复
2026年07月02日 10:54
@派聪明 数据怎么清洗,用户问题特别口语化怎么办,模型胡说八道的时候怎么兜底
点赞
回复1 取消回复
派聪明 2026年07月02日 10:54
这三个问题都是RAG系统落地中的核心痛点,咱们逐一拆解: ## 1. 数据怎么清洗? 在派聪明中,数据清洗主要靠 **Apache Tika** 来兜底。它能从 PDF、Word、Excel 等 1000+ 种格式中提取文本内容和元数据(作者、标题、创建时间等)。提取后的文本会进行 **分块处理**(目前采用 512 字符固定长度分块,后续计划引入语义分块),再调用豆包的 Embedding API 转成 2048 维向量,存入 Elasticsearch。清洗的核心原则是:**保持语义完整性** + 去除无效噪声(如空行、乱码等)。 ## 2. 用户问题口语化怎么办? 采用 **混合检索策略** 来解决。口语化问题的关键在于: - **语义检索(向量相似度)**:能理解"怎么提升效率"和"如何提高生产力"这种同义匹配,不依赖精确关键词 - **关键词检索(BM25)**:对专业术语、人名等精确匹配做兜底 两者加权融合(KNN 分数权重 0.2 + BM25 分数权重 1.0),再加上 **BM25 rescore 重排序**,即使问题很口语化,也能通过语义向量找到匹配的文档。 ## 3. 模型胡说八道怎么兜底? 这是 RAG 中的"幻觉"问题,派聪明用了多层策略: **① 提示词约束**:明确要求模型"必须依据参考文献回答,若无法回答则回复'无法回答'"。 **② 检索质量保障**:采用最高维度的豆包向量模型(2048 维),配合混合检索 + 相似度阈值过滤,确保只有高质量的上下文传给模型。 **③ 置信度评分**:综合 KNN 语义分数和 BM25 关键词分数计算最终得分,低置信度的结果不会作为上下文。 **④ 来源标注**:每个检索结果都标注来源和置信度,告诉模型信息的可靠性。 **⑤ 后续可扩展**:还可以引入 **Function Calling**(强制模型调用工具查外部数据,不靠记忆编造)、**结构化输出约束**(按 JSON Schema 输出,不确定的字段留空)、**多步验证**(让模型自检逻辑漏洞)等机制进一步防幻觉。
点赞
回复 取消回复
2026年07月02日 10:51
@派聪明 切片策略怎么设计,为什么这么设计
点赞
回复1 取消回复
派聪明 2026年07月02日 10:52
切片策略(Chunking Strategy)是 RAG 系统的基石,它直接决定了**检索的精准度**和**上下文的完整性**。 ## 我在派聪明中的设计:固定长度分块 + 智能分割 ### 核心参数 - **块大小(chunk_size)**:512 字符 - **重叠策略(Overlap)**:计划引入 20%-30% 的重叠窗口 ### 为什么这么设计? #### 1. 固定长度分块的优点 | 维度 | 说明 | |------|------| | **实现简单** | 计算资源消耗小,对中小团队非常友好 | | **性能稳定** | 块大小可控,向量化时间可预测 | | **易于调优** | 只需调整 chunk_size 一个参数就能快速迭代 | #### 2. 为什么选择 512 字符? - **语义完整性**:512 字符大约相当于中文的 200-300 字,能容纳一个完整段落或 2-3 个关键论点,语义较为完整 - **向量模型适配**:豆包 Embedding 模型在 512 token 左右有较好的表征效果 - **检索精度平衡**:块太大(如 1024)会导致信息混杂,降低检索精度;块太小(如 128)会导致上下文碎片化,丢失语义 #### 3. 智能分割逻辑(源码中的关键实现) ```java // 分段逻辑:先按段落切分,再按句子切分,最后按词切分 1. 按 `\n\n` 段落分割 — 保持段落的语义完整性 2. 段落 > chunkSize → 按句子边界分割(。!?;) 3. 单个句子 > chunkSize → 按词边界分割 ``` 这种 **"段落优先、句子次之、词兜底"** 的降级策略,最大限度地保留了文本的自然语义结构。 ## 下一版计划:混合策略 | 文档类型 | 切片策略 | 原因 | |---------|---------|------| | 结构化文档(技术手册、政策文件) | **语义分块**(按章节/主题) | 利用文档的结构信息,保持主题完整 | | 非结构化文档(聊天记录、邮件) | **固定长度分块** + 重叠窗口 | 处理稳定,避免语义分块失败 | **为什么引入重叠窗口?** ``` Chunk 1: [内容 A | 内容 B] Chunk 2: [内容 B | 内容 C] Chunk 3: [内容 C | 内容 D] ``` 重叠 20%-30% 能有效解决**跨块信息断裂**问题。例如 "沉默王二吹了一个...(换行)...牛逼",没有重叠的话这两句会被分到不同块,检索时可能丢失关键语义。 ## 总结:设计原则 1. **简单优先**:先用固定长度快速验证业务价值,再按需优化 2. **语义完整性**:优先按段落/句子边界切分,而非硬切 3. **信息不丢失**:通过重叠窗口保证跨块信息的可检索性 4. **按文档类型差异化**:结构化文档用语义分块,非结构化文档用固定长度
点赞
回复 取消回复
2026年07月02日 10:50
@派聪明 召回率低怎么优化
点赞
回复1 取消回复
派聪明 2026年07月02日 10:50
召回率低是RAG系统很常见的痛点,可以从以下几个维度系统性地优化: ## 1. 优化分块策略 **增加重叠窗口**:当前派聪明采用512字符的固定长度分块,可以在相邻chunk之间设置20%-30%的重叠区域(如每次移动350-400字符),防止关键信息被拦腰切断。 **语义分块替代固定分块**:下一版可以按段落、章节、主题等语义边界切分,确保每个chunk包含相对完整的语义信息。对结构化文档(技术手册、政策文件)优先用语义分块,对非结构化内容(聊天记录)用固定分块兜底。 ## 2. 提升向量质量 **使用更高维度的Embedding**:派聪明选用豆包2048维向量,相比384维能更精细地区分语义差别,提升召回命中率。 **向量模型版本管理**:定期评估向量模型效果,升级后对历史向量进行增量重新向量化,避免语义漂移导致召回退化。 ## 3. 实现混合检索(最关键) 单一向量检索召回有限,**派聪明的三阶段策略值得借鉴**: - **阶段一**:KNN向量召回(扩大候选集,如topK×30) - **阶段二**:关键词+权限过滤(保证精确匹配和专业术语命中) - **阶段三**:BM25重排序(权重KNN占0.2、BM25占1.0),提升最终排序质量 ## 4. 引入重排序(Re-ranking) **RRF(倒数排名融合)**:对向量检索和关键词检索两个列表,计算 `1/(k+rank1) + 1/(k+rank2)` 进行融合排序,让在多个列表中排名都靠前的文档优先。 **大模型重排**:将Top N个候选块连同查询提交给LLM,让模型按相关性重新排序。 ## 5. 多路召回与扩大候选集 - 适当调大KNN的 `k` 和 `numCandidates` 参数 - 增加召回策略的多样性(如不同分块粒度、不同模型版本) - 对模糊查询做查询扩展(Query Expansion) ## 6. 排查权限过滤误杀 检查 `OrgTagAuthorizationFilter` 等权限过滤逻辑,确保用户权限配置正确,避免因权限匹配不到而丢掉了本该召回的文档。 --- **建议优先级**:先做混合检索 + 重叠窗口(改动小、见效快),再逐步引入语义分块和大模型重排。
点赞
回复 取消回复
zsxq_01711 2026年06月23日 14:50
引用原文: Function Call 模型
@派聪明 解释Function Call 模型
点赞
回复1 取消回复
派聪明 2026年06月23日 14:50
**Function Call(函数调用)** 是大型语言模型(LLM)的一项关键技术。简单来说,它允许 AI模型理解用户的意图,并自动生成结构化的参数来调用外部工具或函数,从而突破纯文本生成的限制,实现与真实世界的交互。 **1.核心机制** 与 RAG(仅赋予模型检索数据的能力)不同,Function Calling赋予了模型“使用工具”的能力。它的工作流程通常如下: * **定义函数**:预先向 LLM描述可用函数的用途以及输入参数格式(JSON Schema)。 * **意图识别与参数生成**:当用户提问时,LLM 会分析请求,判断是否需要调用某个函数。如果需要,它会自动生成调用该函数所需的结构化参数(如提取出“北京”、“摄氏度”等关键信息)。 * **执行与返回**:系统接收 LLM 生成的参数并真实执行该函数(例如调用天气 API、查询数据库),然后将获取到的真实数据交回给 LLM。 * **生成最终回答**:LLM 结合外部工具返回的结果,生成最终的自然语言回复给用户。 **2. 应用场景与意义** 通过 Function Call,模型可以调用查天气、发邮件、数学计算、查询实时股票等外部 API。这项技术最早由 OpenAI 在2023 年6 月发布,它使得 AI 能够从“被动生成内容”转变为“主动调用工具”,是当前构建 AI **智能体** 和复杂自动化系统的核心基石。
点赞
回复 取消回复
zsxq_01711 2026年06月23日 14:34
引用原文:RAG 并不会直接把问题扔给 LLM
@派聪明 将会话进行分层记忆会不会更好,列一下具体方案
点赞
回复1 取消回复
派聪明 2026年06月23日 14:34
将RAG系统的会话进行**分层记忆(Layered Memory)**确实是一种更好的架构设计。当前的RAG往往只简单保留最近几轮对话,容易遗忘早期重要信息或塞入过多无效信息导致Token浪费。 结合参考资料,以下是为RAG系统设计的**会话分层记忆具体方案**: **第一层:工作记忆(短期/滑动窗口)** * **方案设计**:利用 **Redis**存储当前活跃的会话。设置一个滑动窗口(如只保留最近3~10轮对话,或按 Token 数动态截断),并设置较短的有效期(如7 天过期)。 * **核心作用**:应对即时上下文依赖,专门解决**“指代消解”**问题(如用户后续问的“它”、“这个”)。系统重点关注这最近几轮对话,结合距离最近的关键实体,快速理解当前意图。 **第二层:情景记忆(中期/摘要压缩)** * **方案设计**:当对话超出工作记忆的滑动窗口时,后台触发大模型(如 DeepSeek)对即将被截断的历史对话进行**“摘要提取”**。将长对话压缩成一小段包含核心实体和关键事实的总结,继续保存在 Redis 或常规数据库中。 * **核心作用**:在控制传给 LLM 的 Token 数量、避免上下文窗口受限的同时,保留当前对话会话的长期来龙去脉。 **第三层:语义记忆(长期/知识沉淀)** * **方案设计**:将多轮对话中产生的高价值信息、用户偏好或确认的事实,提取成结构化的文本块。利用 **Embedding API(如豆包模型)** 将其向量化,永久存入 **Elasticsearch** 向量数据库中。 * **核心作用**:实现跨会话的长期记忆。当用户在未来开启新会话时,系统通过**混合检索(向量+关键词)**召回这些历史长期记忆,作为扩展上下文丢给 LLM。 **加分项:分层权限控制隔离** * 在上述每一层记忆的读取和检索过程中,均严格串联**权限过滤器**。系统需根据用户的组织标签,确保无论是即时聊天记录还是沉淀进知识库的长期记忆,都绝对不会发生跨租户的数据越权访问。
点赞
回复 取消回复
2026年06月16日 13:57
引用原文:具体的算法是这样的
@派聪明 具体讲一下混合检索的整个流程,最好举个具体的例子
点赞
回复3 取消回复
派聪明 2026年06月16日 13:58
结合参考资料,**混合检索**主要是将“基于向量相似度的语义检索”和“传统的关键词检索(BM25)”结合起来,取长补短,以提高召回率和准确性。 具体的算法流程采用了**加权融合**与**三阶段检索**,具体流程如下: **1.权重设置**:系统会分别为两种检索方式设置权重(例如:语义检索权重0.7,关键词检索权重0.3)。 **2. 三阶段检索执行(以 Elasticsearch 为例)**: * **第一阶段(KNN 向量召回)**:将用户查询向量化,进行 KNN 向量检索,找出语义最相似的文档。 * **第二阶段(关键词与权限过滤)**:对召回结果执行传统的全文关键词匹配,同时**强制加入权限控制**(确保只检索用户本人、公开、或用户所属组织有权限访问的文档)。 * **第三阶段(BM25 重排序)**:对过滤后的候选结果使用 BM25算法进行重新打分。 **3. 加权计算得分**:按照公式 `最终分数 = (KNN向量分数 ×0.2) + (BM25关键词分数 ×1.0)`计算综合得分并排序输出。 --- **💡具体的例子:** 假设用户提问:**“如何提升工作效率?”**知识库中只有两篇文档: * **文档A**:标题《提高生产力的十个方法》,正文中根本没有“工作效率”四个字。 * **文档B**:标题《年度总结》,正文中恰好有一句“今年的工作效率基本没变”。 **检索流程演示:** 1. **语义检索(理解意图)**:虽然文档A没有匹配上“工作效率”这个词,但向量模型理解“提升工作效率”和“提高生产力”语义高度相似,因此给文档A打了高分(假设 **0.8分**)。 2. **关键词检索(精准匹配)**:文档B因为包含了“工作效率”这个精确词汇,在传统BM25打分中拿到了高分(假设 **0.6分**)。 3. **加权融合**:假设按照算法配置的融合权重进行计算: * 文档A最终得分:依赖较强的语义相关性,综合得分较高。 * 文档B最终得分:`0.6(分数) ×0.3(关键词权重) =
点赞
回复 取消回复
展开剩余 2 条回复
  ᶘ ᵒᴥᵒᶅ   2026年06月15日 22:38
引用原文:5.如何解决向量检索中的"语义漂移"问题?
语义偏移是啥
点赞
回复 取消回复
JIE 2026年05月19日 09:43
@派聪明 请问权限过滤怎么做的
点赞
回复 取消回复
wangx 2026年05月13日 19:30
引用原文:识别对话中的关键实体(人名、地名、概念等),建立实体库
@派聪明 这里具体是怎样实现的?
点赞
回复 取消回复

目录