尧图精选

自托管轻量级LLM基准测试平台:统一API性能评测工具

🕒 发布时间:2026/10/1 4:20:36 📁 来源:尧图网络
1. 项目概述为什么我们需要一个“自托管的轻量化 LLM API 基准测试平台”Uni LLM Bench 这个名字一出来我就在团队内部 Slack 上直接转发了链接并附了一句“别再用 Postman 手动测模型响应时间了这玩意儿能救你命。”——这不是夸张。过去半年里我参与过三个不同规模的 LLM 应用落地项目从金融客服知识库到本地化政务问答助手再到教育机构的作文批改插件无一例外都卡在同一个环节选型验证。我们不是缺模型是缺一套可复现、可对比、可归档、不依赖第三方服务的实测数据。市面上的公开 benchmark比如 LMSYS Org 的 Chatbot Arena跑的是人类偏好打分延迟、吞吐、显存占用、错误率这些工程侧硬指标全靠自己手写脚本临时凑而商业 API 测试平台要么按调用次数收费要么只支持自家模型根本没法把 vLLM、llama.cpp、Ollama、Text Generation Inference 这几套本地部署方案拉到同一张表里横向比。Uni LLM Bench 的核心价值就藏在标题那五个词里“Uni”代表统一接口抽象——它不绑定任何后端推理引擎只要你的服务暴露标准 OpenAI 兼容 API/v1/chat/completions它就能测“LLM Bench”点明本质是基准测试工具不是模型训练框架也不是应用开发平台“自托管”意味着整套系统可以跑在一台 16G 内存的旧笔记本上不需要 Kubernetes 集群或云厂商账号“轻量化”不是营销话术而是实打实的设计选择前端用纯静态 HTMLJS后端用 Flask非 FastAPI原因后面细说数据库用 SQLite不是 PostgreSQL更不是 MongoDB整个 Docker 镜像压缩后不到 85MB最后那个“平台”指的是它提供了任务队列、结果可视化、历史对比、配置快照四大功能模块而不是一堆零散的 Python 脚本。它解决的不是“怎么让模型更好”而是“怎么知道这个模型在你的硬件上到底跑得有多稳、多快、多省”。如果你正在评估 llama-3-8b-instruct 在 RTX 4070 上用 llama.cpp 量化部署后的首字延迟或者想确认 Ollama 的 qwen2:7b 是否真能在树莓派 5 上维持 3 token/s 的稳定输出Uni LLM Bench 就是你该打开的第一个页面。它适合三类人一线算法工程师要交部署报告运维同学要验收 GPU 利用率还有技术负责人需要向业务方展示“为什么我们选这个模型而不是那个”。2. 整体架构设计与技术选型逻辑2.1 为什么拒绝“高大上”坚持“轻量化”路线很多人看到“基准测试平台”第一反应是得上 Prometheus Grafana Kafka 自研 Agent 吧我试过。去年给某银行做私有化大模型网关时我们搭了一套基于 K6 Locust 自研 Metrics Collector 的测试体系光部署文档写了 47 页CI/CD 流水线配了三天最后发现 80% 的测试需求其实就三件事测单次请求延迟、测并发吞吐、看显存峰值。其余功能——比如分布式压测、实时告警、跨机房链路追踪——全都没用上。Uni LLM Bench 的设计哲学很朴素先解决 90% 场景下的 90% 问题再考虑剩下 10% 的扩展性。所以它的技术栈全是“够用即止”的组合后端框架选 Flask 而非 FastAPI不是因为 Flask 更老而是因为它没有 FastAPI 那套强类型校验和自动文档生成的开销。Uni LLM Bench 的 API 请求体极其简单model、prompt、max_tokens、temperature用 Flask 的request.json直接取值比 FastAPI 的 Pydantic Model 解析快 12%-18%实测 1000 次请求平均耗时。更重要的是Flask 的中间件机制更透明我们自己写的benchmark_route装饰器能精准控制计时起点HTTP 头解析完和终点JSON 响应序列化前避免框架层干扰测量精度。数据库用 SQLite 而非 PostgreSQL有人质疑“SQLite 怎么扛并发”——Uni LLM Bench 根本不设计高并发写入。所有测试任务都是串行触发用户点击“开始测试”后系统才启动一个独立进程执行压测结果写入是单线程追加操作。SQLite 的 WAL 模式在这种场景下比 PostgreSQL 的连接池管理更轻量。我们做过对比1000 条测试记录插入SQLite 平均耗时 32msPostgreSQL本地连接平均耗时 89ms差出近 3 倍。而且 SQLite 文件就是bench.db一个文件备份、迁移、清理全靠cp和rm运维成本趋近于零。前端拒绝 React/Vue用原生 JS Chart.js不是技术保守而是为了规避打包体积和运行时开销。Uni LLM Bench 的图表只有两类折线图延迟随并发数变化和柱状图不同模型吞吐对比。Chart.js 的 UMD 版本压缩后仅 127KB加载后内存占用 4MB换成 React光react-dom就要 45KB加上状态管理、路由、组件树 diff首屏 JS 加载超 300KB对部署在老旧办公电脑上的场景极其不友好。我们甚至把 Chart.js 的 tooltip 样式全手动重写去掉所有动画效果确保鼠标悬停时图表渲染帧率稳定在 60fps。容器化用 Alpine Linux Python 3.11Dockerfile 里明确指定FROM python:3.11-alpine3.19而不是python:3.11-slim。Alpine 的 musl libc 比 glibc 小 40%基础镜像仅 15MB。关键好处是llama.cpp 的预编译 wheel 包如llama-cpp-python在 Alpine 上安装成功率 100%而在 Debian-slim 上常因 glibc 版本冲突失败。我们实测最终镜像大小python:3.11-alpine3.19flasksqlite3chart.jspytest 84.7MB比同功能 FastAPIPostgreSQLReact 镜像216MB小 60.7%。2.2 “自托管”的真实含义零外部依赖与最小硬件门槛“自托管”这个词被滥用得太厉害了。很多所谓自托管项目实际运行时仍需外部 Redis 缓存用于任务队列外部 MinIO 存储用于保存原始日志外部 SMTP 服务用于测试报告邮件通知Uni LLM Bench 的自托管是物理级的整个系统只依赖操作系统内核和 Python 解释器。它用 Python 自带的threading模块实现任务队列非 Celery用logging模块将原始请求/响应日志写入本地logs/目录非 ELK用smtplib模块直连企业邮箱 SMTP 服务器无需第三方邮件网关。最硬核的是它的“无状态设计”所有测试配置模型地址、提示词模板、并发数、循环次数都存在 SQLite 的configs表里每次测试启动时读取测试结束写回。没有 session、没有 cookie 加密、没有 JWT token登录用最朴素的 HTTP Basic Auth用户名密码哈希后存 SQLite连bcrypt都没引入直接用hashlib.pbkdf2_hmac(sha256, password.encode(), salt, 100000)—— 因为它默认只供内网使用安全边界由防火墙定义而非密码学强度。硬件门槛低到什么程度我们拿三台设备实测最低配Intel N1002 核 2 线程8GB DDR5无独显—— 可运行 Uni LLM Bench 本身 测试本地 Ollama 的phi3:3.8b模型单并发延迟 1200ms±150ms主流配RTX 4070 笔记本i7-13700H32GB12GB 显存—— 可同时跑 Uni LLM Bench vLLM 的qwen2-7b llama.cpp 的llama3-8b-q4_k_m三模型并发测试互不干扰极限配树莓派 58GBUSB 3.0 接 NVMe SSD—— 可运行 Uni LLM Bench llama.cpp 的tinyllama-1.1b虽无法测大模型但能验证边缘设备部署可行性。关键不在 CPU 或 GPU而在内存带宽和存储 I/O。Uni LLM Bench 自身内存占用恒定在 120MB 左右Python 进程 SQLite 缓存无论你测 1 个模型还是 10 个模型它都不吃额外资源。这才是“轻量化”的本质资源消耗与测试规模解耦。2.3 “Uni”接口抽象层如何兼容五花八门的 LLM 后端Uni LLM Bench 不是模型服务器而是模型服务器的“裁判员”。它不关心你后端用的是 vLLM、TGI 还是 llama.cpp只要满足 OpenAI 兼容 API 规范就行。但现实是各框架的 API 实现有细微差异vLLM 的/v1/chat/completions返回usage.prompt_tokens而 llama.cpp 返回usage.prompt_tokens_countTGI 的streamTrue响应是data: {...}分块llama.cpp 是纯 JSON 数组Ollama 的/api/chat默认返回message.content而 OpenAI 标准是choices[0].message.content。Uni LLM Bench 的解决方案是在请求发出前做标准化在响应收到后做归一化。它内置一个AdapterManager类针对每个后端类型vllm、llamacpp、tgi、ollama、openai维护一份映射规则# adapters/vllm.py def adapt_request(payload): # vLLM 支持 n3 但 Uni LLM Bench 只测单次响应强制设为 1 payload[n] 1 return payload def adapt_response(raw_json): # 统一提取 content 字段 content raw_json[choices][0][message][content] # 统一提取 token 数 usage { prompt_tokens: raw_json.get(usage, {}).get(prompt_tokens, 0), completion_tokens: raw_json.get(usage, {}).get(completion_tokens, 0), total_tokens: raw_json.get(usage, {}).get(total_tokens, 0) } return {content: content, usage: usage}用户添加新后端时只需在adapters/目录下新建一个 Python 文件实现adapt_request和adapt_response两个函数然后在config.py中注册即可。我们已内置 5 种适配器覆盖 95% 的本地部署场景。这种设计让 Uni LLM Bench 具备极强的延展性——上周有用户提交 PR增加了对mlc-llm的支持整个过程只改了 37 行代码无需动核心逻辑。3. 核心功能模块详解与实操配置3.1 基准测试任务创建从“填表”到“精准压测”的全流程Uni LLM Bench 的测试创建界面看似简单但每个字段背后都有工程考量。我们以测试qwen2-7b在 vLLM 上的性能为例拆解完整流程第一步定义测试目标Target Endpoint输入框填http://localhost:8000/v1/chat/completions下拉选择 “vLLM” 作为后端类型。这里的关键是端点健康检查点击“Test Connection”按钮Uni LLM Bench 会发送一个极简请求curl -X POST http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d {model:qwen2-7b,messages:[{role:user,content:hi}],max_tokens:1}它不验证响应内容只检查 HTTP 状态码是否为 200且响应时间 5s。若失败界面直接报错“Connection timeout or 5xx error”避免后续测试因端点不可用而浪费时间。第二步配置提示词模板Prompt Template这是影响测试结果一致性的核心。Uni LLM Bench 提供三种模式固定模板如“请用中文回答以下问题{question}”{question}会被替换成测试集中的问题动态模板支持 Jinja2 语法例如{% if lang zh %}请用中文回答{% else %}Answer in English{% endif %}: {{ question }}配合测试集的lang字段动态生成文件导入上传 JSONL 文件每行一个 JSON 对象含prompt字段支持 10 万行数据内存中流式读取不全量加载。我们实测发现相同模型在不同提示词下延迟差异可达 40%。例如qwen2-7b处理“hi”延迟 320ms处理“请详细解释量子纠缠的物理原理要求分三段每段不少于 200 字”延迟 1850ms。因此 Uni LLM Bench 强制要求用户为每次测试指定明确的提示词策略杜绝“随便测测”的随意性。第三步设置负载参数Load Parameters这才是真正的“压测”灵魂并发数Concurrent Users不是简单的线程数而是模拟的并发连接数。Uni LLM Bench 用aiohttp创建对应数量的 ClientSession每个 session 独立维护连接池循环次数Iterations per User每个并发连接发送的请求数。设为 10则总请求数 并发数 × 10请求间隔Delay between Requests单位毫秒支持固定值如 100ms或泊松分布如poisson(200)模拟真实用户随机访问节奏超时阈值Timeout全局请求超时单位秒。设为 30则任何响应超过 30s 的请求直接标记为失败不计入延迟统计。提示不要盲目提高并发数。我们发现当并发数超过 GPU 显存能容纳的 KV Cache 数量时延迟会指数级上升。例如 RTX 407012GB跑qwen2-7bQ4_K_M 量化理论最大并发约 8-12实测并发 16 时平均延迟从 420ms 暴涨至 2100ms且错误率升至 37%。Uni LLM Bench 的“错误率”指标正是为此而生——它统计 HTTP 500、503、超时及 JSON 解析失败的总占比比单纯看 P95 延迟更能反映系统稳定性。第四步选择测试集Test DatasetUni LLM Bench 自带三个标准测试集alpaca_eval_zh200 条中文指令覆盖问答、摘要、创作mt_bench_zh80 条多轮对话检验上下文保持能力custom用户上传的 CSV/JSONL必须含prompt列。关键细节测试集加载时Uni LLM Bench 会自动计算每条 prompt 的 token 数用 tiktoken 库并按 token 数分桶128、128-512、512-2048、2048。压测时每个并发连接会从对应桶里随机取样确保不同长度 prompt 的负载均衡。这避免了“全测短 prompt 导致显存利用率虚高”的陷阱。3.2 结果可视化与深度分析不只是画几条线测试完成后Uni LLM Bench 的结果页不是简单的“平均延迟420ms”而是提供四层分析维度第一层基础指标仪表盘P50/P90/P99 延迟横轴为并发数纵轴为毫秒三条曲线清晰显示尾部延迟恶化趋势吞吐量Requests/sec红色虚线标出理论最大吞吐如 1000 req/s实际值若持续低于 70%提示存在瓶颈错误率Error Rate %绿色1%、黄色1%-5%、红色5%三色预警显存占用VRAM Usage MB需后端支持nvidia-smi或rocm-smi实时抓取峰值。第二层请求粒度明细表点击任意数据点弹出该并发等级下的全部请求明细SeqStatusLatency(ms)Prompt TokensCompletion TokensFirst Token Latency(ms)Time to Last Token(ms)1OK382421562103822OK415421562254153ERROR-----其中First Token Latency首字延迟和Time to Last Token末字延迟是 LLM 体验的核心。Uni LLM Bench 通过解析 SSE 流式响应或测量choices[0].delta.content的首次出现时间来精确捕获首字延迟误差 5ms。第三层跨测试对比视图这是 Uni LLM Bench 最实用的功能。比如你刚测完qwen2-7b又测了llama3-8b点击“Compare Tests”系统自动生成对比表格Metricqwen2-7b (vLLM)llama3-8b (llama.cpp)DeltaAvg Latency (ms)42058038%P99 Latency (ms)1250210068%Throughput (req/s)8265-21%VRAM Peak (MB)82006100-26%Error Rate (%)0.21.81.6%所有数值均来自同一硬件、同一测试集、同一负载参数排除环境干扰。第四层原始日志导出点击“Export Raw Logs”下载一个.zip文件内含summary.json结构化汇总数据details.csv全部请求明细含 timestamp、response_bodyprompts.txt实际发送的 prompt 文本脱敏处理敏感词替换为[REDACTED]system_info.json测试时的 CPU/GPU 温度、频率、内存占用快照。注意response_body默认不记录完整输出只存前 200 字符 truncated: true/false标志。若需全量日志需在config.py中设置LOG_FULL_RESPONSE True但会显著增加磁盘占用。我们建议仅在调试阶段开启。3.3 配置快照与版本管理让测试可追溯、可复现在生产环境中“上次测试结果”往往变成“玄学”。Uni LLM Bench 用“配置快照”解决这个问题。每次测试启动时系统自动将当前所有参数端点 URL、提示词模板、负载参数、测试集 ID、后端类型序列化为 JSON计算 SHA256 哈希存入snapshots表。快照包含snapshot_id哈希值如a1b2c3d4...created_atISO 时间戳config_hash配置哈希test_id关联的测试记录 IDnotes用户可编辑的备注如 “vLLM 升级至 0.4.2 后测试”。当你点击某个历史测试的“Re-run with same config”Uni LLM Bench 会精确还原当时的所有参数包括已删除的测试集快照里存了原始数据哈希。我们甚至支持“配置差异对比”选中两个快照系统高亮显示所有不同字段比如- max_tokens: 512 → 1024 temperature: 0.7 → 0.95 ! endpoint: http://old-server:8000 → http://new-server:8000这种设计让性能回归测试变得极其可靠。某客户曾用此功能定位到一次线上故障对比两周前的快照发现唯一变化是temperature从 0.7 调到 0.95导致模型输出变长进而引发下游服务超时。没有快照这个根因可能永远找不到。4. 实操部署与避坑指南从零到可用的完整路径4.1 本地快速启动5 分钟上手这是最常用的场景。假设你已装好 Python 3.11 和 Docker执行以下命令# 方式一Docker 一键部署推荐 docker run -d \ --name unillm-bench \ -p 5000:5000 \ -v $(pwd)/data:/app/data \ -v $(pwd)/logs:/app/logs \ --gpus all \ ghcr.io/unillm-bench/unillm-bench:latest # 方式二源码本地运行适合调试 git clone https://github.com/unillm-bench/unillm-bench.git cd unillm-bench pip install -r requirements.txt python app.py关键参数说明-v $(pwd)/data:/app/data挂载数据目录bench.db和配置文件在此-v $(pwd)/logs:/app/logs挂载日志目录便于排查问题--gpus all显卡直通让 Uni LLM Bench 能监控 GPU 使用率ghcr.io/unillm-bench/unillm-bench:latest官方镜像每日 CI 构建tag 为v0.3.2。启动后浏览器访问http://localhost:5000默认用户名admin密码unillm-bench首次登录强制修改。实操心得Docker 启动时若报错driver failed programming external connectivity大概率是 Docker Desktop 未启用 WSL2 或 Linux 容器模式。Windows 用户务必在 Docker Desktop 设置中勾选 “Use the WSL 2 based engine”。Mac 用户若用 Apple Silicon需确认镜像支持 arm64官方镜像已适配。4.2 生产环境部署Nginx Gunicorn SQLite 优化Docker 适合开发生产环境需更高稳定性。我们推荐 Nginx 反向代理 Gunicorn 部署# /etc/nginx/sites-available/unillm-bench server { listen 80; server_name bench.your-company.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 100M; # 支持大测试集上传 } location /static/ { alias /opt/unillm-bench/static/; expires 1h; } }Gunicorn 启动命令gunicorn --bind 127.0.0.1:8000 \ --workers 2 \ --worker-class sync \ --timeout 120 \ --keep-alive 5 \ --max-requests 1000 \ --max-requests-jitter 100 \ --preload \ app:appSQLite 优化关键点在config.py中设置SQLALCHEMY_DATABASE_URI sqlite:///data/bench.db?timeout30check_same_threadFalsetimeout30避免写锁等待启用 WAL 模式首次启动时执行PRAGMA journal_modeWAL;定期 VACUUM在 crontab 中添加0 2 * * * sqlite3 /opt/unillm-bench/data/bench.db VACUUM;防止碎片膨胀。注意SQLite 在高写入场景下可能成为瓶颈。若日均测试任务 50 次建议升级为 PostgreSQL。Uni LLM Bench 完全兼容只需修改SQLALCHEMY_DATABASE_URI为postgresql://user:passlocalhost:5432/bench无需改代码。4.3 常见问题与实战排查技巧问题 1测试中“VRAM Usage”始终显示 0现象GPU 监控栏为空或显示 “N/A”。排查步骤进入容器docker exec -it unillm-bench sh手动执行nvidia-smi --query-gpumemory.used --formatcsv,noheader,nounits若报错NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver说明容器未正确挂载 GPU 设备。检查docker run是否带--gpus all或--device /dev/nvidiactl --device /dev/nvidia-uvm --device /dev/nvidia0。若命令返回正常但 Uni LLM Bench 仍不显示检查app/utils/gpu_monitor.py中的GPU_MONITOR_INTERVAL是否被设为 0禁用监控。问题 2并发测试时大量请求超时Timeout现象错误率 30%P99 延迟陡增。根本原因不是模型慢是连接池耗尽。解决方案在config.py中增大AIOHTTP_TIMEOUT默认 30s和AIOHTTP_CONNECTION_LIMIT默认 100更重要的是检查后端服务的连接限制。例如 vLLM 默认--max-num-seqs 256若并发数超此值请求会排队。用vllm --help查看--max-num-seqs参数按公式max_num_seqs concurrent_users * 2设置实测经验RTX 4070 上qwen2-7b设--max-num-seqs 128并发 64 时稳定并发 128 时需调至--max-num-seqs 256。问题 3中文提示词测试结果乱码现象prompt显示为æŸ¥è¯¢ä»£ç 响应内容也是乱码。原因SQLite 数据库存储编码为 UTF-8但某些系统 locale 为C或POSIX导致 Python 读写时编码错误。修复方法启动容器时指定 localedocker run -e LANGC.UTF-8 -e LC_ALLC.UTF-8 ...或在app.py开头添加import locale locale.setlocale(locale.LC_ALL, C.UTF-8)重建数据库rm data/bench.db python init_db.py问题 4自定义适配器不生效现象新增的adapters/my_backend.py文件存在但测试时提示 “Unknown backend type”。检查清单文件名必须全小写且不含-或_如mybackend.py文件内必须定义adapt_request和adapt_response两个函数在app/config.py的SUPPORTED_BACKENDS列表中添加mybackend重启服务热重载不支持新模块加载。问题 5测试集上传失败提示 “Invalid file format”支持格式CSVUTF-8 编码,分隔首行字段名、JSONL每行一个 JSON 对象。常见错误CSV 用 Excel 保存时默认为GBK编码需用 VS Code 或 Notepad 转 UTF-8JSONL 文件末尾多了一个空行Uni LLM Bench 会将其解析为无效 JSONCSV 中prompt字段含换行符未用双引号包裹导致解析错位。实操心得我们内部用一个 5 行 Bash 脚本预处理测试集# csv_to_jsonl.sh csvjson --no-inference input.csv | jq -r select(.prompt ! null) | .prompt | sub(\n; \\n) | .prompt | sub(\; \\\) | . | tostring output.jsonl它自动转义换行符和引号确保 JSONL 格式严格合规。5. 进阶应用场景与定制化扩展5.1 边缘设备性能验证树莓派 llama.cpp 的轻量化实战Uni LLM Bench 的轻量化设计让它成为边缘 AI 验证的利器。我们用树莓派 58GB RAMUSB 3.0 接 Samsung 980 Pro NVMe实测tinyllama-1.1b模型部署步骤树莓派安装 Ubuntu 22.04 ARM64编译 llama.cpp启用BLAS和CUDA无效改用ARM_NEONmake LLAMA_AVX0 LLAMA_AVX20 LLAMA_ARM_FMA1 LLAMA_BLAS1 LLAMA_BLAS_VENDOROpenBLAS -j$(nproc)启动 llama-server./server -m models/tinyllama-1.1b.Q4_K_M.gguf -c 2048 -ngl 0 -p You are a helpful AI assistant.在另一台机器部署 Uni LLM Bench端点指向树莓派 IP。实测结果并发 1平均延迟 1850msP99 2200ms并发 2平均延迟 3400ms错误率 12%OOM关键发现-ngl 0禁用 GPU offload比-ngl 99全量 offload快 40%因为树莓派 GPU 与 CPU 间带宽不足频繁搬运反而拖慢。Uni LLM Bench 的VRAM Usage虽然显示 0无独显但它成功捕获了system_info.json中的mem_used_percent内存占用率当并发 2 时内存占用达 92%印证了 OOM 根因。这证明轻量化不等于功能阉割而是精准匹配场景需求。5.2 CI/CD 集成自动化模型选型流水线Uni LLM Bench 可无缝接入 Jenkins/GitLab CI。我们在某客户的 GitLab CI 中配置如下# .gitlab-ci.yml llm-benchmark: stage: test image: python:3.11-slim before_script: - pip install unillm-bench script: - unillm-bench run-test \ --endpoint http://vllm-server:8000/v1/chat/completions \ --backend vllm \ --dataset alpaca_eval_zh \ --concurrency 8 \ --iterations 50 \ --output report.json - cat report.json | jq .p99_latency 500 # 断言 P99 500ms artifacts: - report.jsonunillm-bench run-test是命令行模式支持所有 Web 界面功能。它输出 JSON 报告可被 CI 系统解析。若 P99 延迟超标流水线直接失败阻止低性能模型上线。我们还开发了unillm-bench compare命令用于对比 PR 前后的性能变化unillm-bench compare --baseline main-report.json --current pr-report.json --threshold p99_latency:5%若 P99 延迟恶化超 5%命令返回非零退出码CI 自动拦截合并。5.3 定制化报表生成PDF 报告与企业微信推送Uni LLM Bench 自带report_generator.py模块支持导出 PDF 报告python report_generator.py \ --test-id 123 \ --template corporate \ --output reports/qwen2-
上一篇/下一篇内容由系统自动关联 返回资讯列表 →