个人简介
作者简介:全栈研发,具备端到端系统落地能力,专注大模型的压缩部署、多模态理解与 Agent 架构设计。 热爱“结构”与“秩序”,相信复杂系统背后总有简洁可控的可能。
我叫观熵。不是在控熵,就是在观测熵的流动
个人主页:观熵
个人邮箱:[email protected]
座右铭:愿科技之光,不止照亮智能,也照亮人心!
观熵系列专栏导航:
AI前沿探索:从大模型进化、多模态交互、AIGC内容生成,到AI在行业中的落地应用,我们将深入剖析最前沿的AI技术,分享实用的开发经验,并探讨AI未来的发展趋势
AI开源框架实战:面向 AI 工程师的大模型框架实战指南,覆盖训练、推理、部署与评估的全链路最佳实践
计算机视觉:聚焦计算机视觉前沿技术,涵盖图像识别、目标检测、自动驾驶、医疗影像等领域的最新进展和应用案例
国产大模型部署实战:持续更新的国产开源大模型部署实战教程,覆盖从 模型选型 → 环境配置 → 本地推理 → API封装 → 高性能部署 → 多模型管理 的完整全流程
TensorFlow 全栈实战:从建模到部署:覆盖模型构建、训练优化、跨平台部署与工程交付,帮助开发者掌握从原型到上线的完整 AI 开发流程
PyTorch 全栈实战专栏: PyTorch 框架的全栈实战应用,涵盖从模型训练、优化、部署到维护的完整流程
深入理解 TensorRT:深入解析 TensorRT 的核心机制与部署实践,助力构建高性能 AI 推理系统
Megatron-LM 实战笔记:聚焦于 Megatron-LM 框架的实战应用,涵盖从预训练、微调到部署的全流程
AI Agent:系统学习并亲手构建一个完整的 AI Agent 系统,从基础理论、算法实战、框架应用,到私有部署、多端集成
DeepSeek 实战与解析:聚焦 DeepSeek 系列模型原理解析与实战应用,涵盖部署、推理、微调与多场景集成,助你高效上手国产大模型
端侧大模型:聚焦大模型在移动设备上的部署与优化,探索端侧智能的实现路径
行业大模型 · 数据全流程指南:大模型预训练数据的设计、采集、清洗与合规治理,聚焦行业场景,从需求定义到数据闭环,帮助您构建专属的智能数据基座
机器人研发全栈进阶指南:从ROS到AI智能控制:机器人系统架构、感知建图、路径规划、控制系统、AI智能决策、系统集成等核心能力模块
人工智能下的网络安全:通过实战案例和系统化方法,帮助开发者和安全工程师识别风险、构建防御机制,确保 AI 系统的稳定与安全
智能 DevOps 工厂:AI 驱动的持续交付实践:构建以 AI 为核心的智能 DevOps 平台,涵盖从 CI/CD 流水线、AIOps、MLOps 到 DevSecOps 的全流程实践。
C++学习笔记?:聚焦于现代 C++ 编程的核心概念与实践,涵盖 STL 源码剖析、内存管理、模板元编程等关键技术
AI × Quant 系统化落地实战:从数据、策略到实盘,打造全栈智能量化交易系统
大模型运营专家的Prompt修炼之路:本专栏聚焦开发 / 测试人员的实际转型路径,基于 OpenAI、DeepSeek、抖音等真实资料,拆解 从入门到专业落地的关键主题,涵盖 Prompt 编写范式、结构输出控制、模型行为评估、系统接入与 DevOps 管理。每一篇都不讲概念空话,只做实战经验沉淀,让你一步步成为真正的模型运营专家。
GRPO策略优化、强化学习策略模型、DeepSeek智能体决策模型、Agent行为策略架构、高维状态建模、多模态状态输入、tool选择策略、策略头结构设计、reward反馈机制、text+table+image输入融合、prompt编码策略、策略网络联合优化、RL输入结构、策略输出结构设计、动作参数建模、multi-head策略网络结构、agent训练路径优化
本篇深入解析 DeepSeek 强化智能体系统中基于 GRPO(Generalized Reinforcement Policy Optimization)策略的智能体行为决策机制。从高维输入建模出发,我们将详细讲解智能体如何编码文本、表格、图像等多模态状态输入,如何将行为链中的 memory / context / prompt 映射为可学习向量,如何设计多头策略网络(Tool Select Head + Action Param Head),以及 GRPO 如何在多 Agent 任务中保持策略一致性与可调优性。目标是帮助工程实践者构建具备泛化能力与可训练结构的 RL 智能体策略内核。
传统做法:
if "搜索" in prompt:
call(tool="search")
或者简单分类器:
ToolClassify(prompt) → "search_agent"
这种做法存在严重问题:
策略模型的本质:从状态空间中抽象 agent 行为偏好 → 映射成可执行动作。
GRPO(Generalized Reinforcement Policy Optimization)不是一个单独算法,而是一类策略建模框架,具备以下特性:
特性 | 描述 | 对 DeepSeek 的意义 |
---|---|---|
高维状态输入 | 可接入 text / table / image 等结构 | 支持多模态行为链调度 |
多头策略输出 | 支持 Tool 分类 + 参数生成分开优化 | 精准控制 tool 行为与调用配置 |
灵活目标函数 | 支持 reward 多源融合(trace / callback / user) | 可适应多种训练方式(RL / imitation) |
可组合结构 | encoder-decoder / transformer / graph 都可封装 | 可集成 DeepSeek 现有行为链结构 |
输出维度 | 含义 |
---|---|
tool_select_logits |
多工具选择概率分布 |
action_params |
工具调用参数结构(如关键词、查询方式) |
confidence_score |
当前行为决策置信度 |
terminate_signal |
是否中止链路执行 |
最终建议统一为结构化行为输出:
{
"tool": "search_agent",
"params": {
"query": "分析三季度营收趋势",
"method": "fuzzy"
},
"confidence": 0.91
}
GRPO 策略模型是 DeepSeek 的智能决策中枢,其作用包括:
层级 | 功能 | 模块位置 |
---|---|---|
推理入口 | 接收 prompt / memory / context | Reasoner 调度前 |
状态理解 | 将模态拼接结构编码为 state embedding | ContextEncoder |
策略输出 | 输出 tool + 参数结构 | ToolHead + ParamHead |
trace 写入 | 结构行为写入 trace_event | TraceWriter.record(“REASONER_ACTION”) |
training 输入 | 转为 RL Sample | sample_builder.from_reasoner_output(…) |
项目 | 建议 |
---|---|
策略模型建议分为 encoder × tool_head × param_head 三层 | 便于状态感知 × 动作输出解耦优化 |
context / memory_entry 建议标准化为 text_feature × modal_embedding | 保证状态输入一致性 |
tool_head 输出建议支持 masking(某些工具不可用时) | 保证执行链安全性 |
每次策略输出建议写入 trace_event (type=“REASONER_ACTION”) | 支持行为链 replay / diff |
trace_id × policy_version 建议绑定写入行为结构 | 支持后续策略优化效果回溯 |
在 DeepSeek 推理系统中,一个策略模型面对的输入远不是一个单一的 prompt,而是一个复杂、高维、多模态状态场,由以下几部分构成:
输入源 | 内容类型 | 来源路径 |
---|---|---|
memory_entry | 上下文语义片段(文本 + 结构) | MemoryStore.query(context_id) |
当前 prompt | 用户输入 / 上轮行为指令 | Reasoner context builder |
tool observation | 上一步 tool 调用结果摘要 | Callback.result |
多模态输入 | 表格 / 图像 / 混合任务结构 | ToolInput / API Upload Input |
当前链路状态 | 是否调用过 tool、调用是否失败等 | LangGraph 状态片段 |
这些都必须编码进策略网络的状态向量中。
{
"type": "tool_result",
"content": "search_result: 三季度营收上涨23%",
"created_by": "search_agent",
"timestamp": 1714012345
}
建议做以下处理:
content
:tokenize + position embeddingcreated_by
:嵌入为 Agent Embedding(如 planner / searcher)type
:使用 type embedding(如 INPUT / TOOL_RESULT / USER_FEEDBACK)timestamp
:作为时间偏移位置 ID(支持时间对齐)建议拼接格式:
[TYPE_EMB] + [AGENT_ID_EMB] + [POSITION_EMB] + Token(content)
可统一输入 ContextEncoder:
class ContextEncoder:
def encode(memory_entries: List[MemoryEntry]) -> Tensor:
...
表格的状态是结构化数据,建议建模方式:
模型模块 | 功能 |
---|---|
TableSchemaEncoder | 将字段名、表头转为嵌入向量 |
TableCellEncoder | 将部分重要值采样或摘要为语义内容 |
TableAttentionLayer | 多字段之间的依赖信息建模 |
TableSummaryVector | 最终表格摘要向量,供策略头使用 |
示例结构:
table_emb = TableEncoder(headers=["营收", "利润"], rows=[[230, 32], ...])
可采用 TAPAS / TabTransformer 或结构 prompt 编码策略。
图像通常来自用户上传或上游工具输出,建议处理流程:
示例:
image_vector = image_encoder(img_tensor) # shape: [1, 768]
caption = ocr_model(img) # 生成辅助描述
最终拼接:
[IMG_EMB] + [OCR_TOKENS] + [MEMORY_TOKENS] + [PROMPT]
Prompt 中建议加入以下控制结构:
模块 | 建议机制 |
---|---|
position_id | 区分 memory / prompt / feedback 的 token 区段 |
field_id | 标注字段来源(如来自 planner / searcher) |
task_id embedding | 标注当前推理任务所属模块类型 |
prefix_embedding | 在 Prompt 前加入 Prompt 类型(问答 / 摘要 / 多轮)嵌入项 |
这些控制信号可帮助策略模型精准识别:
状态融合策略:
state = concat(context_vec, table_vec, image_vec, prompt_vec)
可作为策略模型主干输入 PolicyNet.forward(state)
。
项目 | 建议 |
---|---|
memory_entry 建议标准化字段:type / created_by / content | 支持统一位置嵌入与 agent embedding |
prompt 编码建议支持 token 分区(prefix / core / suffix) | 有助于模型识别 Prompt 结构 |
image / table 模态建议使用统一 ModalityEncoder 封装 |
减少策略头结构改动 |
context 编码建议支持“摘要 + 原文”两种粒度配置 | 适配不同精度/性能要求 |
状态向量结构建议输出 shape: [batch_size, feature_dim] |
与策略 head 对接无缝融合 |
在强化智能体系统中,一个优秀的策略网络不仅要做出动作选择,更要具备:
能力 | 描述 |
---|---|
状态理解 | 能识别 memory、模态输入、上下文状态的行为含义 |
多策略头输出 | 支持“选择谁”(Tool Select)与“怎么用”(Param 生成)分开建模 |
输出结构可控 | 动作结构必须明确可执行(结构化 JSON) |
可训练性 | 每一个输出项都能在 RL 框架中被独立打分和优化 |
StateEncoder → PolicyHead → ActionOutput
ToolSelectHead
: 输出 tool logitsParamGenHead
: 输出 tool params(query / flags / weights)结构示意图:
class ToolSelectHead(nn.Module):
def forward(self, state):
raw_logits = self.linear(state) # [batch, num_tools]
masked_logits = mask_invalid_tools(raw_logits, tool_mask)
return F.softmax(masked_logits, dim=-1)
class ParamGenHead(nn.Module):
def forward(self, state):
hidden = self.encoder(state)
param_vec = self.param_mlp(hidden) # e.g. [batch, 64]
return self.decode_param(param_vec)
建议设计为:
模块 | 功能 |
---|---|
MLP Encoder | 对 state 编码结构进行压缩 |
ParamDecoder | 输出结构化参数(如 query string、filter type、数值 threshold) |
输出格式 | 推荐 JSON-compatible 结构,如 {"query": "xxx", "filter": "strict"} |
建议所有输出封装为标准结构体:
class StructuredAction:
def __init__(self, tool: str, params: dict, confidence: float, terminate: bool):
...
最终写入:
{
"tool": "table_summarizer",
"params": {
"summary_type": "trend",
"time_range": "Q1-Q3"
},
"confidence": 0.87,
"terminate": false
}
模块 | Loss 类型 | 数据源 | 用途 |
---|---|---|---|
ToolSelectHead | CrossEntropy / PPO | trace 中实际调用工具名 | 主策略方向学习 |
ParamGenHead | MSE / BERTScore / RL reward | 工具执行结果 + 回调反馈 | 动作参数调优 |
Confidence Score | regression + reward | callback outcome × user_feedback | 不确定性评估 |
你可以将这几个 loss 加权组合:
total_loss = w1 * tool_loss + w2 * param_loss + w3 * confidence_loss
w1/w2/w3
可动态调整,或基于 reward value 自适应加权(如 GRPO 原始论文策略)。
项目 | 建议 |
---|---|
tool_logits 输出建议保留 raw_logit + softmax prob | 支持 RL policy gradient 回传 |
param_head 建议可配置输出 schema(JSON Schema 模式) | 保证工具调用合法性 |
action 输出结构建议强绑定 trace_id + policy_version | 用于 replay + debug + version trace |
多策略头建议各自独立 loss track,可多路 reward 分析 | 提高调优灵活性 |
所有输出建议打包为 StructuredAction,可直接写入 memory / trace | 保证行为链结构完整性 |
你系统中的 Reasoner 并不是“生成文本”的模块,而是:
接收状态 → 输出 StructuredAction → 控制下一跳行为链路径(执行 tool / 生成 plan / 中止链路)
所以,策略模型输出必须具备:
功能 | 描述 |
---|---|
可执行性 | 能被 ToolRouter / Dispatcher 直接调用(含 tool 名与参数) |
可观测性 | 能被 trace_writer 写入行为链,供 replay / debug / RL 使用 |
可训练性 | 能与 reward 结构挂钩,形成强化学习反馈路径 |
可重建性 | 行为路径必须在 replay 时原样复现,无随机丢失 |
建议将所有策略输出打包为如下结构:
class StructuredAction:
tool: str # 工具名
params: dict # 工具调用参数
confidence: float # 策略置信度
terminate: bool # 是否结束本轮推理
policy_version: str # 当前策略模型版本
并在行为链中记录为 trace_event:
{
"type": "REASONER_ACTION",
"trace_id": "xyz",
"context_id": "ctx-abc",
"tool": "chart_generator",
"params": {"target_column": "Q3_profits"},
"confidence": 0.83,
"terminate": false,
"policy_version": "grpo-v2.0"
}
def route_action(structured_action: StructuredAction):
if structured_action.terminate:
return EndNode()
else:
return ToolExecutor.invoke(
tool=structured_action.tool,
params=structured_action.params
)
你可以构建:
每一轮 Reasoner 行为建议同步写入:
模块 | 内容 | 用途 |
---|---|---|
trace_writer | tool + params + confidence + policy_version | 用于 trace view / RL replay |
memory_writer | 内容摘要 + 原始参数 | 用于 prompt 重建 |
reward_store | trace_id → action × reward | 用于 RL sample 评分对齐 |
并提供 replay 结构:
class ActionTrace:
def __init__(self, trace_id, step_id, action: StructuredAction, memory_context):
...
用于:
推荐结构:
class TraceDiffer:
def compare(trace_a: str, trace_b: str) -> List[DiffStep]
输出结构:
[
{
"step": 2,
"tool_v1": "search_agent",
"tool_v2": "summarizer_agent",
"confidence_diff": 0.18,
"param_diff": {"query": "changed"}
}
]
应用场景:
模块 | 建议 |
---|---|
Reasoner 输出建议为 StructuredAction | 支持统一 trace × tool 执行链 |
所有策略调用建议写入 trace_event(带版本) | 用于训练回放与策略评估 |
trace_view 建议支持 StructuredAction 解析视图 | 显示 tool / param / confidence / terminate 路径 |
MemoryEntry 可存储参数摘要 → PromptBuilder 用于上下文回放 | 形成“基于策略链”的 prompt 重建能力 |
支持 TraceDiffer.compare(trace_id_v1, trace_id_v2) | 构建策略行为对比评估链 |
在你系统中,一个典型任务链可能包括:
planner_agent → search_agent → summarizer_agent → feedback_agent
每个 Agent 拥有独立角色:
Agent | 功能 | 策略需求 |
---|---|---|
planner_agent | 分解任务、规划路径 | 是否调用工具?调用顺序? |
search_agent | 提取信息 | 搜什么?怎么搜? |
summarizer_agent | 合成结果 | 哪些信息有用?如何组织? |
feedback_agent | 打分建议 | 如何评价行为?是否干预策略? |
所以,策略模型不是共享的黑盒,而是可组合、可独立调优的策略系统结构。
策略类型 | 架构特征 | 适用场景 |
---|---|---|
独立训练(per-Agent) | 每个 Agent 拥有独立策略头(tool / param / reward) | 模块解耦、训练更稳定 |
联合训练(multi-Agent policy) | 多个 Agent 共享 encoder,策略结构可互相影响 | 任意角色协同、支持行为融合 |
推荐组合策略:
ContextEncoder
(memory / prompt 编码层)PolicyHead
(ToolHead + ParamHead)示例结构:
class MultiAgentPolicy(nn.Module):
def forward(self, state, agent_id):
shared_vector = self.encoder(state)
agent_head = self.policy_heads[agent_id]
return agent_head(shared_vector)
一条 trace 行为链包含多个 agent 行为片段:
[
{"agent": "planner_agent", "tool": "search_agent", "reward": 0.4},
{"agent": "search_agent", "tool": "table_extractor", "reward": 0.9},
{"agent": "summarizer_agent", "tool": "summarizer", "reward": 1.0}
]
你可以按 agent_id 构建:
class RewardRouter:
def assign(trace_id) -> Dict[agent_id, List[RLSample]]:
...
建议构建:
class PolicyRegistry:
def register(agent_id, policy_version, model: nn.Module)
def route(agent_id, context) -> current_version
def compare(trace_id_v1, trace_id_v2) → diff
用于:
你可以记录:
{
"trace_id": "abc123",
"agent_versions": {
"planner_agent": "v1.2",
"search_agent": "v2.1",
"summarizer_agent": "v1.5"
}
}
用于调试 / 对比 / 回放 / 策略训练样本追踪。
你可以为每个 Agent 的行为链构建:
{
"agent": "search_agent",
"step": 2,
"tool": "data_search",
"param": {"query": "营收增长趋势"},
"confidence": 0.82,
"reward": 0.9,
"policy_version": "v2.1"
}
并生成链式可视结构:
graph TD
A[planner v1.2 → search_agent] --> B[search v2.1 → table_extractor]
B --> C[summarizer v1.5 → summarizer]
用于:
模块 | 建议 |
---|---|
每个 Agent 拥有独立 PolicyHead,结构支持多样化(分类器 / 参数生成器) | 保证策略可控性 |
context_encoder 建议共享,输入支持 agent_id embedding | 统一模态状态建模 |
trace_event 建议记录每次策略动作结构 + policy_version | 支持行为链复现与训练数据追踪 |
PolicyRegistry 建议具备版本对比、上线管控、AB测试控制能力 | 实现企业级可演化策略系统 |
reward_router 建议支持 trace_id → agent_id → sample 分发机制 | 提高训练数据隔离性与可靠性 |
本篇系统拆解了 DeepSeek 强化智能体中的策略模型结构设计。从 GRPO 核心理念出发,我们逐步构建了:
点个赞,给我一些反馈动力
⭐ 收藏起来,方便之后复习查阅
关注我,后续还有更多实战内容持续更新
写系统,也写秩序;写代码,也写世界。
观熵出品,皆为实战沉淀。