杠精派
派聪明
0/512

热门评论

你好 2025年11月23日 16:59
@派聪明 没有ground truth,如何评估派聪明当前模型的召回率和精确率?
1
回复1 取消回复
派聪明 2025年11月23日 16:59
在没有ground truth的情况下,可以通过以下方法评估派聪明的召回率和精确率: 1. **用户反馈机制**:在检索结果后添加"顶/踩"按钮,收集用户对相关性的直接评价,计算点击率作为相关性指标 2. **A/B测试对比**:将不同算法(如不同融合权重、分块策略)分组测试,比较各组用户满意度差异 3. **相关性自评估**:使用LLM对检索结果进行自评,设计提示词让模型判断每个检索结果与查询的相关性 4. **业务指标监控**: - 对话完成率:用户是否基于检索结果完成对话 - 查询澄清率:用户是否需要多次提问才能获得答案 - 转化率:检索结果是否**用户完成预期操作 5. ***样人工评估**:定期*样**,让标注员评估检索质量,建立评估标准 6. **间接指标分析**: - 平均查看文档数 - 会话时长 - 重复查询率 这些方法虽然不如有ground truth精确,但能有效反映系统在实际使用中的表现,帮助持续优化检索算法。
1
回复 取消回复

10 条评论

阿白 2026年01月22日 14:45
引用原文:生成这块,我们集成了 DeepSeek 大语言模型,通过 DeepSeekClient 来调用 API。这里有个技术细节就是我们支持流式响应,用户不用等到整个回答生成完才能看到结果,而是可以实时看到 AI 的回答过程,体验会好很多。 整个对话流程是通过 ChatHandler 来协调的,它会先调用检索服务找到相关文档,然后把这些文档作为上下文传给大语言模型,最后把生成的回答通过 WebSocket 实时推送给用户。
@派聪明 websocket可以实现流式响应吗?不是sse 吗?
点赞
回复 取消回复
阿白 2026年01月22日 14:45
引用原文:生成这块,我们集成了 DeepSeek 大语言模型,通过 DeepSeekClient 来调用 API。这里有个技术细节就是我们支持流式响应,用户不用等到整个回答生成完才能看到结果,而是可以实时看到 AI 的回答过程,体验会好很多。 整个对话流程是通过 ChatHandler 来协调的,它会先调用检索服务找到相关文档,然后把这些文档作为上下文传给大语言模型,最后把生成的回答通过 WebSocket 实时推送给用户。
@派聪明 websocket可以实现流式响应吗?不是sse 吗?
点赞
回复 取消回复
阿白 2026年01月22日 14:45
引用原文:生成这块,我们集成了 DeepSeek 大语言模型,通过 DeepSeekClient 来调用 API。这里有个技术细节就是我们支持流式响应,用户不用等到整个回答生成完才能看到结果,而是可以实时看到 AI 的回答过程,体验会好很多。 整个对话流程是通过 ChatHandler 来协调的,它会先调用检索服务找到相关文档,然后把这些文档作为上下文传给大语言模型,最后把生成的回答通过 WebSocket 实时推送给用户。
@派聪明 websocket可以实现流式响应吗?不是sse 吗?
点赞
回复1 取消回复
派聪明 2026年01月22日 14:47
是的,WebSocket完全可以实现流式响应,并且与SSE(Server-Sent Events)各有优势。 **WebSocket实现流式响应的特点:** - 全双工通信,支持服务器和**端双向数据传输 - 建立连接后可持续通信,适合复杂交互场景 - 可以传输任意类型的数据(文本、二进制等) - 在RAG系统中,如果需要**端向服务器发送控制指令(如停止生成、请求重试等),WebSocket更合适 **SSE与WebSocket对比:** - **SSE**:单向通信(服务器→**端),基于HTTP,协议简单,默认支持自动重连,适合简单的事件推送 - **WebSocket**:双向通信,基于TCP,功能更强大,协议较复杂 **选择依据:** 在RAG系统中,如果主要是服务器推送AI生成内容,SSE可能更轻量;但如果需要**端交互(如用户打断生成、请求更多解释等),WebSocket更合适。从参考资料看,他们选择WebSocket可能是考虑了系统可能需要的双向交互能力。
点赞
回复 取消回复
阿白 2026年01月22日 14:45
引用原文:生成这块,我们集成了 DeepSeek 大语言模型,通过 DeepSeekClient 来调用 API。这里有个技术细节就是我们支持流式响应,用户不用等到整个回答生成完才能看到结果,而是可以实时看到 AI 的回答过程,体验会好很多。 整个对话流程是通过 ChatHandler 来协调的,它会先调用检索服务找到相关文档,然后把这些文档作为上下文传给大语言模型,最后把生成的回答通过 WebSocket 实时推送给用户。
@派聪明 websocket可以实现流式响应吗?不是sse 吗?
点赞
回复 取消回复
阿白 2026年01月22日 14:45
引用原文:生成这块,我们集成了 DeepSeek 大语言模型,通过 DeepSeekClient 来调用 API。这里有个技术细节就是我们支持流式响应,用户不用等到整个回答生成完才能看到结果,而是可以实时看到 AI 的回答过程,体验会好很多。 整个对话流程是通过 ChatHandler 来协调的,它会先调用检索服务找到相关文档,然后把这些文档作为上下文传给大语言模型,最后把生成的回答通过 WebSocket 实时推送给用户。
@派聪明 websocket可以实现流式响应吗?不是sse 吗?
点赞
回复1 取消回复
派聪明 2026年01月22日 14:46
WebSocket确实可以实现流式响应,而且与SSE各有优势: **WebSocket与SSE的区别:** - **WebSocket**:全双工通信协议,支持双向实时数据传输,连接建立后可持续发送消息 - **SSE**:单向通信协议,仅服务器向**端推送数据,基于HTTP协议更轻量 **选择WebSocket的原因:** 1. **双向交互需求**:RAG系统可能需要用户发送中断指令、调整参数等双向操作 2. **连接稳定性**:WebSocket在长连接管理上更可*,适合长时间会话 3. **扩展性**:为未来功能扩展预留空间,如实时协作、多用户同步等 4. **团队技术栈**:从上下文看团队更熟悉WebSocket实现 **实际应用场景:** 在RAG系统中,WebSocket不仅用于推送AI回答,还可能处理: - 用户发送的实时反馈(如"重新回答") - 会话状态同步 - 多*对话上下文管理 虽然SSE在简单推送场景更轻量,但WebSocket提供了更完整的实时交互能力,适合复杂的RAG应用场景。
点赞
回复 取消回复
阿白 2026年01月21日 21:55
引用原文:第三个阶段:BM25重排序 // BM25 rescore 重排序 s.rescore(r -> r .windowSize(recallK) .query(rq -> rq .queryWeight(0.2d) // KNN分数权重20% .rescoreQueryWeight(1.0d) // BM25分数权重100% .query(rqq -> rqq.match(m -> m .field("textContent") .query(query) .operator(Operator.And) // 严格关键词匹配 )) ) ); 复制代码 具体的算法是这样的:假设一个文档在语义检索中的得分是 0.8,在关键词检索中的得分是 0.6,我们可以设置语义检索权重为 0.7,关键词检索权重为 0.3,那么最终得分就是 0.8*0.7 + 0.6*0.3 = 0.74。当然这个权重可以根据实际效果来调整。
@派聪明 为什么示例代码的KNN权重0.2+加上BM25分数1.0=1.2>1
点赞
回复1 取消回复
派聪明 2026年01月21日 21:56
这是Elasticsearch rescore机制的特殊设计,权重总和大于1是正常的。原因如下: **Elasticsearch rescore机制的工作原理:** ``` 最终得分 = KNN得分 × queryWeight + BM25得分 × rescoreQueryWeight = KNN得分 × 0.2 + BM25得分 × 1.0 ``` **为什么权重可以大于1:** 1. **非归一化权重**:这里的权重不是概率权重,而是比例因子,用来平衡不同检索方法的得分范围 2. **得分范围差异**: - KNN向量检索得分通常在0-1之间(余弦相似度) - BM25关键词检索得分范围可能很大(0到几百) - 需要不同权重来平衡两种得分的贡献 3. **设计意图**:代码中设置BM25权重为1.0、KNN权重为0.2,表示系统更重视关键词检索结果,向量检索作为补充 **与说明部分的差异:** 说明中"语义检索权重0.7+关键词检索权重0.3"是概念性描述,而代码中的0.2和1.0是Elasticsearch rescore的具体实现参数,两者描述的是同一机制但采用了不同的表达方式。 这种权重分配策略可以根据实际效果调整,比如当发现向量检索效果更好时,可以增**ueryWeight的值。
点赞
回复 取消回复
阿白 2026年01月21日 21:15
引用原文:是提示词,我们明确要求模型严格基于检索到的文档内容回答,不要添加文档中没有的信息。
@派聪明 系统的提示词到底是什么?
点赞
回复1 取消回复
派聪明 2026年01月21日 21:16
根据参考资料,系统的提示词是: ``` 你的回答必须依据参考文献,若参考文献无法回答问题,则回复"无法回答" ``` 这个提示词明确要求模型严格基于检索到的文档内容回答,禁止添加文档中没有的信息。如果检索到的文档无法回答用户的问题,系统会回复"无法回答"。 这个提示词设计是为了预防RAG系统中的"幻觉"问题,确保AI生成的内容与检索到的真实信息保持一致,避免模型编造不存在的信息。
点赞
回复 取消回复
阿白 2026年01月21日 21:13
引用原文:先是提示词,我们明确要求模型严格基于检索到的文档内容回答,不要添加文档中没有的信息。 Color1 你的回答必须依据参考文献,若参考文献无法回答问题,则回复“无法回答”
系统的提示词到底是什么?
点赞
回复 取消回复
重要的黑猫 2026年01月14日 19:06
@派聪明 总结一下全文,详细一点
点赞
回复1 取消回复
派聪明 2026年01月14日 19:07
以下是针对RAG系统核心技术的系统性总结,涵盖架构、检索优化、安全设计及未来演进等关键维度: --- ### **一、系统架构与数据流** 1. **完整流程** - **文件上传**:支持分片上传,通过Kafka异步处理,避免阻塞用户。 - **文档解析**:Apache Tika解析多格式文档(PDF/Word等),按语义切分(固定长度或语义分块)。 - **向量化**:调用豆包Embedding API生成2048维向量,存储于Elasticsearch(兼顾向量检索与全文检索)。 - **混合检索**:结合KNN向量检索(语义相似度)与BM25关键词检索,加权融合结果。 - **答案生成**:DeepSeek模型流式输出,结合检索结果与对话**(Redis存储)。 2. **关键组件** - **消息队列**:Kafka异步解耦上传与处理。 - **向量数据库**:Elasticsearch(支持混合检索+权限过滤)。 - **LLM集成**:DeepSeek API + WebSocket实时推送。 - **权限控制**:基于**标签(OrgTag)的多租户隔离。 --- ### **二、检索优化核心技术** 1. **混合检索实现** - **三阶段流程**: - **KNN召回**:向量相似度检索(余弦相似度)。 - **关键词过滤**:BM25评分 + 权限过滤(用户ID/公开文档/**权限)。 - **重排序**:BM25重新加权(KNN占20%,BM25占80%)。 - **权重动态调整**:根据业务场景优化融合公式(如`0.7*向量分数 + 0.3*关键词分数`)。 2. **向量维度选择** - **2048维优势**:豆包模型原生最高维度,保留更丰富语义信息,提升语义区分度。 - **性能权衡**:高维度增加存储成本,但显著优于384维的语义表达能力。 3. **语义漂移解决** - **模型版本追踪**:记录`modelVersion`字段,支持增量更新。 - **混合检索兜底**:关键词检索提供稳定基准,缓解向量偏移。 --- ### **三、安全与多租户设计** 1. **权限控制机制** - **三层过滤**: - 用户私有文档(`userId`匹配)。 - 公开文档(`isPublic=true`)。 - **级权限(`orgTag`匹配)。 - **实时检索过滤**:Elasticsearch查询中嵌入权限条件,确保数据隔离。 2. **敏感数据保护** - **传输加密**:HTTPS全程加密向量数据传输。 - **RBAC+JWT**:Spring Security实现基于角*的访问控制。 --- ### **四、性能与可*性优化** 1. **性能瓶颈突破** - **向量检索加速**:HNSW索引算法提升百万级文档检索速度。 - **Embedding缓存**:缓存高频查询向量,减少API调用延迟。 - **流式输出**:DeepSeek模型实时生成,提升用户体验。 2. **容错与降级** - **服务降级**:向量API失败时自动回退至纯文本搜索。 - **熔断重试**:Reactor机制实现3次重试+30秒超时保护。 - **多模型切换**:支持DeepSeek/豆包/通义千问等动态切换。 --- ### **五、高级特性与未来演进** 1. **跨领域适配** - **法律**:强制引用法条,标注权威级别。 - **医疗**:禁止诊疗建议,添加专业**提示。 - **金融**:实时数据更新,标注时效性与风险提示。 2. **技术演进方向** - **GraphRAG**:构建知识图谱(实体-关系-属性),解决传统RAG的语义割裂问题。 - **A2A架构**:多Agent协同(如代码执行+数据库查询),通过RAG增强信息获取能力。 - **多模态扩展**:集成OCR(图像)、表格解析,支持图文混合检索。 3. **评估与迭代** - **指标体系**:召回率(Recall)、精确率(Precision)、MRR@K。 - **A/B测试**:对比分块策略、融合权重、模型效果,通过用户反馈(顶/踩)优化。 --- ### **六、工程实践亮点** - **分块策略**:固定长度(512字符)+ 语义分块(按段落/句子),支持滑动窗口重叠(20-30%)保证跨chunk信息完整。 - **对话管理**:Redis存储**对话,滑动窗口保留最近10*或动态Token限制。 - **指代消解**:实体库+3-5*上下文窗口,优先匹配最近同类实体。 --- ### **总结** RAG系统的核心价值在于**通过检索增强LLM的实时性与准确性**,企业级落地需重点解决: 1. **检索精度**:混合检索+高维向量提升语义匹配; 2. **安全隔离**:多租户权限+数据加密; 3. **性能优化**:异步处理+索引优化+容错机制; 4. **持续迭代**:A/B测试+语义漂移监控+多模态扩展。 未来GraphRAG与Agent架构将进一步推动RAG向**知识网络化**与**任务自主化**演进。
点赞
回复 取消回复
小叮当 2026年01月08日 20:07
@派聪明 总结一下全文
点赞
回复1 取消回复
派聪明 2026年01月08日 20:08
以下是全文核心内容的结构化总结(按技术模块分类): --- ### **一、RAG系统架构** 1. **数据流向** - **文件上传**:分片上传 → Kafka异步处理 → Apache Tika解析文档 → 文本分块(512字符/块) - **向量化**:豆包Embedding API生成2048维向量 → Elasticsearch存储 - **检索生成**:混合检索(语义+关键词)→ DeepSeek LLM生成答案 → WebSocket实时推送 - **对话管理**:Redis维护多*对话**(滑动窗口优化) 2. **核心组件** - **检索层**:混合检索(KNN向量召回+BM25关键词重排序) - **权限控制**:多租户架构(userId/orgTag/isPublic字段过滤) - **容错机制**:Embedding API失败时降级为纯文本搜索 --- ### **二、关键技术优化** 1. **检索质量提升** - **混合检索**:语义检索(0.2权重)+ 关键词检索(1.0权重)+ BM25重排序 - **置信度评分**:`最终分 = 0.2×KNN分 + 1.0×BM25分` + 相似度阈值过滤 - **跨chunk信息**:滑动窗口分块(20-30%重叠率) 2. **向量与模型选择** - **维度选择**:2048维(豆包模型原生输出,保留语义细节) - **语义漂移解决**:模型版本管理(modelVersion字段)+ 增量更新策略 --- ### **三、多租户与安全** 1. **权限隔离** - **三层过滤**:公开资源 → 用户私有文档 → **标签匹配 - **API安全**:Spring Security+JWT + HTTPS加**输 - **敏感数据**:RBAC角*控制 + 动态权限过滤 2. **领域适配** - **法律**:强制引用法条+权威标注 - **医疗**:禁止诊断建议+免责声明 - **金融**:实时数据更新+风险提示 --- ### **四、性能与扩展** 1. **性能瓶颈优化** - **向量检索**:HNSW索引算法加速 - **LLM推理**:流式输出降低延迟 - **A/B测试**:权重/分块策略对比(顶/踩按钮评估) 2. **未来演进** - **多模态扩展**:OCR图像提取+表格结构化处理 - **GraphRAG**:知识图谱增强实体关系检索 - **Agent集成**:Function Call实现自主决策 --- ### **五、核心价值总结** - **准确性**:混合检索+高维向量提升召回率(Precision@K/Recall@K量化) - **安全性**:多租户权限+敏感数据保护 - **可扩展性**:异步处理+模块化设计支持高并发 - **业务适配**:领域定制化规则(法律/医疗/金融) > **关键结论**:RAG的核心价值在于通过**外部知识注入**解决LLM幻觉与知识滞后问题,而**混合检索架构**与**多租户权限设计**是企业级落地的基石。
点赞
回复 取消回复

目录