大家有没有想过这样一个问题,我们像deepseek提出一个简短的问题,ta为什么能回答的那么丰富具体呢?我们可以简单的这样理解:deepseek把一个简单的问题进行了优化,又进一步生成了多个细化的prompt进行提问!
RAG机制的核心环节——关键词在检索和生成之间的桥梁作用
关于关键词与prompt的关系,其实存在三个理解层级:
首先是基础功能层面,关键词确实构成prompt的素材;
其次是动态优化层面,检索结果会通过重排序影响生成权重;
最深的是语义控制层面,那些未被选中的边缘关键词其实也在隐形地划定生成范围。需要强调DeepSeek会对原始片段进行指令化改造,不是简单拼接。
关键词/片段如何成为Prompt的组成部分
例子:问deepseek
"详细介绍Python 3.7的编码重点内容"
-
语义桥梁作用
-
用户原始问题: "Python 3.7的编码重点"
-
检索到的关键词:
PEP 563
,dataclasses
,breakpoint()
,async 增强
-
转化后的Prompt:
请基于以下专业材料总结Python 3.7的核心编码特性: [材料1] PEP 563:延迟类型注解评估... [材料2] @dataclass装饰器自动生成方法... ...(其他片段) 要求:按技术重要性排序,包含代码示例
检索结果将模糊问题转化为具体的技术点,相当于给大模型提供了"答题要点"。
-
-
上下文注入机制
检索结果作为"知识锚点"插入Prompt,约束生成方向
与传统Prompt的关键区别
特性 | 传统Prompt | RAG增强Prompt |
---|---|---|
知识来源 | 模型预训练记忆 | 动态检索的最新/专业文档 |
可靠性 | 可能产生幻觉 | 基于真实文档片段生成 |
可控性 | 依赖提示词工程 | 通过检索结果实现内容强引导 |
示例需求响应 | 需用户手动提供示例 | 自动注入文档中的代码片段作为示例 |
例如当检索到dataclasses
官方文档时,系统会自动抽取代码示例注入Prompt,无需用户额外要求。
DeepSeek-RAG的进阶处理技术
-
关键词重加权
对检索结果进行重要性分析,提升核心术语的生成权重:# 伪代码:关键词权重调整 keywords = {"PEP 563": 0.9, "breakpoint()": 0.8, "性能优化": 0.7} prompt += f"\n重点强调:{list(keywords.keys())}"
-
跨文档关系构建
当检索到多个关联片段时,自动构建逻辑关系图:[延迟注解] → (解决)→ [循环引用问题] ↘ (应用于)→ [类型提示体系]
-
反幻觉过滤
对比生成内容与检索文本的语义一致性:
if generated_text not in retrieved_snippets.semantic_range():
regenerate_answer() # 触发重新生成
实际案例解析
用户问题"Python 3.7在面向对象编程方面有什么改进?"
DeepSeek-RAG内部流程:
-
检索到关键材料:
-
文本A:
dataclasses模块实现数据类(DataClasses)
-
文本B:
PEP 563对类方法类型注解的支持
-
-
构建增强Prompt:
用户问题:面向对象编程改进 权威材料: [1] @dataclass可自动生成__init__/__repr__,减少样板代码... [2] 延迟求值注解允许在类中引用自身类型... 请用面向对象编程视角组织回答,包含代码对比
-
生成定向回答:
### 面向对象编程改进 **1. 数据类(DataClasses)** ```python # 传统写法 vs 数据类 class OldUser: | @dataclass def __init__(self, name): | class User: self.name = name | name: str
**2. 类型注解自引用**
class Node: # Python 3.7前报错 def link(self, other: Node) -> None: ...
技术优势总结
-
精准知识引导
检索关键词如同"知识坐标",让大模型精准定位到专业内容 -
动态上下文构建
避免静态Prompt的局限性,每次生成都是定制化知识组装 -
可信度强化
所有生成主张均有检索依据支撑,显著降低幻觉率
实验数据:在Python版本特性问答中,采用RAG增强Prompt相比基础Prompt的准确率提升47%(DeepSeek内部测试集)这种"检索结果即Prompt"的机制,正是RAG技术实现精准、可靠、可解释自动回答的核心秘密