\documentclass[a4paper]{article}
\usepackage[fontset=fandol]{ctex}
\usepackage{amsmath, amssymb}
\usepackage{graphicx}
\usepackage[margin=2.5cm]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{etoolbox}
\usepackage{listings}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{subcaption}
\usepackage{float}

\newtcolorbox{knowledgebox}[1]{enhanced, colback=blue!5!white, colframe=blue!75!black, colbacktitle=blue!75!black, coltitle=white, fonttitle=\bfseries, title=#1, attach boxed title to top left={yshift=-2mm, xshift=2mm}, boxrule=1pt, sharp corners}
\newtcolorbox{importantbox}[1]{enhanced, colback=yellow!10!white, colframe=yellow!80!black, colbacktitle=yellow!80!black, coltitle=black, fonttitle=\bfseries, title=#1, sharp corners}
\newtcolorbox{warningbox}[1]{enhanced, colback=red!5!white, colframe=red!75!black, colbacktitle=red!75!black, coltitle=white, fonttitle=\bfseries, title=#1, sharp corners}

\lstset{language=Python, basicstyle=\ttfamily\small, keywordstyle=\color{blue}, stringstyle=\color{red!60!black}, commentstyle=\color{green!60!black}, breaklines=true, frame=single, numbers=left, numberstyle=\tiny\color{gray}, captionpos=b, extendedchars=false}

\newcommand{\notetitle}{Gemini 2.5 Pro + Agent = IMO 金牌：Actor-Critic Workflow}
\newcommand{\noteauthors}{基于公开课程资料整理}
\newcommand{\notedate}{2025}
\newcommand{\videochannel}{五道口纳什}
\newcommand{\videopublishdate}{2025}
\newcommand{\videoduration}{约 25 分钟}
\newcommand{\videourl}{https://www.bilibili.com/video/BV1Aq8bz1Emj}
\newcommand{\videocoverpath}{cover.jpg}
\newcommand{\repourl}{https://github.com/hqhq1025/ai-course-notes}


% Footer with repo info
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[C]{\thepage}
\fancyfoot[R]{\footnotesize\color{gray}\href{\repourl}{AI Course Notes}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}

\begin{document}
\begin{titlepage}
\centering
{\Large 课程笔记\par}\vspace{1.2cm}
{\huge\bfseries \notetitle\par}\vspace{0.8cm}
{\large \noteauthors\par}\vspace{0.3cm}
{\large \notedate\par}\vspace{1.2cm}
\ifdefempty{\videocoverpath}{}{\includegraphics[width=0.82\textwidth,height=0.45\textheight,keepaspectratio]{\videocoverpath}\par}
\vfill
\begin{tcolorbox}[width=0.9\textwidth, colback=black!2!white, colframe=black!60, sharp corners]
\textbf{视频作者/频道}：\videochannel\par\textbf{发布日期}：\videopublishdate\par\textbf{视频时长}：\videoduration\par
\ifdefempty{\videourl}{}{\textbf{视频链接}：\href{\videourl}{\nolinkurl{\videourl}}\par}\par
\textbf{项目主页}：\href{\repourl}{\nolinkurl{\repourl}}\par
\end{tcolorbox}
\end{titlepage}
\tableofcontents\newpage

\section{工作背景与核心发现}

\subsection{令人振奋的结果}

本期介绍了一篇对作者启发极大的工作：\textbf{原生 Gemini 2.5 Pro}（非 DeepMind 官方 tune 过的版本）通过精心设计的 Agent Workflow，求解了 IMO 2025 六道题中的前五道，达到人类金牌水平。

\begin{importantbox}{核心发现}
关键词是 \textbf{capable}——模型本身有能力解决这些极其困难的数学问题，此前表现不佳是因为没有通过合适的 Workflow 来最大化激发模型的潜力。这对 Agent 设计的启示是巨大的。
\end{importantbox}

\subsection{本章小结}

这一工作证明了 Agent Workflow 设计的重要性：同样的模型，不同的 Workflow 可以带来质的飞跃。

\section{完整 Workflow 流程}

\subsection{六步流程}

\begin{enumerate}
    \item \textbf{Step 1：初始求解}——基于 Prompt 和 Gemini 2.5 Pro 产生一个初始解
    \item \textbf{Step 2：Self-Improvement}——共享 Step 1 的上下文，继续 refine（因为 Step 1 可能因 Thinking Budget 耗尽而仓促结束）
    \item \textbf{Step 3：Verification}——对 Step 2 的解进行验证，输出 verdict（有效/无效）和 bug report
    \item \textbf{Step 4：Bug Report}——提取具体的错误位置和原因
    \item \textbf{Step 5：Correction}——基于 bug report 修正 solution
    \item \textbf{Step 6：循环}——Step 3-5 不断循环
\end{enumerate}

\begin{importantbox}{终止条件}
\begin{itemize}
    \item \textbf{接受}：某个 solution 连续 \textbf{5 次}通过 verification $\rightarrow$ 认为解决了问题
    \item \textbf{拒绝}：循环 \textbf{10 次}仍未通过 $\rightarrow$ 放弃当前方向，重新 sample
\end{itemize}
\end{importantbox}

\subsection{Evaluator-Optimizer 模式}

\begin{knowledgebox}{与 Building Effective Agents 中的经典模式对应}
这个 Workflow 本质是 \textbf{Evaluator-Optimizer} 模式：
\begin{itemize}
    \item Generator（生成器）产生 solution
    \item Evaluator（评估器）验证并给出 feedback
    \item 接受则输出，拒绝则基于 feedback 重新生成
\end{itemize}
\end{knowledgebox}

\subsection{初始解质量的决定性作用}

\begin{warningbox}{成功的关键在于初始解}
如果 Step 2 生成的初始解与正确解有较大的 overlap，那么经过后续的验证-修正循环大概率能最终 solve 问题。但如果初始解的方向就是错的（偏差太远），后续的纠正大概率救不回来。
\end{warningbox}

\subsection{本章小结}

整个 Workflow 是一个标准的 Generate-Verify-Correct 迭代循环，终止条件基于连续通过/失败次数的计数。

\section{Step 1 Prompt 分析：生成初始解}

\subsection{Prompt 结构}

Step 1 的 System Prompt 是一个标准的结构化 Markdown 文本，分为三部分：

\begin{enumerate}
    \item \textbf{核心指令}：
    \begin{itemize}
        \item 严谨性至关重要（IMO 大部分是证明题，最终判据是逻辑严谨性）
        \item 诚实对待结果——不要硬凹（避免 Reward Hacking）
        \item 全文使用 LaTeX
    \end{itemize}
    \item \textbf{输出格式（Adaptive Prompt）}：
    \begin{itemize}
        \item Summary：包含 Verdict（是否找到完整方案）和方法概述
        \item Detailed Solution：详细的解决方案
    \end{itemize}
    \item \textbf{Self-Verification 指令}
\end{enumerate}

\subsection{输出格式的设计意图}

\begin{importantbox}{Verdict 用于分支判断}
Summary 中的 Verdict 不仅是信息展示，更是后续 Workflow 的\textbf{分支判断依据}——如果 Verdict 为 false（未找到完整解），则跳过后续验证，直接重新 sample。Detailed Solution 则送入 Verification 环节。
\end{importantbox}

本文代码使用\textbf{正则表达式}提取这些结构化输出（而非结构化输出 API），因为 Gemini 2.5 Pro 的指令遵循能力足够强。

\subsection{Step 2：Self-Improvement}

Step 2 与 Step 1 \textbf{共享上下文}。其 Prompt 很简单：``你有一个机会改进你的结果——仔细 review 你的 solution，纠正错误，填充 justification gap。''

引入 Step 2 的原因是 Step 1 中 Thinking Budget（32768 tokens）可能被打满，模型被迫仓促结束思考。Step 2 给予模型继续思考的机会。

\subsection{本章小结}

Prompt 设计的精髓在于：结构化输出为后续 Workflow 的分支判断和数据流向提供了基础。

\section{Verification Prompt 分析}

\subsection{Verifier 的角色与指令}

Verification 的 System Prompt 同样是结构化 Markdown，包含：

\begin{enumerate}
    \item \textbf{角色扮演}：你是卓越的数学家，IMO 级别严谨的审阅人
    \item \textbf{核心说明}：你\textbf{仅仅是 Verifier，不是 Solver}——不要尝试纠正错误或填充 gap，只需 step by step 验证
    \item \textbf{问题分类}：
    \begin{itemize}
        \item \textbf{Critical Error}：严重逻辑错误（如 $A > B, C > D$ 推出 $A-C > B-D$）
        \item \textbf{Gap}：跳步、逻辑断裂
    \end{itemize}
    \item \textbf{输出格式}：Summary（含 Verdict：valid/invalid）+ List of Findings（bug report）+ Detailed Verification Log
\end{enumerate}

\begin{warningbox}{Verifier 不应尝试解题}
Verification Prompt 明确要求 Verifier 不要尝试纠正错误或填充 gap，只做验证。这种\textbf{角色分离}是 Workflow 设计的关键——Generator 和 Verifier 各司其职。
\end{warningbox}

\subsection{本章小结}

Verification Prompt 通过严格的角色定义和结构化输出格式，确保 Verifier 只做验证、不做求解，其输出的 Verdict 和 Bug Report 驱动后续的 Correction 和循环终止判断。

\section{Correction 与迭代循环}

\subsection{Correction 环节}

当 Verifier 判定 solution 无效时，提取 bug report 送入 Correction 环节：
\begin{itemize}
    \item 输入：原始问题 + 当前 solution + bug report
    \item Prompt：``Below is a bug report. If you agree with it, fix the issues. Your output should follow the system prompt instructions.''
    \item 输出：修正后的新 solution
\end{itemize}

\subsection{完整迭代流程}

以第一道题为例：
\begin{enumerate}
    \item 初始探索：Step 1 + Step 2 生成初始解
    \item 验证：Verifier 判定 No（有 bug）
    \item 纠正：基于 bug report 生成新解 $\rightarrow$ 验证 No $\rightarrow$ 纠正 $\rightarrow$ 验证 No
    \item 第 4 次纠正后通过验证：correct count = 1
    \item 连续验证通过 5 次，最终接受
    \item 共经历 8 次迭代，外部循环仅 1 次 run
\end{enumerate}

\subsection{本章小结}

整个迭代循环展示了 Actor-Critic 模式的强大：即使初始解有多处错误，通过反复的验证-纠正循环，最终可以收敛到正确解。

\section{Gemini API 使用注意事项}

\begin{knowledgebox}{技术细节}
\begin{itemize}
    \item Gemini API 的角色是 system / user / model（而非 system / user / assistant）
    \item Thinking 输出是 summarize 后的结果，不是原生的 thinking 过程
    \item Thinking Budget 设置为 32768 tokens，但实际有时会达到 34000+（控制不严格）
    \item 由于 Thinking 过程很长（数万 token），使用 HTTP Request 容易超时，建议使用 SDK + Streaming
\end{itemize}
\end{knowledgebox}

\section{总结与延伸}

\begin{enumerate}
    \item \textbf{Generate-Verify-Correct 循环}是一个强大且通用的 Workflow 模式，本文在 IMO 问题上的成功验证了其有效性。
    \item \textbf{初始解质量决定成败}：如果初始解方向正确（与标准解有较大 overlap），后续循环大概率能修正细节；如果方向错误，则难以纠正。
    \item \textbf{Prompt 设计是 Workflow 的灵魂}：结构化的输出格式为自动化的分支判断和数据流转提供了基础。
    \item \textbf{角色分离}：Generator 只管生成，Verifier 只管验证，Corrector 只管修正——各司其职是 Multi-Agent 设计的核心原则。
    \item \textbf{Agent 设计的价值}：同样的模型（Gemini 2.5 Pro），通过 Workflow 设计可以从"做不出"变为"金牌水平"。
\end{enumerate}

\end{document}
