1.5 起步 - 安装 Git
2026/6/4 0:21:43
检索增强生成(RAG)是一种将大语言模型与外部知识库相结合的技术,旨在解决大模型的知识时效性和事实准确性问题。
flowchart TD A[用户查询] --> B[查询处理层] B --> C[检索层] C --> D[向量数据库] D --> E[知识库] C --> F[结果重排序] F --> G[上下文构建] G --> H[LLM 生成] H --> I[结果校验] I --> J[最终响应] I -->|校验失败| K[重新检索] K --> F问题描述:
影响:
问题描述:
影响:
class MultiLevelRetriever: def __init__(self): self.semantic_retriever = SemanticSearch() self.keyword_retriever = BM25Retriever() self.hybrid_retriever = HybridSearch() def retrieve(self, query, top_k=10): semantic_results = self.semantic_retriever.search(query, top_k * 2) keyword_results = self.keyword_retriever.search(query, top_k * 2) combined = self.hybrid_retriever.merge( semantic_results, keyword_results, weights={'semantic': 0.6, 'keyword': 0.4} ) return combined[:top_k]class QueryEnhancer: def __init__(self): self.expander = QueryExpansionModel() self.rephraser = QueryRephrasingModel() def enhance(self, query): expansions = self.expander.expand(query) rephrased = self.rephraser.rephrase(query) return [query] + expansions + [rephrased]class CrossEncoderReranker: def __init__(self): self.model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2') def rerank(self, query, documents): pairs = [(query, doc['content']) for doc in documents] scores = self.model.predict(pairs) scored_docs = [(documents[i], scores[i]) for i in range(len(documents))] scored_docs.sort(key=lambda x: x[1], reverse=True) return [doc for doc, score in scored_docs]class FactChecker: def __init__(self): self.triple_store = KnowledgeGraph() self.verification_model = FactVerificationModel() def verify(self, generated_text, sources): claims = self._extract_claims(generated_text) verified_claims = [] for claim in claims: evidence = self.triple_store.query(claim) if evidence: confidence = self.verification_model.verify(claim, evidence) verified_claims.append({ 'claim': claim, 'verified': confidence > 0.8, 'confidence': confidence }) else: verified_claims.append({ 'claim': claim, 'verified': False, 'confidence': 0.0 }) return verified_claimsdef constrained_generation(prompt, retrieved_docs): evidence_context = "\n".join([ f"【文档{i+1}】{doc['content']}" for i, doc in enumerate(retrieved_docs) ]) constrained_prompt = f""" 严格基于以下参考文档回答问题: {evidence_context} 规则: 1. 仅使用参考文档中的信息 2. 无法回答时明确说明"无法从参考文档中找到相关信息" 3. 对不确定的信息标注"可能" 问题:{prompt} """ return llm.generate(constrained_prompt)class OutputFormatController: def __init__(self): self.schema = { 'type': 'object', 'properties': { 'answer': {'type': 'string'}, 'sources': { 'type': 'array', 'items': {'type': 'string'} }, 'confidence': {'type': 'number', 'minimum': 0, 'maximum': 1} }, 'required': ['answer', 'sources', 'confidence'] } def validate(self, output): try: jsonschema.validate(output, self.schema) return True except jsonschema.ValidationError: return Falseclass TrainingDataBuilder: def __init__(self): self.synthesizer = DataSynthesisModel() def build(self, documents): training_samples = [] for doc in documents: questions = self.synthesizer.generate_questions(doc) for question in questions: answer = self.synthesizer.generate_answer(question, doc) training_samples.append({ 'question': question, 'context': doc['content'], 'answer': answer }) return training_samplesclass RAGFineTuner: def __init__(self): self.model = LLMModel() def fine_tune(self, training_data): self.model.train( training_data, epochs=3, batch_size=8, learning_rate=1e-5, loss_function='mse' ) self.model.save('rag_finetuned_model')class QualityMonitor: def __init__(self): self.metrics = { 'retrieval_precision': [], 'answer_relevance': [], 'factuality': [], 'hallucination_rate': [] } def record(self, metric, value): if metric in self.metrics: self.metrics[metric].append(value) def report(self): report = {} for metric, values in self.metrics.items(): if values: report[metric] = { 'avg': sum(values) / len(values), 'min': min(values), 'max': max(values) } return reportclass AdaptiveOptimizer: def __init__(self, monitor): self.monitor = monitor self.thresholds = { 'hallucination_rate': 0.05, 'retrieval_precision': 0.8 } def optimize(self): report = self.monitor.report() if report.get('hallucination_rate', {}).get('avg', 1) > self.thresholds['hallucination_rate']: self._increase_fact_checking() if report.get('retrieval_precision', {}).get('avg', 0) < self.thresholds['retrieval_precision']: self._update_retrieval_params()| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 策略A | 性能高 | 复杂度高 | 高并发 |
| 策略B | 简单 | 性能低 | 低并发 |
| 策略C | 平衡 | 需调参 | 通用场景 |
通过系统性的优化方案,可以同时提升 RAG 系统的检索相关性和控制幻觉问题:
这些措施共同构成了一个完整的 RAG 优化体系,为构建高质量的大模型应用提供了坚实保障。