技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
arize-migrate-braintrust【数据与研究】Migrates LLM observability from Braintrust into Arize AX — historical trace import via OTLP (BT output→output.value, span_parents, one AX trace per turn + session.id), datasets, and prompts (latest or versions). Use when migrating from Braintrust to Arize or importing Braintrust logs into AX.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Move Braintrust data into Arize AX. Historical traces are in scope — export project logs via BTQL and ingest into AX via OTLP with explicit attribute mapping.
SPACE— Prefer user-provided space name/ID; do not paginateax spaces listfirst just to look it up.
scripts/migrate_vendor_traces.py --vendor braintrust. Do not fake migration with live-only AX traffic.output.value = final text/JSON string from Braintrust output — not a synthetic message timeline.chat.request) and group turns with attributes.session.id.BRAINTRUST_API_KEY; use ax profiles / env for Arize. Do not read .env from disk.Proceed with the task. If something fails, troubleshoot from the error:
ax missing / version error → ax setup401 Unauthorized / missing Arize key → ax profiles (or ask for ARIZE_API_KEY + ARIZE_SPACE_ID for OTLP)BRAINTRUST_API_KEY (and BRAINTRUST_API_URL if not US cloud).env files or search the filesystem for credentials| Data | Move? | Path |
|---|---|---|
| Historical project logs / spans | Yes | scripts/migrate_vendor_traces.py --vendor braintrust |
| Datasets | Yes | BTQL / API → ax datasets create |
| Prompts | Yes | GET /v1/prompt → ax prompts create / create_version + labels |
| Live traffic going forward | Separate | Point new traffic at AX after import (not part of this skill) |
| Scorers / experiments | Recreate / re-run for now | Do not import old scores as AX experiment truth |
| Braintrust | Arize |
|---|---|
output | output.value (string via JSON dump if needed) |
input | input.value |
name + heuristics | openinference.span.kind |
span_parents | OTLP parentSpanId |
chat.request (turn) | one AX trace — do not keep Braintrust's one-trace-per-conversation |
metadata.session_id (conversation / chat.session) | session.id |
metadata.user_id | user.id |
chat.session wrapper | skip as a span; grouping is via session.id |
| — | migration.source=braintrust |
Migration progress:
- [ ] 0. Confirm scope (space, AX project, resource types)
- [ ] 1. Preflight (ax + Braintrust auth)
- [ ] 2. Import historical traces (required when migrating traces)
- [ ] 3. Datasets
- [ ] 4. Prompts / evaluators (optional)
- [ ] 5. Live cutover (optional)
- [ ] 6. Verify
Target AX space + destination project name. Confirm Braintrust source project name.
ax projects list --space SPACE (or create destination project)BRAINTRUST_API_KEY and that project logs existLocate this installed skill's root and run its bundled commands by absolute path, so they work from any workspace. Check the chosen interpreter is Python 3.10 or later. Create an isolated environment if needed; see helper dependencies (Braintrust uses the public REST API, so extra packages are optional).
export ARIZE_API_KEY=... ARIZE_SPACE_ID=... BRAINTRUST_API_KEY=...
python scripts/migrate_vendor_traces.py \
--vendor braintrust \
--source-project SOURCE_PROJECT \
--arize-project DEST_PROJECT \
--limit 200
Optional: --dry-run to preview mapping without ingest.
Verify:
ax spans export DEST_PROJECT --space SPACE -l 50 --days 7 --stdout
Confirm string output.value, parent links via parent_id, multiple traces per conversation when turns exist, and session.id grouping those turns.
See Braintrust export recipes → flatten → ax datasets create.
Ask latest only vs versions / environments. Then:
GET /v1/prompt (filter by project_name / slug as needed)version / environment query params when importing historyprompt_data.prompt messages → AX roles; flatten text blocks to content stringsF_STRING vs MUSTACHE from template syntax; ask if unclearax prompts create then create_version oldest→newest; map Braintrust environments to AX labels when the user wants themSkip non-prompt functions (tools/scorers) unless the user explicitly wants those recreated separately.
Recreate or re-run in AX for now.
Summarize spans imported, trace/session counts, sample output.value, prompts/versions/labels, and gaps.
.arize-tmp-migrate/braintrust/ for raw exports (gitignored at repo root).
arize-instrumentation, arize-dataset, arize-trace, arize-migrate-langsmith, arize-migrate-langfuse