共计 2111 个字符,预计需要花费 6 分钟才能阅读完成。
技术背景:RAG 与提示词的核心作用
RAG(Retrieval-Augmented Generation)是结合检索系统和生成模型的技术框架。简单来说,当用户提问时,系统会先从一个知识库中检索相关文档片段,然后将这些片段和问题一起输入生成模型,最终得到回答。这就像你写论文时先查资料再动笔,比凭空编造更靠谱。

提示词在这里扮演着 ” 交通指挥员 ” 的角色:
- 检索阶段 :提示词影响搜索关键词的 embedding 生成,决定能召回哪些内容
- 生成阶段 :提示词组织检索结果的呈现方式,告诉模型 ” 怎么用这些材料 ”
三大典型翻车现场
1. 模糊指令导致答非所问
# 反面教材
prompt = "回答这个问题:" + user_question
后果:模型可能直接忽略检索结果,凭记忆生成错误答案
2. 信息过载淹没关键点
# 反面教材
prompt = "参考以下文档:" + "\n".join(retrieved_docs[:5])
后果:前 3 篇文档就够用,后 2 篇反而引入噪声
3. 缺少约束引发危险发言
# 反面教材
prompt = "根据资料自由发挥:" + context
后果:可能泄露敏感信息或生成不符合业务要求的内容
五步打造黄金提示词
步骤 1:结构化模板设计
def build_prompt(question, contexts):
return f""" 请严格根据以下信息用中文回答,若资料不足请说明:问题:{question}
参考材料:{"\n\n".join([f"[{i+1}] {c}" for i,c in enumerate(contexts)])}
回答要求:- 不超过 3 句话
- 标注引用来源如 [1][2]
- 避免主观推测
"""
步骤 2:检索结果预处理(Python 示例)
from sklearn.feature_extraction.text import CountVectorizer
def filter_redundant(docs, max_n=3):
vectorizer = CountVectorizer().fit(docs)
X = vectorizer.transform(docs)
# 计算文档相似度矩阵
similarity = (X * X.T).A
selected_indices = []
for i in range(len(docs)):
if not any(similarity[i][j] > 0.7 for j in selected_indices):
selected_indices.append(i)
if len(selected_indices) >= max_n:
break
return [docs[i] for i in selected_indices]
步骤 3:多轮对话处理
class ConversationManager:
def __init__(self):
self.history = []
def add_question(self, question, contexts, answer):
self.history.append({
"q": question,
"c": contexts,
"a": answer
})
def current_prompt(self, new_question, new_contexts):
history_part = "\n".join(f"Q:{item['q']}\nA:{item['a']}"
for item in self.history[-2:] # 只保留最近 2 轮
)
return f""" 当前对话历史:{history_part}
新问题:{new_question}
参考资料:{"\n".join(new_contexts)}
"""
性能优化:提示词瘦身术
-
实体提取法 :
import spacy nlp = spacy.load("zh_core_web_sm") def extract_entities(text): return " ".join([ent.text for ent in nlp(text).ents]) -
摘要生成法 :
from transformers import pipeline summarizer = pipeline("summarization", model="Falconsai/zh_summarization") def zh_summarize(text, max_len=100): return summarizer(text, max_length=max_len)[0]["summary_text"]
避坑指南
1. 冷启动问题
- 现象 :新领域第一批查询效果差
- 解法 :准备种子提示词库,用少量人工回答做引导
2. 敏感信息泄露
- 现象 :模型直接引用内部文档编号
- 解法 :添加提示词约束如 ” 请勿透露文档来源细节 ”
3. 长尾查询失效
- 现象 :小众问题检索不到资料时乱答
- 解法 :设置多层 fallback 策略,最终返回 ” 暂无法回答 ”
思考题
- 如何设计量化指标评估提示词质量?准确率之外还需要考虑哪些维度?
- 当优化提示词效果遇到瓶颈时,哪些情况说明需要微调模型本身?
在实际项目中,我发现 RAG 系统的表现 30% 取决于检索模块,70% 取决于提示词设计。就像炒菜,食材再好也要看厨师怎么搭配火候和调料。建议先用简单 prompt 快速验证流程,再像调参一样逐步优化提示词组件。
正文完
