ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Agent Lightning 内置的 llm-in-sandbox 生物医学 QA 基准:在沙箱中评测并自动判分 MedXpertQA 选择题

Agent Lightning 内置的 llm-in-sandbox 生物医学 QA 基准:在沙箱中评测并自动判分 MedXpertQA 选择题 Agent Lightning 内置的 llm-in-sandbox 生物医学 QA 基准在沙箱中评测并自动判分 MedXpertQA 选择题【免费下载链接】agent-lightningThe absolute trainer to light up AI agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-lightningAgent Lightning 的examples/llm-in-sandbox示例内置了完整的 llm-in-sandbox 评测框架vendor 于 examples/llm-in-sandbox/vendor/llm-in-sandbox其中biomed任务基于 MedXpertQA 的 500 道多选题评测沙箱内代码求解能力。读完本文你将掌握如何在无额外依赖的前提下运行生物医学基准、读懂该任务的提示词与判分实现、区分llm-in-sandbox与原生 LLM--mode llm两种评测模式并了解同一套 reward 函数如何被 Agent Lightning 的训练侧复用。一、biomed 任务概述零依赖的医学多选题基准biomed 任务说明给出了该任务的完整定义题目来源MedXpertQA 多选题共500 题依赖无需额外安装任何第三方包这是它在全部 benchmark 任务中区别于math需math-verify等任务的关键特点运行方式llm-in-sandbox benchmark --task biomed llm-in-sandbox benchmark --task biomed --mode llm # vanilla LLM 模式不带沙箱作对照指标选择题 Accuracy选项为字母 A-Z。判分器支持\boxed{A}、Answer: A等多种输出格式数据集Hugging Face 上的daixuancheng/llm-in-sandbox-bench加载时指定 config 为biomed。任务目录仅由四个文件构成这也是 llm-in-sandbox 框架下自定义任务的标准形态可参考 benchmark 总览 中的任务列表文件职责config.yaml数据集加载参数 系统提示词/实例提示词 容器内路径reward.py答案提取与判分compute_scorevanilla_llm_prompt.py原生 LLM 模式下的 prompt 构造README.md任务说明二、任务配置数据集、提示词与容器路径biomed/config.yaml 同时承担了两类配置1) 数据集加载参数dataset: daixuancheng/llm-in-sandbox-bench config: biomed split: test在 runner.py 的load_dataset_from_config中可以看到其解析逻辑当dataset不是json时调用load_dataset(dataset_name, config, splitsplit)从 Hugging Face 拉取默认 split 为test若dataset为json则改为加载本地 JSON 文件相对路径以 benchmark 目录为基准解析。biomed 因此走的是 HF 远程加载路径这正是文档中无额外依赖成立的原因——datasets是llm-in-sandbox包自身声明的依赖见 pyproject.toml。2) 提示词与容器内工作区配置中的system_prompt明确定义了一个医疗代码求解专家角色其核心约束包括WORKFLOW要求必须把代码写入文件并执行禁止只在脑中想答案或直接硬编码计算结果必须写入{output_dir}/answer.txtIMPORTANT_NOTES答案文件中只能包含选项字母A/B/C/D不得含解释文本指定用execute_bash运行命令、str_replace_editor创建answer.txt、submit结束任务ENCOURAGED_APPROACHES鼓励在隔离环境中安装包、建文件、跑实验越计算化越好ANTI_HARDCODING明确禁止用大段注释/print进行自然语言思考禁止answer A式硬编码要求通过真实计算逻辑推导结果。instance_prompt则把{problem_statement}包裹在problem标签中并再次强调只写单个字母到{output_dir}/answer.txt。文件末尾指定容器内路径output_dir: /testbed working_dir: /testbed值得注意的是提示词中的{output_dir}、{working_dir}、{input_dir}三个占位符由 runner 在运行时做字符串替换填充。在run_single_problem中可以看到从 prompt config 读取三个路径默认分别为/testbed、/testbed/documents、/testbed再逐一str.replace进 system/instance prompt——使用str.replace而非模板引擎是为了保留{problem_statement}这类后续才替换的占位符。三、执行流程加载任务、并行跑题与产物落盘llm-in-sandbox benchmark --task biomed入口在 cli.py 的run_benchmark。关键行为参数解析优先级CLI 参数 环境变量 配置文件 默认值。其中LLM_NAME、LLM_BASE_URL、LLM_API_KEY、LLM_TEMPERATURE、LLM_NUM_WORKERS五个环境变量均可对应 CLI 参数模式校验--mode只接受llm或llm-in-sandbox默认后者镜像检查仅llm-in-sandbox模式会检查并自动拉取默认 Docker 镜像cdx123/llm-in-sandbox:v0.1见ensure_docker_image--mode llm不启动容器输出目录自动创建output/{timestamp}_{task}_{llm_name}_{mode_suffix}/目录模式后缀为LLMinSandbox或vanillaLLM。随后委托给 runner.py 的run_benchmark其流程为通过load_task_config读取benchmark/biomed/config.yaml通过load_reward_function动态导入benchmark/biomed/reward.py并强制要求其中定义compute_score依赖早检启动前先试调用compute_score(test, test)若抛出ImportError则提前报错终止biomed 只用了标准库re因此不存在这类风险并行度为 1 时顺序执行大于 1 时用ProcessPoolExecutor按题并行并对 SIGINT/SIGTERM 注册清理钩子中断时清理容器单题超时上限为 30 分钟超时记 0 分并写errorTimeout产物结构output/{timestamp}_biomed_{model}_{LLMinSandbox}/ ├── logs/ # 每题一个 {problem_id}.txt控制台输出 结果摘要 ├── trajectory.json # 每题的轨迹、reward、agent_answer、ground_truth └── results.json # 配置快照 统计total / mean_score / num_errors / 耗时其中mean_score即最终报告的 Accuracy。每道题的日志尾部会打印Problem ID / Agent Answer / Ground Truth / Score摘要见 runner.py#L404-L416出错题目也会落一份错误日志并以 0 分计。在llm-in-sandbox模式下单题由create_agent_runner驱动为每题启动一个DockerRuntime容器、注入任务级 system/instance prompt、运行Agent.run受max_steps约束最后直接在容器内执行cat {output_dir}/answer.txt取出答案文本——也就是说判分对象是容器里 answer.txt 的内容而不是模型的原始对话。四、指标实现多格式答案提取与精确判分biomed 的 reward.py 实现了文档所述\boxed{A}、Answer: A均可识别的判分逻辑整体分三层1)\boxed{}提取extract_from_boxed从最后一个\boxed{起做花括号深度配对支持嵌套无\boxed时原样返回。2) 多模式答案提取extract_multiple_choice_answer按优先级依次尝试六种格式顺序模式示例1answer: XJSON 形式answer: C2Answer: X兼容中文冒号Answer: C/答案C3answer/choice is XThe answer is C4\boxed{...}中提取到的首字母\boxed{C}5全文最后一个独立大写字母 A-Z兜底6文本首字母C, because ...3) 最终判分compute_score先做整串精确匹配答案文件内容去掉空白后与标准答案忽略大小写比对不命中再走提取逻辑命中即 1.0否则 0.0。由于 biomed 的 system prompt 强制答案文件只含单个字母实践中大多数样本会走第一条精确匹配路径提取逻辑主要兜住格式漂移的情况。判分调用侧在 runner.py#L399-L402compute_score(agent_answer, ground_truth, **problem_kwargs)——会把题目中除ground_truth外的字段作为 kwargs 传入为需要题面信息的任务级判分留出扩展点。五、--mode llm原生 LLM 对照模式biomed 的 vanilla_llm_prompt.py 只做一件事def create_prompt(problem_data): return problem_data[problem_statement]即把原始题面直接作为 user message 发给模型不携带沙箱 system prompt。对应的执行路径是 runner.py 的run_vanilla_llm单次create_chat_completion调用max_tokens取--max_response_len默认 65536并内置了一套 token 上限重试策略——遇到上下文超限错误时解析错误信息中的 max_context 与 input tokens自动下调 completion 长度重试最多 5 次下限 8192 tokens限流则等待 60 秒重试。因此--task biomed --mode llm给出的分数可以视为同一模型不带代码能力的基线与默认沙箱模式同场对比正好服务于 LLM-in-Sandbox 项目沙箱显著提升非代码领域表现的核心论点。六、同一套 reward 如何接入 Agent Lightning 训练biomed 判分器并不只服务于离线 benchmark。Agent Lightning 示例的训练侧适配器 examples/llm-in-sandbox/agents/runner.py 中维护了一张 reward 模块映射表其中biomed_mini: llm_in_sandbox.benchmark.biomed.reward训练/验证 rollout 在容器内跑完后适配器从 stdout 的##########分隔块中提取答案再调用同一个compute_score计算 reward并通过 AGL 事件接口上报。这与 docs/12-example-llm-in-sandbox.md 中的数据准备对应验证数据包含biomed_miniHF configbiomed_mini的testsplit默认文件为examples/llm-in-sandbox/data/llm_sandbox_biomed_mini/test_verl.json。换句话说离线 benchmark 用的 500 题biomedconfig 与训练验证用的biomed_mini属于同一数据集族而判分口径完全一致——评测分数与训练 reward 之间不存在两套标准。七、参数速查与排障benchmark 子命令的完整参数表CLI 参数优先于环境变量参数环境变量说明默认值--task任务名biomed 等必填--llm_nameLLM_NAME模型名必填--llm_base_urlLLM_BASE_URLAPI 端点--api_keyLLM_API_KEYAPI key--modellm-in-sandbox或llmllm-in-sandbox--num_workersLLM_NUM_WORKERS并行 worker 数1--temperatureLLM_TEMPERATURE采样温度Qwen3 系列建议 0.71.0--max_steps最大 agent 步数沙箱模式100--max_response_len最大响应长度仅原生 LLM 模式65536--extra_body附加 JSON body如思考开关排障要点来自 benchmark 总览CtrlC 中断后可能残留容器可用docker ps -aq --filter ancestorcdx123/llm-in-sandbox:v0.1 | xargs -r docker rm -f清理若 runner 抛出Docker daemon is not running or crashed类错误检测containerd.sock/connection refused后主动终止整个 benchmark见 runner.py#L437-L445按文档给出的 containerd/dockerd 重启流程恢复并适当调低LLM_NUM_WORKERS。小结biomed 任务以500 题 一份 config.yaml 一个纯标准库 reward的最小结构展示了 llm-in-sandbox 基准体系的完整闭环HF 数据集一键加载、任务级提示词约束沙箱行为、答案经容器内 answer.txt 落盘、多格式提取后精确判分且同一判分逻辑被 Agent Lightning 的 K8s rollout 训练流程直接复用。对想复现生物医学域评测、或对照沙箱/原生两种模式的读者llm-in-sandbox benchmark --task biomed及其--mode llm对照命令即可开箱即用。【免费下载链接】agent-lightningThe absolute trainer to light up AI agents.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-lightning创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表