DSPy 3与GEPA:革新RAG框架的自动推理与提示进化技术

DSPy 3与GEPA:革新RAG框架的自动推理与提示进化技术

近期,OpenAI 发布了 GPT-5.2 模型,引发了广泛关注。路透社报道称,OpenAI 在竞争压力下加速了研发进程。此次更新并非功能堆砌,而是聚焦于在智能、代码处理、长文本理解等核心能力上的显著提升,尤其擅长处理创建电子表格、制作演示文稿等复杂的多步骤任务。

简而言之,GPT-5.2 是一次面向实用场景的“精修”,在可靠性、长上下文处理、工具执行和输出生成等维度全面加强,旨在成为更高效的工作助手。

当前,“智能体 AI”正通过调用工具、推理等步骤执行复杂任务。传统优化范式通常依赖强化学习,通过标量奖励信号来学习“好动作”。但这种方法存在局限:
* 标量奖励(如答案对错)提供的信息有限,学习效率低下。
* 微调过程需要大量尝试和计算成本。

DSPy 框架提供了一种新思路,它将语言模型视为类似 CPU、GPU 的“计算设备”。开发者只需声明所需的“自然语言签名”,而无需过度纠结于提示词的具体措辞。DSPy 会根据这些签名自动生成、优化和微调提示,最终产出符合预期的结果。

GEPA 则提出了另一种优化思路:鼓励大语言模型“反思自身的失败”。与调整模型参数的强化学习不同,GEPA 让模型用自然语言分析自身行为,并提出改进方案,本质上是“反思并进化”提示本身。

以一个太空知识问答为例。当询问“Which space telescope is most powerful?”时,智能体会执行以下步骤:
1. 使用 TF-IDF 计算词频和逆文档频率,结合余弦相似度找出与问题真正相关的文本块,而非简单关键词匹配。
2. 检索出最相关的三个文本块后,采用基于置信度的检索增强生成技术,结合思维链生成答案并给出置信度。这使得模型能够坦诚回答“信息不足”,而非产生幻觉。
3. 对于更复杂的问题,可采用多跳检索增强生成:先从上下文中提取要点事实,再将这些事实综合成完整答案。这个两步流程对于需要整合多来源信息的复杂问题至关重要,能避免遗漏关键关联。

GEPA 的核心优势在于其优化方法:它采用遗传算法来“组合优秀的提示”,生成更佳方案,而非手动调整或使用传统优化器。同时,它引入帕累托优化,维护多个有效提示,而非只保留一个最优解。此外,GEPA 具备反思能力,能够从文本反馈中学习并修正错误。

随着时间的推移,GEPA 会自动产生越来越好的提示。它会构建一棵提示进化树,每次改进都像树上长出新分支,在保留有效做法的基础上进行增量改良,逐步逼近适配特定任务的最佳指令。据称,GEPA 的效率比传统方法高 35 倍,生成的提示长度缩短 9 倍,性能还能提升 10%。

GPT-5.2 有何过人之处?

评估 AI 能力的“ARC-AGI-2”测试,旨在衡量不依赖记忆的“先天智能”或抽象推理能力。在该测试中,GPT-5.1 得分为 17.6%,Gemini 3 Pro 为 31.1%,而 GPT-5.2 达到了 52.9%,提升显著。

另一个指标“GDPval”衡量模型在研究、规划、决策等真实世界任务上的能力。GPT-5.1 得分为 38.8%,Gemini 3 Pro 为 53.5%,GPT-5.2 则达到 70.9%。这表明其在处理复杂、多步骤工作流方面的能力有了实质性飞跃。

GEPA 的独特之处?

GEPA 的核心灵感来源于人类学习的本质——反思。它不像传统方法那样堆砌指令,而是像经验丰富的导师,回顾过往尝试,分析成败,然后给出更好的解决方案。

DSPy 3与GEPA:革新RAG框架的自动推理与提示进化技术

与依赖单一标量奖励的传统强化学习不同,GEPA 利用大语言模型的反思能力,并结合特定领域的文本反馈进行优化。这使其能够洞察任务中的细微之处,以更少的步骤产出更优的结果。

实践步骤

接下来,我们将一步步演示如何结合使用 DSPy 3、GEPA 优化器和智能体 RAG。首先需要安装必要的支撑库。

bash
pip install requirements

(注:此处仅展示部分代码流程,完整实现涉及更多细节。)

关于 TF-IDF

上述流程中使用了 TF-IDF 进行检索。

我实现了一个基于词频-逆文档频率(TF-IDF)的检索器,用于查找与用户问题最相关的文档。其工作流程如下:

首先,系统存储所有文档,并对每个文档进行预处理:将文本切分为词项、转换为小写、去除标点,从而得到标准化、易于比较的文本表示。

DSPy 3与GEPA:革新RAG框架的自动推理与提示进化技术

接着,系统在整个语料库上计算每个词的重要性。其核心逻辑是:在许多文档中都出现的词(如“的”、“是”)具有较低的全局重要性;而仅出现在少数文档中的词,则被视为更具区分性的关键信息,从而获得更高的重要性权重。

当用户查询输入时,检索器会以同样的方式进行清洗和分词,并基于每个词的词频及其在整个语料库中的稀有度(逆文档频率)为查询中的词项计算得分。

[[IMAGE_2]]

最后,检索器将查询向量与每个文档向量进行比较,通过计算余弦相似度这一数学方法来衡量两者在向量空间中的方向一致性,从而找出与查询语义最匹配的文档。

每个文档都会得到一个相似度分数,按从高到低排序,最后返回最相关的前若干文档。

“`python
class TFIDFRetriever:
“””
TF-IDF (Term Frequency – Inverse Document Frequency) retriever.

This is smarter than simple keyword matching because:
- TF: Words that appear often in a document are important for that document
- IDF: Words that appear in many documents are less important overall

Example: "the" appears everywhere (low IDF), but "astronaut" is specific (high IDF)
"""

def __init__(self, documents: list[str], k: int = 3):
    self.documents = documents
    self.k = k
    self.doc_tokens = [self._tokenize(doc) for doc in documents]
    self.idf = self._compute_idf()

def _tokenize(self, text: str) -> list[str]:
    """Convert text to lowercase tokens, removing punctuation."""
    import re
    text = text.lower()
    tokens = re.findall(r'b[a-z]+b', text)
    return tokens

def _compute_idf(self) -> dict[str, float]:
    """Compute IDF for all terms in the corpus."""
    doc_count = len(self.documents)
    term_doc_counts = Counter()

    for tokens in self.doc_tokens:
        unique_tokens = set(tokens)
        for token in unique_tokens:
            term_doc_counts[token] += 1

    idf = {}
    for term, count in term_doc_counts.items():
        # Standard IDF formula with smoothing
        idf[term] = math.log((doc_count + 1) / (count + 1)) + 1

    return idf

def _compute_tfidf(self, tokens: list[str]) -> dict[str, float]:
    """Compute TF-IDF vector for a list of tokens."""
    tf = Counter(tokens)
    tfidf = {}
    for term, count in tf.items():
        tfidf[term] = count * self.idf.get(term, 1.0)
    return tfidf

def _cosine_similarity(self, vec1: dict, vec2: dict) -> float:
    """Compute cosine similarity between two sparse vectors."""
    common_terms = set(vec1.keys()) & set(vec2.keys())
    if not common_terms:
        return 0.0

    dot_product = sum(vec1[t] * vec2[t] for t in common_terms)
    norm1 = math.sqrt(sum(v ** 2 for v in vec1.values()))
    norm2 = math.sqrt(sum(v ** 2 for v in vec2.values()))

    if norm1 == 0 or norm2 == 0:
        return 0.0

    return dot_product / (norm1 * norm2)

def __call__(self, query: str) -> list[str]:
    """Retrieve top-k documents most similar to the query."""
    query_tokens = self._tokenize(query)
    query_vec = self._compute_tfidf(query_tokens)

    scores = []
    for i, doc_tokens in enumerate(self.doc_tokens):
        doc_vec = self._compute_tfidf(doc_tokens)
        score = self._cosine_similarity(query_vec, doc_vec)
        scores.append((score, i, self.documents[i]))

    # Sort by score descending
    scores.sort(key=lambda x: x[0], reverse=True)

    return [doc for score, idx, doc in scores[:self.k]]

“`

检索增强生成

我实现了两种基于检索增强生成(RAG)的问答方法。

第一种方法中,智能体接收问题,检索最相关的文档,将它们拼接成一个上下文,然后生成答案并给出置信度。它会保存使用过的文档,便于回溯答案的来源。

第二种方法针对需要多步推理的复杂问题。它首先检索文档,然后仅抽取与问题相关的关键事实,最后将这些事实组合成一个清晰的答案。该方法会同时保留检索到的文档和抽取的事实,便于检查每一步,理解最终答案的构建过程。

“`python
class RAGWithConfidence(dspy.Module):
“””能够报告答案置信度的RAG模块。”””

def __init__(self, retriever):
    super().__init__()
    self.retriever = retriever
    self.generate = dspy.ChainOfThought(AnswerWithConfidence)

def forward(self, question: str):
    docs = self.retriever(question)
    context = "nn".join(docs)
    result = self.generate(context=context, question=question)
    result.retrieved_docs = docs
    return result

class MultiHopRAG(dspy.Module):
“””
多跳RAG:先抽取事实,再综合答案。
这有助于处理需要综合多个来源信息的复杂问题。
“””

def __init__(self, retriever):
    super().__init__()
    self.retriever = retriever
    self.extract = dspy.Predict(ExtractFacts)
    self.synthesize = dspy.Predict(SynthesizeAnswer)

def forward(self, question: str):
    # 步骤1:检索
    docs = self.retriever(question)
    context = "nn".join(docs)

    # 步骤2:抽取相关事实
    extraction = self.extract(context=context, question=question)

    # 步骤3:基于事实综合答案
    result = self.synthesize(facts=extraction.facts, question=question)

    # 附加中间结果以供检查
    result.retrieved_docs = docs
    result.extracted_facts = extraction.facts

    return result

“`

反思式提示进化

随后,我利用GEPA框架让系统能够逐步学习和改进其答案生成过程。评估机制会使用标准答案来评估模型的输出:如果答案完全匹配,则获得满分;如果仅部分正确,则获得较低分数,并解释缺失了哪些信息;如果答案错误,则获得低分并提供清晰的错误反馈。

这些反馈至关重要,因为GEPA会读取它们,并据此优化后续的提示。简单RAG模块的工作流程是:接收问题,检索相关文档,将其拼接为上下文,并基于该上下文生成答案。

GEPA 会利用评估指标的分数与反馈,持续自动进化 RAG 系统的提示。

“`python
def gepa_metric(gold, pred, trace=None, pred_name=None, pred_trace=None):
“””
GEPA 评估函数,包含反馈机制。

GEPA 的特殊之处在于能够利用文本反馈来指导进化。
此函数同时返回一个分数和关于错误原因的反馈。
"""
expected = gold.expected_answer.lower()
actual = pred.answer.lower() if hasattr(pred, 'answer') else ""

# 检查关键信息是否在答案中
if expected in actual:
    return 1.0  # 完全匹配

# 为相关答案提供部分分数
expected_words = set(expected.split())
actual_words = set(actual.split())
overlap = len(expected_words & actual_words) / len(expected_words) if expected_words else 0

if overlap > 0.5:
    score = 0.7
    feedback = f"部分正确。期望答案 '{gold.expected_answer}',但得到了相关内容。"
elif overlap > 0:
    score = 0.3
    feedback = f"包含一些相关信息,但缺少关键细节。期望答案: '{gold.expected_answer}'"
else:
    score = 0.0
    feedback = f"不正确。期望答案包含 '{gold.expected_answer}',但得到: '{actual[:100]}...'"

# 返回包含反馈的分数,供 GEPA 反思使用
from dspy.teleprompt.gepa.gepa_utils import ScoreWithFeedback
return ScoreWithFeedback(score=score, feedback=feedback)

class SimpleRAGForOptimization(dspy.Module):
“””一个供 GEPA 优化的简单 RAG 模块。”””

def __init__(self, retriever):
    super().__init__()
    self.retriever = retriever
    self.generate = dspy.Predict("context, question -> answer")

def forward(self, question: str):
    docs = self.retriever(question)
    context = "nn".join(docs)
    return self.generate(context=context, question=question)

“`

GPT-5.2 或许不是能实现“全新魔法”的模型,但它能将“原本不敢交给 AI 的任务”转变为“可以放心委托的任务”。

未来仍面临挑战,例如多模态支持、实时优化、安全保障等,但这同样意味着巨大的发展空间。

在 2026 年之后,GEPA 有望催生诸如自校正 AI 系统、神经符号集成、元提示工程等创新应用。GEPA 无疑将继续在提示技术的未来中扮演核心角色。


关注“鲸栖”小程序,掌握最新AI资讯

本文来自网络搜集,不代表鲸林向海立场,如有侵权,联系删除。转载请注明出处:http://www.itsolotime.com/archives/18474

(0)
上一篇 2026年1月20日 上午7:08
下一篇 2026年1月20日 下午11:54

相关推荐

  • 企业推进大模型落地的关键工程与核心指标

    企业推进大模型落地,需统筹五大关键工程:算力工程是基础设施,关注规模、效率与服务;应用工程是价值门户,衡量业务覆盖与成效;模型工程是技术核心,驱动算法效能与迭代;知识工程是企业智库,负责知识的沉淀与复用;数据工程是循环血脉,确保数据的贯通与消费。五者协同,方能实现真正的业务智能化。

    2025年10月2日
    36800
  • AI结对编程实战:Claude与Codex协同开发,效率提升10倍的魔法组合

    上周,我无意间组建了一支特别的开发团队。这支“团队”由我、Claude Code 和 Codex 组成,我们分坐在屏幕两侧,像两位彼此挑剔但又不得不合作的工程师。 说实话,效果堪称神奇。如果你想在不崩溃的情况下将开发速度提升一个数量级,这套组合可能是目前最接近真人结对编程体验的 AI 方案。 下面我将展示它的实际工作流程——不夸大,全是实战经验。 步骤 1:…

    2025年11月1日
    8400
  • UltraRAG 3.0重磅发布:可视化白盒框架,让RAG开发从数月缩短至一周

    “验证算法原型只需一周,构建可用系统却耗时数月。” 这句看似调侃的“吐槽”,却是每一位算法工程师不得不面对的真实困境。 今天,清华大学 THUNLP 实验室、东北大学 NEUIR 实验室、OpenBMB 、面壁智能与 AI9Stars 联合发布 UltraRAG 3.0。 针对上述痛点,为科研工作者与开发者打造更懂开发者的技术框架,具备 3 大核心优势: 从…

    大模型工程 2026年1月23日
    4000
  • DeepSeek开源Engram模块:查算分离破解Transformer/MoE架构记忆推理冲突,开启大模型降本增效新范式

    本文将从技术原理、性能验证、算力变革、产业链影响、国际对比及挑战展望六大维度,深度解析这一技术突破的核心价值与行业影响。 2026年1月13日,AI领域迎来一项颠覆性技术突破——DeepSeek在其GitHub官方仓库正式开源了题为《Conditional Memory via Scalable Lookup: A New Axis of Sparsity …

    2026年1月24日
    2900
  • DeepSeek开源条件记忆模块:让Transformer告别“苦力活”,27B模型性能碾压MoE

    DeepSeek为Transformer引入“条件记忆”模块 DeepSeek在最新研究中为Transformer架构引入了“条件记忆”机制,旨在弥补其原生缺乏高效知识检索能力的短板。 研究团队在论文结论中明确指出:条件记忆应被视为下一代稀疏模型不可或缺的核心建模原语。 该研究由梁文锋署名,并与北京大学王选计算机研究所的赵东岩、张辉帅团队合作完成。 论文不仅…

    2026年1月13日
    9600