image
VincentWei

天地间,浩然正气长存,为天地立心,为生民立命,为往圣继绝学,为万世开太平!

免责声明:网站内容仅供个人学习记录,禁做商业用途,转载请注明出处。

版权所有 © 2017-2020 NEUSNCP个人学习笔记 辽ICP备17017855号-2

JitRL 智能运动训练处方生成智能体

VincentWei    2026年8月12日 10:16:52


JitRL 智能运动训练处方生成智能体

基于 JitRL(无梯度更新的 LLM Agent 持续强化学习) 技术,结合六级约束优先级六大标准化业务模块,自动生成个性化运动训练处方。

目录


核心特性

1. JitRL 无梯度持续强化学习

不同于传统强化学习需要更新模型权重,JitRL 通过以下机制实现 LLM Agent 的持续策略改进:

  • 经验回放缓冲区:持久化存储 (state, action, reward, outcome) 经验元组,支持基于人员画像相似度的 top-k 检索

  • 奖励模型:5 维加权奖励信号(完成率 30% + 无疼痛 25% + 疲劳适中 15% + 约束满足 20% + 体能进步 10%)

  • 无梯度策略改进:检索高质量历史经验作为 LLM in-context 示例,无需更新模型权重即可改进策略

  • ε-greedy 探索利用:以 ε 概率随机探索新策略,1-ε 概率利用最优经验

  • 自我反思:基于奖励分生成反思总结,指导后续处方优化

2. 六级约束优先级

严格执行六级约束优先级,数值越小优先级越高:

优先级 模块 说明
P1 动作风控过滤器 匹配伤病/FMS 限制,输出禁做动作(强约束)
P2 体能素质调度器 主攻素质训练频次高于普通保持素质
P3 肌群间隔编排器 同一大肌群训练间隔≥48 小时
P4 1RM 负重换算引擎 自动计算力量动作训练重量
P5 四周周期渐进控制器 适应期降量、提高期超负荷、稳定期维持
P6 时长 & 增幅控制器 单日≤90 分钟,相邻周增幅≤10%

3. 六大标准化业务模块

每个模块独立可测试,通过 Agent 编排器串联执行。

4. 双 LLM 后端

  • Ollama:本地大模型,适合隐私敏感场景

  • vLLM:高吞吐推理服务,适合生产环境

5. 双入口

  • CLI:命令行交互,支持文件输入与交互式生成

  • FastAPI:RESTful API,支持系统集成


系统架构

┌─────────────────────────────────────────────────────────────┐
│                     输入参数(JSON)                          │
│  运动负荷指数 | 体能短板 | 人员信息 | 健康伤病信息            │
│  体测记录 | 历史训练执行记录 | 个性化训练需求                 │
└──────────────────────────┬──────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│              JitRL 持续强化学习层                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │ 经验回放缓冲区│◄─│  奖励模型   │  │  无梯度策略改进     │  │
│  │ (top-k检索)  │─►│ (5维加权)   │  │ (in-context示例)    │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
└──────────────────────────┬──────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│              六级约束优先级编排器                              │
│  P1 风控过滤 → P2 体能调度 → P3 肌群间隔                     │
│  → P4 1RM换算 → P5 周期渐进 → P6 时长增幅                    │
└──────────────────────────┬──────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                    输出运动训练处方                            │
│  禁做动作 | 每周计划 | 1RM负重 | 周期渐进 | 约束检查 | 建议     │
└─────────────────────────────────────────────────────────────┘

快速开始

1. 环境要求

  • Python ≥ 3.10

  • 可选:Ollama 或 vLLM 服务(用于 LLM 增强)

  • 可选:Neo4j 数据库(用于知识图谱检索,缺省回退到内置知识库)

2. 安装依赖

cd /home/z/my-project
pip install -r requirements.txt

3. 运行示例

# CLI 方式生成处方
python -m jitrl_agent.cli generate -i examples/sample_input.json -o output/prescription.json
​
# 启动 FastAPI 服务
python -m jitrl_agent.cli serve --host 0.0.0.0 --port 8000

4. 查看结果

处方将保存到 output/prescription.json,同时在终端输出格式化的训练计划表格。


输入参数说明

输入 JSON 包含以下顶层字段:

字段 类型 说明
latestExerciseLoadIndex float/null 最新一条训练记录的运动负荷指数
fitnessWeakness string[] 体能短板数组(标准体能素质名称)
personInfo object 人员基础信息
healthInfo object 健康伤病信息
fitnessTestRecords object[] 体能测试记录数组
trainExecuteRecords object[] 历史训练执行记录数组
trainDemand object 训练需求与硬性约束条件

完整示例见 examples/sample_input.json


六级约束优先级

P1: 动作风控过滤器(最高优先级)

  • 输入healthInfo.currentAilment(强约束)+ healthInfo.pastInjury(弱约束)

  • 处理:基于 Neo4j 标签隔离图谱检索,匹配动作风险标签与伤病关键词

  • 输出:禁做动作列表(含冲突原因)、谨慎动作列表、安全动作池

  • 回退:Neo4j 不可用时回退到内置 34 个动作的知识库

P2: 体能素质调度器

  • 主攻素质来源fitnessWeakness + mainTrainGoal 解析 + 体测短板自动检测

  • 调度策略:主攻素质训练频次倍率 1.5×,保持素质 1.0×

  • 输出:每周各素质训练次数分布

P3: 肌群间隔编排器

  • 约束:同一大肌群训练间隔≥48 小时(核心肌群 24 小时,恢复更快)

  • 算法:交错排列,避免同一素质连续两天训练

  • 回退:某素质无可用动作时,自动回退到其他可用素质

P4: 1RM 负重换算引擎

  • 1RM 估算:基于体重 × 动作系数(青少年降权 0.85,女性降权 0.7)

  • 训练百分比:适应期 60% / 提高期 75% / 稳定期 70%

  • 输出:目标训练重量 kg、1RM 估算值、训练百分比

P5: 四周周期渐进控制器

  • 阶段划分:适应期 25% / 提高期 50% / 稳定期 25%

  • 负荷系数:适应期 0.60 / 提高期 0.70-0.80 / 稳定期 0.75

  • 训练量系数:适应期 0.80(降量)/ 提高期 1.10(超负荷)/ 稳定期 1.00(维持)

P6: 时长 & 增幅控制器

  • 单日时长:≤90 分钟(可配置),超时自动裁剪末尾动作

  • 周增幅上限:≤10%(可配置),超限自动下调

  • 约束检查:输出违反列表,用于自我反思修正


JitRL 持续强化学习

核心机制

JitRL 实现了无梯度更新的 LLM Agent 持续强化学习,核心流程:

1. 初始化:从历史训练记录批量构建经验缓冲区
2. 检索:基于人员画像相似度检索 top-k 高质量经验
3. 生成:将经验作为 in-context 示例注入 LLM prompt
4. 执行:生成处方并执行
5. 反馈:记录执行结果,计算奖励,更新经验缓冲区
6. 改进:下次生成时利用更丰富的经验

奖励模型

5 维加权奖励(0~1):

维度 权重 计算方式
完成率 30% 动作平均完成率
无疼痛 25% 训练中无疼痛=1,有疼痛=0
疲劳适中 15% 轻微疲劳=1,无疲劳=0.5,重度=0
约束满足 20% 处方通过所有约束检查=1
体能进步 10% 体测成绩提升=1

经验回放缓冲区

  • 持久化:JSON 文件存储,重启不丢失

  • 检索:基于人员画像相似度(年龄、性别、BMI、短板、伤病)

  • 容量:默认 500 条,FIFO 淘汰

  • top-k:默认检索 3 条高质量经验作为示例


LLM 后端配置

Ollama(默认)

# 启动 Ollama 服务
ollama serve
​
# 拉取模型
ollama pull qwen2.5:7b
​
# 环境变量配置
export JITRL_LLM_BACKEND=ollama
export OLLAMA_BASE_URL=http://localhost:11434
export OLLAMA_MODEL=qwen2.5:7b

vLLM

# 启动 vLLM 服务
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen2.5-7B-Instruct \
  --port 8000
​
# 环境变量配置
export JITRL_LLM_BACKEND=vllm
export VLLM_BASE_URL=http://localhost:8000
export VLLM_MODEL=Qwen/Qwen2.5-7B-Instruct
export VLLM_API_KEY=EMPTY

无 LLM 模式

当 LLM 后端不可用时,系统自动回退到纯规则引擎模式,仍可生成完整处方(仅缺少 LLM 增强的自然语言建议)。


Neo4j 知识图谱

启用 Neo4j

# 环境变量配置
export NEO4J_ENABLED=true
export NEO4J_URI=bolt://localhost:7687
export NEO4J_USER=neo4j
export NEO4J_PASSWORD=your_password
export NEO4J_DATABASE=neo4j

图谱标签隔离

Neo4j 图谱使用以下标签进行隔离检索:

  • :Action - 动作节点

  • :Injury - 伤病节点

  • :MuscleGroup - 肌群节点

  • :Equipment - 器械节点

  • :Person - 人员节点

内置知识库回退

当 Neo4j 不可用时,系统回退到内置 34 个动作的知识库,包含:

  • 下肢爆发力动作(徒手深蹲、靠墙静蹲、臀桥等)

  • 核心稳定性动作(平板支撑、死虫式、鸟狗式等)

  • 上肢力量动作(俯卧撑、哑铃划船、哑铃肩推等)

  • 柔韧性动作(坐位体前屈、猫牛式等)


API 接口文档

启动服务后访问 http://localhost:8000/docs 查看交互式 API 文档。

核心接口

1. 生成运动训练处方

POST /api/prescription/generate
Content-Type: application/json
​
{
  "latestExerciseLoadIndex": 520.0,
  "fitnessWeakness": ["下肢爆发力", "核心稳定性"],
  ...
}

2. 记录训练执行结果(JitRL 持续学习)

POST /api/prescription/record-execution
Content-Type: application/json
​
{
  "person_input": { ... },       // 原始输入
  "prescription": { ... },       // 生成的处方
  "execution": {                  // 执行结果
    "execId": "E002",
    "trainDate": "2026-08-15",
    "actionExecuteDetail": [
      {"actionDesc": "徒手深蹲", "finishRate": 0.9}
    ],
    "exerciseLoadIndex": 580.0,
    "subjectiveFatigue": "轻微疲劳",
    "inTrainingPain": false
  }
}

3. 查询经验缓冲区

GET /api/jitrl/experiences?limit=20

4. 健康检查

GET /api/health

CLI 命令

生成处方

python -m jitrl_agent.cli generate \
  -i examples/sample_input.json \
  -o output/prescription.json \
  --backend ollama \
  --neo4j

启动服务

python -m jitrl_agent.cli serve --host 0.0.0.0 --port 8000 --reload

交互式生成

python -m jitrl_agent.cli interactive

项目结构

jitrl_agent/
├── __init__.py                    # 包入口
├── config.py                      # 全局配置
├── agent.py                       # Agent 编排器
├── cli.py                         # CLI 入口
├── models/
│   ├── enums.py                   # 枚举定义
│   └── schemas.py                 # Pydantic 数据模型
├── knowledge/
│   ├── action_library.py          # 内置动作库(34个动作)
│   ├── muscle_mapping.py          # 肌群映射
│   ├── fitness_standards.py       # 体能测试标准
│   └── neo4j_client.py            # Neo4j 知识图谱客户端
├── llm/
│   ├── base.py                    # LLM 客户端基类
│   ├── ollama_client.py           # Ollama 客户端
│   └── vllm_client.py             # vLLM 客户端
├── modules/                       # 六大业务模块
│   ├── risk_filter.py             # P1 动作风控过滤器
│   ├── fitness_scheduler.py       # P2 体能素质调度器
│   ├── muscle_arranger.py         # P3 肌群间隔编排器
│   ├── one_rm_calculator.py       # P4 1RM 负重换算引擎
│   ├── periodization.py           # P5 四周周期渐进控制器
│   └── duration_controller.py     # P6 时长增幅控制器
├── rl/                            # JitRL 持续强化学习层
│   ├── experience_buffer.py       # 经验回放缓冲区
│   ├── reward_model.py            # 奖励模型
│   └── jitrl_trainer.py           # JitRL 训练器
└── api/
    └── server.py                  # FastAPI 服务

配置参数

所有参数均可通过环境变量覆盖:

环境变量 默认值 说明
JITRL_LLM_BACKEND ollama LLM 后端(ollama/vllm)
OLLAMA_BASE_URL http://localhost:11434 Ollama 服务地址
OLLAMA_MODEL qwen2.5:7b Ollama 模型名
VLLM_BASE_URL http://localhost:8000 vLLM 服务地址
VLLM_MODEL Qwen/Qwen2.5-7B-Instruct vLLM 模型名
NEO4J_ENABLED false 是否启用 Neo4j
NEO4J_URI bolt://localhost:7687 Neo4j 连接地址
DAILY_MAX_MINUTES 90 单日训练时长上限
WEEKLY_LOAD_INCREMENT_CAP 0.10 周负荷增幅上限
MUSCLE_GROUP_INTERVAL_HOURS 48 肌群间隔小时数
JITRL_BUFFER_SIZE 500 经验缓冲区容量
JITRL_TOP_K 3 检索 top-k 经验数
JITRL_EPSILON 0.15 探索率 ε

示例输出

运行 python -m jitrl_agent.cli generate -i examples/sample_input.json 后,系统将输出:

  • 处方 ID:唯一标识

  • 禁做动作:12 个踝关节相关动作被禁做

  • 4 周周期计划

    • 第 1 周(适应期):负荷 249.6

    • 第 2 周(提高期):负荷 274.8(+10%)

    • 第 3 周(提高期):负荷 302.4(+10%)

    • 第 4 周(稳定期):负荷 332.8(+10%)

  • 交错排列:周一(下肢)、周二(核心)、周四(下肢)、周五(核心),周三休息

  • 1RM 负重:哑铃罗马尼亚硬拉 25.8kg(60%) → 32.2kg(75%) → 30.1kg(70%)

  • JitRL 元信息:缓冲区 1 条经验,平均奖励 0.875

  • 约束检查:全部通过

https://cdn.neusncp.com/public/file/20260812101647_UkZVINCO.docx
最近更新: 2026年8月12日 10:16:52
浏览: 13

[[total]] 条评论

添加评论
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]楼
  2. 点击加载更多……
  3. 添加评论