SpacetimeDB LLM 基准测试工具 `cargo llm` 开发与使用完全指南 📅 发布时间:2026/9/12 15:57:21 👁 浏览次数: SpacetimeDB LLM 基准测试工具cargo llm开发与使用完全指南【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB本文以 SpacetimeDB 仓库中的 docs/DEVELOP.md 为核心骨架系统讲解仓库内置 LLM 代码生成基准测试工具cargo llm的环境配置、基准套件结构、上下文构建机制与常见问题排查。该工具用于自动评估 OpenAI、Anthropic、Google、xAI、DeepSeek 等多家 LLM 供应商在 SpacetimeDB 模块Rust / C# / TypeScript代码生成上的能力是 CI 中驱动GPT-5 等模型生成模块代码 → 发布到本地 SpacetimeDB → 编译校验并打分全流程的测试框架。读完本文你将掌握如何配置本地开发环境、运行与筛选基准任务、新建自定义基准用例以及理解上下文Context如何按语言过滤后喂给 LLM 的底层原理。1. 前置条件Prerequisites在使用cargo llm前需要满足以下环境约束必须从仓库根目录运行cargo llm及所有相关命令都必须在工作区根目录即本仓库目录执行因为工具依赖整个 workspace 的 crate 构建产物与相对路径布局。tools/xtask-llm-benchmark已注册为 Cargo.toml 的 workspace 成员见members列表中的tools/xtask-llm-benchmark因此可以直接以 xtask 风格通过cargo llm调用。TypeScript 基准需要先构建 SDK在crates/bindings-typescript目录下先执行pnpm build。Rust 与 C# 使用本地 crate属于 workspace 的一部分构建时会自动随 workspace 编译无需额外步骤。Windowsnvm4w如果运行 TypeScript 基准时找不到pnpm需要设置NODEJS_DIR环境变量指向你的 Node.js bin 目录例如C:\nvm\v20.10.0。2. 快速检查与修复Quick Checks Fixes当 CI 因哈希过期或结果陈旧而卡住时可以用单条命令快速解锁cargo llm ci-quickfix该命令的执行内容如下仅为GPT-5运行 Rust 的rustdoc_json通道pass仅为GPT-5运行 C# 的docs通道写回更新后的结果与汇总文件。注意ci-quickfix不是完整的基准套件它只做最小化的 Rust C# 通道重跑用于让 CI 通过。本地运行需要 OpenAI API key任何 SpacetimeDB 成员也可以在 PR 上评论/update-llm-benchmark来触发 CI 任务完成同样的工作。模型 ID 必须匹配配置的路由传入--models的模型 ID 必须与 model_routes.rs 中配置的路由一致例如openai:gpt-5。源码中ModelRoute结构体同时携带display_name报表中的人类可读标签、vendorAPI 族、api_model供应商直连 API 期望的模型 ID与可选的openrouter_model走 OpenRouter 网关时的模型 ID。Spacetime CLI基准跑完 LLM 生成的代码后会通过spacetimeCLI 发布模块进行校验spacetime publish -c -y --server name db前提条件spacetime已加入PATH目标 server 可达且在运行中。从源码看发布目标 DB 名称通过 bench/utils.rs 中的sanitize_db_name、run_scope_tag、golden_db_name等函数生成名称会被统一转为小写、非法字符替换为-、连续短横线折叠并以db前缀兜底保证不同mode vendor model组合scope与 golden 答案使用相互隔离的数据库实例。3. 环境变量下表列出了工具的默认/推荐开发值。源码 bench/utils.rs 中的解析逻辑确认LLM_DEBUG与LLM_DEBUG_VERBOSE接受1/true/yes三种真值并发数通过parse().ok()读取解析失败时回落到内置默认值。名称用途取值 / 示例必需SPACETIME_SERVER目标 SpacetimeDB 环境local✅LLM_DEBUG生成时打印简短调试信息true/false开发环境默认true✅LLM_DEBUG_VERBOSE超详细日志payload、评分细节false✅LLM_BENCH_CONCURRENCY整个 bench 运行的任务级并行度20✅LLM_BENCH_ROUTE_CONCURRENCY单路由按厂商/模型限流并发4✅OPENAI_API_KEYOpenAI 凭证sk-...可选*OPENAI_BASE_URLOpenAI 兼容 base URL 覆盖https://api.openai.com/可选ANTHROPIC_API_KEYAnthropic 凭证...可选*ANTHROPIC_BASE_URLAnthropic base URL 覆盖https://api.anthropic.com可选GOOGLE_API_KEYGemini 凭证...可选*GOOGLE_BASE_URLGemini base URL 覆盖https://generativelanguage.googleapis.com可选XAI_API_KEYxAI Grok 凭证...可选DEEPSEEK_API_KEYDeepSeek 凭证...可选META_API_KEYMeta Llama 凭证...可选** 仅当你要在本地运行该供应商时才必需。规范开发环境配置块shell可复制到你的 shell profileOPENAI_API_KEY OPENAI_BASE_URLhttps://api.openai.com/ ANTHROPIC_API_KEY ANTHROPIC_BASE_URLhttps://api.anthropic.com GOOGLE_API_KEY GOOGLE_BASE_URLhttps://generativelanguage.googleapis.com XAI_API_KEY XAI_BASE_URLhttps://api.x.ai DEEPSEEK_API_KEY DEEPSEEK_BASE_URLhttps://api.deepseek.com META_API_KEY META_BASE_URLhttps://openrouter.ai/api/v1 SPACETIME_SERVERlocal LLM_DEBUGtrue LLM_DEBUG_VERBOSEfalse LLM_BENCH_CONCURRENCY20 LLM_BENCH_ROUTE_CONCURRENCY4规范开发环境配置块Windows PowerShell$env:SPACETIME_SERVERlocal $env:LLM_DEBUGtrue $env:LLM_DEBUG_VERBOSEfalse $env:LLM_BENCH_CONCURRENCY20 $env:LLM_BENCH_ROUTE_CONCURRENCY4LLM 供应商Key 与 Base URL这些配置与仓库中实际接线的客户端一一对应OpenAiClient、AnthropicClient、GoogleGeminiClient、XaiGrokClient、DeepSeekClient、MetaLlamaClient客户端实现位于 llm/clients 目录下。供应商API Key 环境变量Base URL 环境变量可选默认 Base URLOpenAIOPENAI_API_KEYOPENAI_BASE_URLhttps://api.openai.comAnthropicANTHROPIC_API_KEYANTHROPIC_BASE_URLhttps://api.anthropic.comGoogle GeminiGOOGLE_API_KEYGOOGLE_BASE_URLhttps://generativelanguage.googleapis.comxAI GrokXAI_API_KEYXAI_BASE_URLhttps://api.x.aiDeepSeekDEEPSEEK_API_KEYDEEPSEEK_BASE_URLhttps://api.deepseek.comMETAMETA_API_KEYMETA_BASE_URLhttps://openrouter.ai/api/v1额外并发控制源码 bench/utils.rs 支持但文档未列出的三个变量可视为进阶调优项名称含义默认值LLM_BENCH_RUST_CONCURRENCYRust/WASM 构建并发度。默认值较低2以避免 Windows 上 cargo registry 锁竞争导致STATUS_STACK_BUFFER_OVERRUN2LLM_BENCH_CSHARP_CONCURRENCYC# 构建并发度。默认串行1与 smoketest 行为保持一致——多个生成的模块同时 publish 时 dotnet/WASI SDK 构建不稳定1LLM_OUTPUT_MAX_CHARSprint_llm_output打印 LLM 输出时的字符截断上限20004. 基准套件Benchmark Suite结果目录docs/llms。结果存储基准结果通过 spacetime-web API 上传到远程 PostgreSQL 数据库。设置LLM_BENCHMARK_UPLOAD_URL与LLM_BENCHMARK_API_KEY后每个基准批次运行结束后会自动上传使用--dry-run可跳过上传。源码 api/client.rs 进一步给出了接口细节POST /api/llm-benchmark-upload上传某一 (lang, mode) 组合的一批运行结果上传前会做模型名归一化normalize_model_names并清洗易变字段sanitize_for_commit请求头携带Authorization: Bearer api_keyPOST /api/llm-benchmark-tasks从磁盘上的 benchmarks 目录推导任务目录生成任务目录task catalog上传GET /api/llm-benchmark-models?activetrue拉取网站模型注册表中 active 且 available 的模型路由activefalse或availablefalse的路由会被过滤掉GET /api/llm-benchmark-results?datestruelang..mode..与?failurestrue按语言/模式/模型/日期查询历史运行日期与失败结果。如果未设置LLM_BENCHMARK_UPLOAD_URLApiClient::from_env()直接返回None整个上传链路被跳过这是--dry-run之外的另一种本地离线方式。当前基准一览basicsID名称考察点000empty-reducers能否创建带各种参数的基础 reducer001basic-tables能否创建带基础列的表002scheduled-table能否创建 scheduled 表与 reducer003struct-in-table能否把结构体放进表004insert能否插入一行005update能否更新一行006delete能否删除一行007crud能否在同一个 reducer 里完成 insert/update/delete008index-lookup能否从索引中查询009init能否编写 init reducer010connect能否编写 client_connected / client_disconnected reducer011helper-function能否创建非 reducer 的辅助函数schemaID名称考察点012spacetime-product-type能否定义新的 spacetime product 类型013spacetime-sum-type能否定义新的 sum 类型014elementary-columns能否创建基础类型列015product-type-columns能否创建 product 类型列016sum-type-columns能否创建 sum 类型列017scheduled能否创建 scheduled 列018constraints能否添加主键、唯一约束与索引019many-to-many能否创建多对多关系020ecs能否创建基础 ECS021multi-column-index能否创建多列索引目录结构基准用例位于benchmarks/下布局如下benchmarks/ category/ t_001_foo/ tasks/ rust.txt csharp.txt answers/ rust.rs csharp.cs spec.rs # 评分配置、reducer/schema 检查等仓库中tools/xtask-llm-benchmark/src/benchmarks/下实际存在的分类比文档列举的两类更丰富包括basics、schema、queries、data_modeling、auth、tables、reducers、views、lifecycle、procedures、migrations共 11 个分类、80 个编号任务如t_082_hot_swap_compatibility、t_079_external_upload_flow每个任务目录内均包含tasks/{rust,csharp,typescript}.txt提示词、answers/{rust.rs,csharp.cs,typescript.ts}金标准答案与spec.rs评分配置部分迁移类任务还带setup/目录。TypeScript 已深度融入套件而不仅限于文档示例中的 Rust 与 C#。创建新基准用例按以下 7 步新增一个基准任务复制现有基准复制任意已有基准文件夹把数字前缀改成新的未使用 IDt_123_my_task。为任务重命名文件夹名保持ID 短横线 slug风格如t_123_my_task。编写任务提示词创建/更新tasks/rust.txt和/或tasks/csharp.txt。提示词要明确表、reducer、辅助函数、约束等避免歧义。添加金标准答案在answers/rust.rs和/或answers/csharp.cs中实现规范解。定义评分规则编辑spec.rs添加 scorer例如 schema/table/field 检查、reducer/函数是否存在检查。快速验证只构建金标准答案cargo llm run --goldens-only --tasks t_123_my_task归类确保文件夹位于正确的分类路径下。评分器源码位于 eval/scorers.rs负责对 LLM 输出做 schema/表/字段/函数存在性等结构化校验可据此扩展spec.rs中可声明的检查类型。常用命令# 使用当前环境变量providers/models 来自你的 .env运行全部 cargo llm run # 只跑 Rust或 C# cargo llm run --lang rust cargo llm run --lang csharp # 只跑指定分类使用你的实际分类名 cargo llm run --categories basics,schema # 只跑指定编号任务全局编号 cargo llm run --tasks 0,7,12 # 显式限制 providers/models cargo llm run \ --providers openai,anthropic \ --models openai:gpt-5 anthropic:claude-sonnet-4-5 # 干跑 cargo llm run --hash-only # 只构建上下文不调用任何 provider cargo llm run --goldens-only # 只构建/检查金标准答案 # 激进模式跳过部分安全检查 cargo llm run --force # 每语言 CI 冒烟检查 cargo llm ci-check --lang rust cargo llm ci-check --lang csharp # 生成 PR 评论 markdown对比 master 基线 cargo llm ci-comment # 使用自定义基线 ref cargo llm ci-comment --baseline-ref origin/main输出日志输出到 stdout/stderr遵循LLM_DEBUG/LLM_DEBUG_VERBOSEJSON 结果存放在每次运行的独立时间戳文件夹中并合并进汇总报告。5. 上下文构建Context Construction基准工具会为每个任务提示词构建一份上下文即文档随提示词一并发送给 LLM。上下文按语言和模式而变化。模式Modes模式语言来源说明rustdoc_jsonRustcrates/bindings生成 rustdoc JSON 并从 spacetimedb crate 中提取文档docsC#docs/docs/**/*.md拼接文档目录下所有 markdown 文件上下文构建相关代码位于 context 目录含combine.rs、hashing.rs、paths.rs等模块其中hashing.rs对上下文内容做哈希--hash-only模式只产出哈希而不调用任何模型哈希也被用作上传结果时的 mode 关联键。Tab 过滤为某语言构建上下文时工具会过滤文档中的Tabs组件只保留目标语言相关的内容降低噪声、让 LLM 聚焦正确的语法。被过滤的 tab groupIdgroupId用途Tab 取值server-language服务端模块代码示例rust,csharp,typescriptclient-language客户端 SDK 代码示例rust,csharp,typescript,cpp,blueprint过滤行为C# 测试只保留valuecsharp的 tabRust 测试只保留valuerust的 tab如果没有任何匹配的 tab例如client-language只有cpp/blueprint整个 tabs 块被移除。变换示例过滤前markdown 中Tabs groupIdserver-language queryString TabItem valuecsharp labelC# C# code here /TabItem TabItem valuerust labelRust Rust code here /TabItem /Tabs过滤后C# 上下文C# code here文档编写最佳实践被基准使用的文档应当遵循以下约定使用一致的 tab groupId服务端模块代码一律用server-language客户端 SDK 代码一律用client-language覆盖所有支持的语言确保每个Tabs块包含你想测试的所有语言 tab使用一致的命名约定基准会把 LLM 输出与金标准答案做对比因此文档应反映期望的约定例如 C# 表名使用 PascalCase。6. 故障排查TroubleshootingProvider 返回 HTTP 400/404检查模型 ID 拼写以及该模型在你的账号/区域是否可用对非默认网关确认 base URL 配置正确。超时 / 限流Rate-limit调低LLM_BENCH_CONCURRENCY或LLM_BENCH_ROUTE_CONCURRENCY部分 provider 对突发请求限流非常激进尽量使用带 backoff/retry 的调用路径。结合源码可补充两点排查思路若并发日志显示构建阶段而非请求阶段受限可进一步调低LLM_BENCH_RUST_CONCURRENCY默认 2或保持LLM_BENCH_CSHARP_CONCURRENCY为 1若上传结果报鉴权失败请确认LLM_BENCHMARK_API_KEY与LLM_BENCHMARK_UPLOAD_URL成对出现源码中仅设置了 URL 而未设置 key 会直接报错LLM_BENCHMARK_API_KEY required when UPLOAD_URL is set。7. 小结SpacetimeDB 的cargo llm基准工具把LLM 生成模块代码 → 构建 → 发布到本地 SpacetimeDB → 结构化评分 → 上传汇总串成了一条可复现、可按语言/分类/任务/模型裁剪的自动化流水线。无论你是要复跑 CI 结果、为本仓库新增一个 benchmark 任务还是接入新的模型供应商都可以从 docs/DEVELOP.md 出发对照 model_routes.rs、bench/utils.rs 与 benchmarks 目录逐层深入快速定位所需改动点。【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考