\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{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}{veRL Agentic Loop 代码详解}
\newcommand{\noteauthors}{基于公开课程资料整理}
\newcommand{\notedate}{2025}
\newcommand{\videochannel}{五道口纳什}
\newcommand{\videopublishdate}{2025}
\newcommand{\videoduration}{约20分钟}
\newcommand{\videourl}{}
\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{引言}
本期深入 veRL 的 Agentic Loop 代码，详细分析 \texttt{agentloop.py} 的实现。

\section{核心类结构}
\subsection{AgentLoopBase}
抽象基类，\texttt{run} 方法是抽象方法，需要用户自定义。官方提供了 Singleton 和 TwoAgents 两种实现。

\subsection{AgentLoopWorker}
封装了单个 Agent 的执行逻辑，管理状态转换。

\subsection{AgentLoopManager}
最核心的类，通过 \texttt{generate\_sequence} 方法协调所有组件：
\begin{itemize}
  \item 管理推理 server
  \item 协调 Worker 的状态
  \item 处理 tool call 的异步执行
\end{itemize}

\section{设计理念}
veRL 的 Agentic Loop 追求：
\begin{itemize}
  \item 简洁的抽象
  \item 高效的异步执行
  \item 灵活的自定义接口
\end{itemize}

\subsection{本章小结}
AgentLoopManager 是 veRL Agentic RL 的大脑，统一管理推理、工具调用和训练的协调。

\newpage
\section{设计含义：抽象层次决定可扩展性}
把 Base、Worker、Manager 三层拆开，并不是为了“代码更好看”，而是为了让 Agentic Loop 可以在不同任务间复用。真正变化最快的是具体任务逻辑，而不是状态管理和推理调度，因此统一抽象层能显著降低后续实验成本。

\begin{knowledgebox}{读框架代码时先看什么}
\begin{itemize}
  \item 哪一层负责统一 orchestration
  \item 哪一层承接具体任务状态
  \item 哪些接口是为了让研究者替换业务逻辑
\end{itemize}
\end{knowledgebox}

\subsection{本章小结}
理解 AgentLoopManager 的最佳方式，不是死记函数名，而是看清哪些职责被稳定地抽象出来，哪些职责被故意留给自定义逻辑。

\newpage
\section{总结与延伸}
\begin{enumerate}
  \item AgentLoopBase $\to$ Worker $\to$ Manager 的层次结构
  \item generate\_sequence 是核心协调方法
  \item 自定义 Agent 只需实现 AgentLoopBase.run
\end{enumerate}
\end{document}
