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上海具身智能产业全景:从政策赋能到技术突变的生态跃迁

    2025年末的上海,正成为全球具身智能产业发展的焦点。黄浦江畔的湿冷空气与张江科学会堂周边因高密度算力运转而近乎沸腾的氛围形成鲜明对比,这不仅是GDPS 2025全球开发者先锋大会启幕前的倒计时,更是中国具身智能产业跨越“达尔文之海”、实现从数字演练向物理世界远征的关键节点。12月12日这场被业界称为“物理世界第一张入场券”的大赛,标志着硅基生命向物理世界发…

    2025年12月5日
    19600
  • 从生物进化到AI演进:开源加速与非线性跃迁的深层逻辑

    在科技发展的宏大叙事中,生物进化与人工智能的演进轨迹呈现出令人惊异的相似性。这种相似性不仅体现在表面模式上,更深入到两者共享的底层逻辑——试错、选择与适应性突破。本文将以Daniel Povey在MEET2026智能未来大会上的核心观点为线索,深入剖析AI发展的进化隐喻,探讨开源生态的关键作用,并展望下一代架构的探索路径。 **一、进化逻辑的深层映射:从生物…

    2025年12月15日
    18100
  • 破折号成瘾:AI写作风格如何暴露大模型训练数据的历史断层

    在人工智能写作领域,一个看似微不足道的标点符号——破折号——正成为揭示大模型训练数据来源与时代局限性的关键线索。用户普遍观察到,以ChatGPT为代表的AI产品在生成文本时频繁使用破折号,这种现象已从偶然特征演变为AI写作的标志性风格。OpenAI甚至将“减少破折号使用”作为产品改进功能单独发布,反映出用户对此现象的普遍关注。这一现象背后,隐藏着大模型训练数…

    2025年11月29日
    17900
  • DeepPHY基准揭示多模态大模型物理推理能力鸿沟:从静态理解到动态交互的挑战

    近日,淘天集团算法技术-未来生活实验室团队提出的DeepPHY基准框架,作为首个系统性评估多模态大模型(VLM)交互式物理推理能力的综合基准,被AAAI 2026收录。该研究通过六个极具挑战性的物理模拟环境,揭示了即便是顶尖VLM,在将物理知识转化为精确、可预测的交互控制时,仍存在显著的核心短板。这一发现不仅对VLM在动态环境中的应用提出了严峻挑战,也为未来…

    2025年11月16日
    17100
  • 从万能钥匙到AI钥匙:谷歌创始人布林复盘技术决策与未来展望

    在斯坦福大学的演讲中,谷歌联合创始人谢尔盖·布林以罕见的坦诚,回顾了谷歌从诞生到AI竞争中的关键转折点。这场演讲不仅是对一家科技巨头历史的梳理,更是对技术决策、创新节奏与产业趋势的深刻反思。 布林首先指出,谷歌的诞生源于一次“无心插柳”的创业。1995年,他与拉里·佩奇在斯坦福相遇,最初的目标是开发一个名为“BackRub”的搜索算法,希望通过链接分析评估网…

    2025年12月15日
    19000