通过多次采样推理路径并选择最一致答案来提高大模型推理准确性的技术
def self_consistency(prompt, model, num_samples=5, temperature=0.7): """ 实现自我一致性推理 """ answers = [] # 1. 生成多条推理路径 for _ in range(num_samples): response = model.generate( prompt + "\n让我们一步步思考:", temperature=temperature ) # 2. 提取答案 answer = extract_answer(response) answers.append(answer) # 3. 多数投票 from collections import Counter vote_counts = Counter(answers) final_answer = vote_counts.most_common(1)[0][0] confidence = vote_counts[final_answer] / num_samples return final_answer, confidence
def dynamic_self_consistency(prompt, model): """ 动态调整采样数量的自我一致性 """ answers = [] confidence_scores = [] for i in range(1, max_samples): # 生成新的推理路径 response = model.generate(prompt, temperature=0.7) answer = extract_answer(response) # 计算置信度(7个文本指标) confidence = calculate_confidence(response) answers.append(answer) confidence_scores.append(confidence) # 早停检查:如果答案一致性足够高 if check_convergence(answers, confidence_scores): break # 加权投票而非简单多数投票 return weighted_vote(answers, confidence_scores)
def universal_self_consistency(prompt, model, task_type="generation"): """ 适用于摘要、创意写作等开放式任务 """ outputs = [] # 生成多个输出 for _ in range(5): output = model.generate(prompt, temperature=0.8) outputs.append(output) # 使用LLM判断一致性 consistency_prompt = f""" 以下是对同一问题的多个回答: {format_outputs(outputs)} 请识别最一致和高质量的回答。 """ best_output = model.select_best(consistency_prompt) return best_output