一键导入
perl-ai-proxy-skeid
Use when working with Langertha::Skeid LLM proxy - setup, OpenBao integration, customer keys, usage tracking, or service stack deployment
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when working with Langertha::Skeid LLM proxy - setup, OpenBao integration, customer keys, usage tracking, or service stack deployment
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | perl-ai-proxy-skeid |
| description | Use when working with Langertha::Skeid LLM proxy - setup, OpenBao integration, customer keys, usage tracking, or service stack deployment |
Langertha::Skeid is the LLM routing service / proxy with:
Secure API key management with AppRole auth:
my $broker = Langertha::Skeid::KeyBroker::OpenBao->new(
addr => $ENV{OPENBAO_ADDR} // 'http://127.0.0.1:8200',
role_id => $ENV{OPENBAO_ROLE_ID},
secret_id => $ENV{OPENBAO_SECRET_ID},
renew_secs => 300, # renew every 5 minutes
);
Token lifecycle:
_renew_tokenrefresh() → renew-self → stores _client_tokenKeys stored in OpenBao at secret/skeid/customer/<key-id>:
x-skeid-key-id: "alice" → lookup Alice's keynodes:
- id: groq-main
url: https://api.groq.com/openai/v1
model: llama-3.3-70b-versatile
engine: openai
api_key_ref: secret/skeid/remote/groq
Skeid resolves api_key_ref via KeyBroker → OpenBao.
Docker Compose: examples/service/docker-compose.yml
cd examples/service
docker compose up -d
Stack:
OpenBao:
OPENBAO_ADDR — Default: http://openbao:8200OPENBAO_ROLE_ID — AppRole role_idOPENBAO_SECRET_ID — AppRole secret_idSkeid:
SKEID_ADMIN_API_KEY — Admin API key for /skeid/* routesSKEID_USAGE_DB_PASSWORD — PostgreSQL passwordSKEID_REMOTE_KEY_REF — OpenBao path for LLM provider keyCreates:
File: share/sql/usage_events.postgresql.sql
CREATE TABLE usage_events (
id BIGSERIAL PRIMARY KEY,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
request_id TEXT NOT NULL DEFAULT '',
api_format TEXT NOT NULL DEFAULT '',
endpoint TEXT NOT NULL DEFAULT '',
api_key_id TEXT NOT NULL DEFAULT '',
provider TEXT NOT NULL DEFAULT '',
engine TEXT NOT NULL DEFAULT '',
model TEXT NOT NULL DEFAULT '',
node_id TEXT NOT NULL DEFAULT '',
route_url TEXT NOT NULL DEFAULT '',
status_code INTEGER NOT NULL DEFAULT 0,
ok BOOLEAN NOT NULL DEFAULT FALSE,
duration_ms INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_tokens INTEGER NOT NULL DEFAULT 0,
tool_calls INTEGER NOT NULL DEFAULT 0,
cost_input_usd NUMERIC(12, 6) NOT NULL DEFAULT 0,
cost_output_usd NUMERIC(12, 6) NOT NULL DEFAULT 0,
cost_total_usd NUMERIC(12, 6) NOT NULL DEFAULT 0,
error_type TEXT NOT NULL DEFAULT '',
error_message TEXT NOT NULL DEFAULT ''
);
# Via CLI
docker compose exec skeid bin/skeid usage --json
# Direct SQL
docker compose exec postgres psql -U skeid -d skeid -c "SELECT * FROM usage_events ORDER BY id DESC LIMIT 10;"
# Start stack
docker compose -f examples/service/docker-compose.yml up -d
# Check status
docker compose -f examples/service/docker-compose.yml ps
# Logs
docker compose -f examples/service/docker-compose.yml logs -f skeid
# Restart after token failure
docker compose -f examples/service/docker-compose.yml restart skeid
# OpenBao status
docker compose -f examples/service/docker-compose.yml exec openbao bao status
docker exec skeid-openbao sh -c "BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=<root_token> bao kv put secret/skeid/customer/newuser api_key=\"sk-newuser-key\" active=true"
docker exec skeid-openbao sh -c "BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=<root_token> bao kv list secret/skeid/customer/"
curl -X POST http://localhost:5591/v1/chat/completions \
-H "Content-Type: application/json" \
-H "x-skeid-key-id: alice" \
-d '{"model": "llama-3.3-70b-versatile", "messages": [{"role": "user", "content": "Hello"}]}'