PraisonAI Train 实战指南:LLM 微调与 Agent 迭代训练的完整方案
2026/9/16 17:43:44 网站建设 项目流程

PraisonAI Train 实战指南:LLM 微调与 Agent 迭代训练的完整方案

【免费下载链接】PraisonAIPraisonAI 🦞 — Hire a 24/7 AI Workforce. Stop writing boilerplate and start shipping autonomous self-improving agents that research, plan, code, and execute tasks. Deployed in 5 lines of code with built-in memory, RAG, and support for 100+ LLMs.项目地址: https://gitcode.com/GitHub_Trending/pr/PraisonAI

PraisonAI Train 是 PraisonAI 多智能体生态中的训练组件,负责两条训练路径:一是基于 Unsloth 的开源大模型微调(Llama、Qwen 等),二是通过 LLM-as-Judge 或人类反馈对 Agent 行为进行迭代式改进。本文以 praisonai-train/README.md 为主线,结合仓库源码与配置文件,系统讲解安装方式、两条训练路径的完整命令、配置参数、数据集工具(generate/validate/from-trials)以及会话管理与应用机制,读完即可上手"让 Agent 自己变强"的闭环流程。

一、PraisonAI Train 是什么

PraisonAI Train 是一个可独立安装的 Python 包(praisonai-train),也可作为完整praisonai栈的一部分使用。它解决了两个核心问题:

  1. Agent 行为训练:不需要 GPU、不需要微调模型,通过"运行 Agent → LLM 裁判打分/人工反馈 → 把改进建议回灌给 Agent → 重跑"的迭代循环,让同一个 Agent 在一次会话内持续改进回答质量。
  2. LLM 参数微调:基于 Unsloth 对开源模型(Llama、Qwen 等)做 LoRA 微调,需要 GPU 与完整 ML 依赖栈。

从源码结构看,该包的核心模块分布在 praisonai_train/train/(agent 训练与 LLM 训练两条路径)、praisonai_train/data/(数据集生成与质检)以及 praisonai_train/cli/(命令行入口)三大部分。

命令速览

命令做什么需要 GPU/ML 依赖?
praisonai-train agents --input "What is Python?"运行 Agent,用 LLM 裁判给答案打分,把改进建议反馈回去,循环迭代
praisonai-train agents --input "Explain AI" --human同样的循环,但由人工给出反馈
praisonai-train llm dataset.json用 Unsloth 在数据集上微调开源模型(Llama、Qwen 等)
praisonai-train list/show/apply浏览训练会话、查看详情、把最佳迭代应用到 Agent
praisonai-train generate --config generate.yaml从教师 LLM 合成指令数据集(含去重、可续跑)
praisonai-train validate data/tamil.jsonl --out data/clean.jsonl数据集质检/过滤(去重、样板话与拒答、脚本纯度、多样性指标)
praisonai-train from-trials trials.json -o data/train.jsonl从验证试验报告中导出通过样本为训练集
praisonai-train export ollama\|gguf\|hf导出已训练好的模型到 Ollama / GGUF / HuggingFace
praisonai-train remote tail/stop远程 GPU 机器上训练任务的日志跟踪与停止否(远端需要)

CLI 入口定义在 cli/commands/train.py,通过main.py 注册为praisonai-train命令。

二、安装与依赖

按需选择安装方式

# Agent 训练专用(轻量级) pip install praisonai-train # + LLM 微调(重 ML 栈:torch、unsloth、trl 等) pip install "praisonai-train[llm]" # 或者作为完整 PraisonAI 栈的一部分(同样的命令通过 `praisonai train ...` 使用) pip install "praisonai[train]"

基础依赖在 pyproject.toml 中声明,仅包含praisonaiagents>=1.6.126litellm>=1.0rich>=13.7typer>=0.12.0click>=8.4.2PyYAML>=6.0——这正是 Agent 训练(通过praisonaiagentsBaseLLMGraderlitellm.completion()打分)所需的全部运行时依赖。[llm]extra 则额外拉入torch>=2.6.0unsloth>=2025.9.1trl>=0.18.2peftbitsandbytestransformers>=4.51.3等重 ML 栈,以及praisonai-codepraisonaillm命令会桥接到 code 层的 CLI runner 进行数据集调度,见 train.py 中_dispatch_remoteimport_code_module相关逻辑)。

GPU 环境推荐 conda 安装

GPU 环境通常更推荐 conda 安装方式,它会固定 CUDA 兼容的版本:

setup-conda-env # 或: bash praisonai_train/setup/setup_conda_env.sh

setup-conda-env同样注册为独立命令(见 pyproject.toml 的[project.scripts]),其实现位于 setup/setup_conda_env.py 与 setup/setup_conda_env.sh。

三、快速上手:2 分钟训练一个 Agent

Agent 训练是轻量路径的核心卖点——无需 GPU,无需微调,靠的是迭代反馈循环。

export OPENAI_API_KEY=sk-... # 最多三轮改进迭代,LLM 充当裁判 praisonai-train agents --input "Explain quantum entanglement to a 10-year-old" --iterations 3 # 查看训练过程 praisonai-train list praisonai-train show <session-id> # 应用最佳迭代,并与改进后的 Agent 对话 praisonai-train apply <session-id> --run "And what about Germany?"

注意--iterations设置的是训练循环的最大轮数。在 LLM-as-Judge 模式下,当任何一轮得分达到≥ 9.5(优秀)时训练会提前停止,所以简单提示词可能一轮就结束。传--no-early-stop强制跑完全部轮次,或传--verbose查看何时停止。

Python API 等效写法

from praisonaiagents import Agent from praisonai_train import AgentTrainer, TrainingScenario agent = Agent(instructions="You are a helpful assistant.") trainer = AgentTrainer(agent=agent, iterations=3) trainer.add_scenario(TrainingScenario(id="demo", input_text="What is Python?")) report = trainer.run() report.print_summary()

底层实现:AgentTrainer 的循环逻辑

从源码看,AgentTrainer 的run()方法核心循环为:

  1. 对每个TrainingScenario(包含idinput_text、可选expected_outputcontext,见 models.py)逐个迭代;
  2. 首轮直接用原始输入调用 Agent;后续轮次通过_build_improvement_prompt()把上一轮的分数、反馈与改进建议拼进提示词(格式为[FEEDBACK FROM PREVIOUS ATTEMPT]块),再让 Agent 重跑;
  3. 打分:LLM 模式调用TrainingGrader,人工模式调用_get_human_feedback()交互式收集 1–10 分、反馈文本与逗号分隔的建议;
  4. 每次迭代记录TrainingIteration(输入、输出、分数、反馈、建议、时间戳与元数据)并持久化;
  5. 当分数 ≥ 9.5 且未禁用提前停止、且还有剩余轮次时,置early_stopped=True并中断;
  6. 汇总生成TrainingReport,提供avg_scoremin_scoremax_scoreimprovement(末轮减首轮分数)、passed(平均分 ≥ 7.0 判定通过)等统计属性。

值得注意的健壮性设计:Agent 运行失败(如 provider 不可达、凭据错误、超时)会被直接向上抛出,而不会作为训练数据被裁判打分后入库,避免把错误字符串训练进 Agent(源码注释明确说明该设计意图)。Agent 可以是AgentAgents或任意可调用对象,_get_agent_output()会按callablechat方法 →start方法三种形态适配。

LLM 裁判的实现

TrainingGrader 继承自praisonaiagents.eval.grader.BaseLLMGrader,复用其提示词构建、响应解析、惰性 litellm 导入与同步/异步打分逻辑,默认模型为gpt-4o-mini、温度为 0.1(保证打分一致性)、max_tokens=500。可通过--model参数替换裁判模型。

四、快速上手:微调一个 LLM

pip install "praisonai-train[llm]" # dataset.json 需为 ShareGPT 或 Alpaca 格式;config.yaml 不存在时会自动生成 praisonai-train llm dataset.json --model llama-3.1

LoRA rank、epochs、量化方式、Ollama/HuggingFace 导出等调参项都集中在config.yaml中——模板见 setup/config.yaml。

llm命令的完整参数

cli/commands/train.py 中定义了完整参数,其中值得单独抽出为 flag 的调参项如下:

参数说明示例值
dataset(位置参数)训练数据集路径;当--config指定了数据集时可省略dataset.json
--config/-c训练配置 YAML,其下所有 flag 会覆盖它config.yaml
--model/-m基础模型llama-3.1
--method训练方法sftcptdpoorpokto
--max-seq-length序列长度2048
--epochs训练轮数(设置--max-steps时忽略)1
--max-steps最大步数10
--learning-rate学习率2.0e-4
--batch-size每设备批大小2
--grad-accum梯度累积步数2
--lora-rLoRA 秩16
--lora-alphaLoRA alpha16
--output-dir检查点输出目录outputs
--chat-template聊天模板名依模型而定
--dry-run只打印解析后的配置并退出,不训练
--verbose/-v详细输出
--remote-host/--remote-python/--remote-workdir/--remote-gpusSSH 远程训练:在远端机器执行训练gpubox

配置优先级与 dry-run

实现上采用"文件为基线、flag 叠加其上"的优先级:_resolve_config()先加载--config指定的 YAML,再合并 flag 覆写。--dry-run会打印最终解析结果并标注哪些值来自 flag,同时验证远程设置(如配置了remote块)——在租用 GPU 之前先看清将要执行的配置,避免"预览一套、实际训练另一套"的偏差。真正运行时,解析后的配置会物化写入当前目录的config.yaml(若该文件已存在则先备份为config.yaml.bak),再由 legacy 调度器读取执行。

配置模板详解

setup/config.yaml 是微调配置的完整模板,核心字段如下:

  • 保存与模型ollama_save/huggingface_save/train开关;model_name(默认unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit);hf_model_nameollama_model用于发布;model_parameters8b
  • LoRA 参数lora_r: 16lora_alpha: 16lora_dropout: 0lora_bias: "none"lora_target_modules(默认覆盖q_proj/k_proj/v_proj/o_proj/gate_proj/up_proj/down_proj全部线性层)、use_rslora: falseloftq_config: null
  • 数据加载dataset为列表,每项可含name(数据集 id 或本地路径)、split_typeprocessing_func(如format_prompts)、rename(字段重命名)、filter_data/filter_column_value/filter_value(按列过滤)、num_samples(采样数);另有dataset_text_field: "text"dataset_num_proc: 2packing: false
  • 训练超参per_device_train_batch_size: 2gradient_accumulation_steps: 2warmup_steps: 5num_train_epochs: 1max_steps: 10learning_rate: 2.0e-4optim: "adamw_8bit"weight_decay: 0.01lr_scheduler_type: "linear"seed: 3407output_dir: "outputs"
  • 量化load_in_4bit: truequantization_method: ["q4_k_m"]

模板后半部分给出了大量可安全省略的可选配置(注释形式):检查点与续训(save_strategysave_stepssave_total_limitresume_from_checkpointfinal_model_dir)、从训练集切分验证集并取最优检查点(val_split_ratioeval_strategyload_best_model_at_endmetric_for_best_model)、早停(early_stopping_patience)、多 GPU(torchrun --nproc_per_node=N -m praisonai_train.train.llm.trainer train --config config.yaml启动,ddp_find_unused_parameters)、精度(dtype: "bfloat16"load_in_8bitfull_finetuning)、高级 LoRA(use_doramodules_to_save)以及任意原始SFTConfig字段的透传(training_arguments)。

导出训练好的模型

训练完成后可用export子命令发布,无需重跑训练:

# 发布到 Hugging Face praisonai-train export hf --model-dir lora_model --hf me/my-model # 生成本地 GGUF 文件(可配合 serve 使用) praisonai-train export gguf --model-dir lora_model --quant q4_k_m # 本地 GGUF + 推送 Hub praisonai-train export gguf --model-dir lora_model --hf me/my-model # 创建并推送 Ollama 模型 praisonai-train export ollama --model-dir lora_model --ollama me/my-model --quant q4_k_m

--mtp-draft/--no-mtp-draft可额外下载 Gemma-4 的 MTP draft 模型以加速推理(对应 train/_mtp.py)。模型名会优先取--base-model、其次取训练后模型config.json_name_or_path、最后回退到目录名,用于聊天模板选择。

五、数据集工具:generate + validate

合成指令数据集(generate)

从教师 LLM 合成指令数据集,支持配方驱动与 YAML 配置:

# 用配方 + 多样性轴、JSON 模式、去重、可续跑偏移量合成数据 praisonai-train generate --config generate.yaml praisonai-train generate -r tamil -d gpt-4o -n 1000 -o data/tamil.jsonl

generate.yaml 的字段包括:

字段说明
recipe已注册的配方名(如tamil),或内联配方{system, template, axes}
deployment教师模型 / Azure deployment 名(如gpt-4o
azuretrue表示 Azure OpenAI;false表示 OpenAI 兼容接口
num_examples生成条数
concurrency并发数(如 50)
start_offset起始偏移,可让多个并行 worker 使用不相交偏移
output输出 JSONL 路径
snapshot_every每 N 行写一次增量快照
dedup_from已有 JSONL 文件列表,生成时跳过其中已覆盖的指令
stop_file触摸该文件即可立即停止(熔断开关)

质量检查与过滤(validate)

# 质检/过滤(去重、样板话与拒答、脚本纯度、多样性指标) praisonai-train validate data/tamil.jsonl --out data/clean.jsonl

脚本纯度默认是泰米尔语(Tamil)。QC 过滤器会丢弃低于目标 Unicode 区块纯度下限的输出,该区块默认是泰米尔语(script_range: [2944, 3071] # U+0B80–U+0BFF,见 validate.yaml)。其他语言必须显式设置script_range(例如拉丁语用[65, 591]),否则非泰米尔语输出会被标记为low_script_purity而丢弃。

validate.yaml 完整字段:

字段说明
input/output输入与过滤后输出路径
min_output_chars最小输出字符数(默认 20)
near_dup是否开启近似去重
near_dup_jaccardJaccard 阈值(默认 0.7,等价于 Self-Instruct 的 ROUGE-L 0.7)
script_range目标 Unicode 区块[起始, 结束]
script_drop低于此脚本纯度则丢弃(默认 0.50)
script_flag在 drop 与 flag 之间则标记保留(默认 0.70)

generatededup一样,validate原子性地重写--out文件;当零行通过时,保留已有文件不动。要向流程添加语言/领域,只需注册一个Recipe;要添加新的 QC 规则,注册一个RowCheck(实现见 praisonai_train/data/),它们会自动出现在工具中。

六、从真实 Agent 运行学习:verify → export → train → re-verify

除了合成数据,还可以在 Agent自己经过验证的行为上进行微调。给定一份 trials 报告(每个 case 有 K 次带轨迹的打分尝试),from-trials会保留通过的尝试并写出可直接用于训练的 ShareGPT 数据集——把"验证"到"数据生成"的闭环闭合起来:

# 1) 把通过的尝试导出为 ShareGPT 数据集(附带 provenance 边车文件) praisonai-train from-trials trials.json -o data/train.jsonl # 2) 用现有训练器微调,无需任何改动 praisonai-train llm data/train.jsonl # 3) 在微调后的模型上重跑 trials,对比通过率衡量提升

Python API 等价写法:

from praisonai_train.data import export_trials summary = export_trials( report, "data/train.jsonl", only_passed=True, # 基于验证器的拒绝采样(默认) frontier_only=True, # 跳过饱和 / 零通过 case(默认) ) print(summary) # written / skipped_failed / skipped_tool_runs / skipped_no_text / ...

选择逻辑与边车文件

  • 未打分的尝试永远不会成为候选;
  • only_passed只保留验证器通过的尝试;
  • frontier_only只保留0 < pass_rate < 1的 case(饱和 case 只会重复已掌握行为的近重复样本,零通过 case 则无内容可导出);
  • 默认排除使用工具的运行(--all--include-saturated可放宽这些限制);
  • 输出旁会生成{out}.jsonl.meta.json边车文件,把每一行映射到其 case id、尝试索引和分数,且发射顺序是确定性的 → 文件可复现;
  • --qc可让行通过 QC 过滤器(去重、样板话/拒答、长度、多样性)——泰米尔脚本纯度检查在此被跳过,因为 Agent 轨迹默认是英文的;要为其他语言重新启用脚本检查,给export_trialsqc_cfg并带script_range(及/或显式的script_drop/script_flag),这些键中的任何一个都会以 QC 过滤器自身默认值重新启用检查;
  • --format alpaca可输出 instruction/input/output 格式。

诚实的筛选only_passed本质是拒绝采样——它放大的是 Agent 已经能产生的行为,并会继承判定该运行"通过"的打分器/裁判的任何偏差。它无法教会 Agent 从未展示过的行为;请把它当作对已验证胜利的强化,而不是一个万能预言机。

该功能的实现位于 praisonai_train/data/export_trials.py,并有对应的单元测试 tests/unit/data/test_export_trials.py。

七、训练会话管理:list / show / apply

会话存储

每次 Agent 训练会话以train-{8位hex}的 ID 标识(见 orchestrator.py 中self.session_id = f"train-{uuid.uuid4().hex[:8]}"),数据默认以 JSON 文件形式存放在~/.praison/train/目录(storage.py 中DEFAULT_STORAGE_DIR)。

存储支持三种可插拔后端(--storage-backend参数):

后端说明示例
file默认 JSON 目录存储--storage-backend file --storage-path /data/train
sqliteSQLite 数据库--storage-backend sqlite --storage-path /data/train.db
redis://urlRedis 存储,键前缀train:--storage-backend redis://localhost:6379

TrainingStorage内部复用praisonaiagents.storage.base.BaseJSONStore(线程安全、带文件锁),每个会话一个 JSON 文件,包含 scenarios、iterations 与 report 三部分。SQLite 后端会保持数据库连接,因此TrainingStorage实现了close()与上下文管理器协议,避免 Windows 上的PermissionError与未关闭数据库的资源警告。

命令一览

# 列出最近会话(默认 20 个,-n 调整;-j 输出 JSON) praisonai-train list # 查看会话详情;--iterations 展开详细轮次;--json 输出 JSON praisonai-train show train-abc123 praisonai-train show train-abc123 --iterations praisonai-train show train-abc123 --json # 应用最佳迭代(默认取最高分轮次) praisonai-train apply train-abc123 # 应用指定迭代 praisonai-train apply train-abc123 --iteration 2 # 应用到 YAML 文件定义的 Agent 并立即运行 praisonai-train apply train-abc123 --agent my_agent.yaml --run "Hello, how are you?"

show会高亮最佳迭代("Best Iteration: #N (Score: X/10)"),并按分数给每次迭代加星标、预览反馈前 50 字符;--iterations时额外展示前 3 条改进建议。

apply 的工作机制

apply把会话中最高分(或指定)迭代的改进建议整理为TrainingProfile(含agent_namesuggestionsquality_scoresummaryiteration_numsession_id),再通过 hooks 注入到 Agent 的运行时提示词中。--run指定提示词时,会创建/加载 Agent、应用训练配置,并立即用该提示词跑一遍给出改进后的回答;未指定--run时则打印后续操作指引(CLI 与 Python API 两种形式)。

八、Agent 训练 CLI 完整参数

praisonai-train agents子命令(train.py)支持以下参数:

参数默认值说明
agent_file(位置参数)Agent YAML 文件路径(Python 文件支持在开发中)
--iterations/-n3最大训练迭代数;LLM 模式下得分达 9.5 提前停止
--no-early-stopFalse即使得分达 9.5 也跑完全部迭代
--human/-hFalse使用人工反馈代替 LLM 打分
--scenarios/-sscenarios JSON 文件路径(list 或{scenarios: [...]}结构)
--input/-i单条训练输入(与 scenarios 文件二选一)
--expected/-e该输入的期望输出(可选)
--output/-o~/.praison/train/训练数据输出目录
--model/-mgpt-4o-mini打分的 LLM 裁判模型
--verbose/--quiet/-v/-qTrue详细进度输出
--dry-runFalse只打印将执行的内容不实际运行
--storage-backend存储后端:filesqliteredis://url
--storage-path存储后端路径(file 目录或 sqlite db 路径)

常用示例:

# 单条输入 praisonai-train agents --input "What is Python?" # 带期望输出 praisonai-train agents --input "What is 2+2?" --expected "4" # 用 scenarios 文件训练多个场景 praisonai-train agents --scenarios scenarios.json # 人工反馈模式 praisonai-train agents --input "Explain AI" --human # 更多迭代 praisonai-train agents --input "Hello" --iterations 5 # 从 Agent YAML 文件 + scenarios 文件 praisonai-train agents my_agent.yaml --scenarios scenarios.json

九、在 PraisonAI 栈中的位置

praisonaiagents (核心 SDK) ├── praisonai-code (终端 CLI) ├── praisonai-bot (bots & gateway) └── praisonai-train (本包) └── praisonai (wrapper: 一键安装全部)
  • 仅依赖praisonaiagents——无循环依赖,可独立安装;
  • 安装完整栈后,同样的命令可通过praisonai train ...使用;
  • 旧导入路径(praisonai.train.agentspython -m praisonai.train.llm.trainer)通过 wrapper shim 保持可用(对应 praisonai_train/_wrapper_bridge.py 与 _code_bridge.py)。

从依赖方向看,包内还有专门的导入方向门禁检查(train 包不得反向导入 wrapper),相关脚本见 scripts/check_c10_train_imports.sh,边界细节记录在 src/praisonai/tests/PRAISONAI_TRAIN_MANIFEST.md。

十、开发与测试

在 monorepo 根目录下:

# 运行 agent 训练相关单元测试 cd src/praisonai-train PYTHONPATH="../praisonai-agents:." python -m pytest tests/unit/train -q # 导入方向门禁检查(train 不得导入 wrapper) bash ../../scripts/check_c10_train_imports.sh

单元测试覆盖了训练主链路与周边设施,例如 tests/unit/train/test_orchestrator.py(训练循环与提前停止)、test_grader.py(LLM 裁判)、test_storage.py(会话存储),以及 tests/unit/data/ 下的数据集工具测试(test_dedup.pytest_export_trials.pytest_generate_progress.py等)。

总结

PraisonAI Train 提供了一条"从轻到重"的完整训练路径:

  1. 轻量 Agent 训练:无需 GPU,agents命令借助 LLM-as-Judge 或人工反馈,通过迭代循环让单个 Agent 的回答质量在数分钟内提升;
  2. 数据集工程generate合成指令数据、validate质检过滤、from-trials从 Agent 自身已验证行为导出训练集;
  3. 重量 LLM 微调llm命令基于 Unsloth 完成 LoRA 微调,全部调参项集中在config.yaml,支持export发布到 Ollama / GGUF / HuggingFace,也支持远程 GPU 训练;
  4. 闭环管理list/show/apply让"训练 → 评估 → 应用 → 再验证"成为可复现、可审计的工作流。

无论是想快速改进 Agent 行为,还是准备在领域数据集上微调自己的开源模型,PraisonAI Train 都提供了开箱即用的完整工具链。

【免费下载链接】PraisonAIPraisonAI 🦞 — Hire a 24/7 AI Workforce. Stop writing boilerplate and start shipping autonomous self-improving agents that research, plan, code, and execute tasks. Deployed in 5 lines of code with built-in memory, RAG, and support for 100+ LLMs.项目地址: https://gitcode.com/GitHub_Trending/pr/PraisonAI

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询