4.7 KiB
4.7 KiB
New-API 本地模型网关 — 运维调试手册
来源:2026-06-24 调试 m3 模型 Internal Server Error session DB 路径:
/var/lib/new-api/one-api.db(正确) 旧备份:~/.openclaw/workspace/one-api.db(过期,勿用)
进程信息
# 进程查找
ps aux | grep new-api | grep -v grep
# /usr/local/bin/new-api --port 3000 --log-dir /var/log/new-api
# 端口
ss -tlnp | grep 3000
# LISTEN 0 4096 *:3000 *:* users:(("new-api",pid=1062462,fd=9))
数据库路径(关键!)
| 用途 | 路径 | 说明 |
|---|---|---|
| 生产数据库 | /var/lib/new-api/one-api.db |
实际运行中的数据 |
| 旧备份(勿用) | ~/.openclaw/workspace/one-api.db |
2026-04-27 过期备份 |
如果查询 channels/abilities/tokens 全为空,先确认用的是正确路径。
查询 Token
# 用 Python 查询(sqlite3 命令行工具不可用时)
python3 -c "
import sqlite3
db = '/var/lib/new-api/one-api.db'
conn = sqlite3.connect(db)
cur = conn.cursor()
# 查所有 token
cur.execute('SELECT id, name, key FROM tokens')
for r in cur.fetchall():
print(r)
conn.close()
"
当前 token(2026-06-24):0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
查询渠道和 Abilities
import sqlite3
db = '/var/lib/new-api/one-api.db'
conn = sqlite3.connect(db)
cur = conn.cursor()
# 所有渠道
cur.execute('SELECT id, name, type, status, base_url FROM channels ORDER BY id')
for r in cur.fetchall():
print(r)
# 特定模型的 abilities(如 m3)
cur.execute('SELECT * FROM abilities WHERE model LIKE \"%m3%\" OR model LIKE \"%minimax%\"')
for r in cur.fetchall():
print(r)
conn.close()
abilities 表结构
| 列 | 说明 |
|---|---|
| group | 路由组(通常 default) |
| model | 模型名(如 minimaxai/minimax-m3) |
| channel_id | 渠道 ID(对应 channels.id) |
| enabled | 是否启用(1=启用) |
| priority | 优先级(数字越小优先级越高) |
| weight | 权重 |
| tag | 标签 |
channels 表关键列
| 列 | 说明 |
|---|---|
| id | 渠道 ID |
| name | 渠道名称(如 NIM-k1) |
| type | 类型 |
| status | 状态(1=活跃) |
| base_url | 上游 API 地址 |
| models | 渠道支持的模型列表 |
常见错误排查
| 症状 | 原因 | 解法 |
|---|---|---|
Invalid token (Hermes 报 Internal Server Error) |
session 重置后 token 失效;或用了旧备份 DB | 查询 /var/lib/new-api/one-api.db 的 tokens 表取最新 token |
GET /v1/models/xxx 返回 404 |
new-api 未配置该模型到 abilities | INSERT INTO abilities VALUES('default','minimaxai/minimax-m3', channel_id, 1, 10, 2, NULL) |
| m3 报 503 Service Unavailable | 模型名拼写错误(如 minimax-m3.0 错误,应为 minimax-m3) |
用 minimaxai/minimax-m3 |
| abilities 查询全为空 | 用了错误数据库路径 | 改用 /var/lib/new-api/one-api.db |
| channels 查询全为空 | 同上 | 同上 |
添加模型到多个渠道
import sqlite3
db = '/var/lib/new-api/one-api.db'
conn = sqlite3.connect(db)
cur = conn.cursor()
model_name = 'minimaxai/minimax-m3'
channel_ids = [1, 4, 5, 6, 7, 8, 9, 10, 11] # NIM-k1~k9
for cid in channel_ids:
# 检查是否已存在
cur.execute('SELECT COUNT(*) FROM abilities WHERE model=? AND channel_id=?', (model_name, cid))
if cur.fetchone()[0] == 0:
cur.execute('INSERT INTO abilities VALUES(?,?,?,1,10,?,NULL)',
('default', model_name, cid, 2 if cid in [1,4,6,8,9] else 1))
print(f'Added to channel {cid}')
else:
print(f'Already exists in channel {cid}')
conn.commit()
conn.close()
测试模型调用
TOKEN="0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP"
curl -s -X POST http://127.0.0.1:3000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"model":"minimaxai/minimax-m3","messages":[{"role":"user","content":"say hi in 3 words"}],"max_tokens":20}' \
--max-time 60
日志位置
/var/log/new-api/oneapi-*.log
按 request ID 搜索:
grep "20260624131917" /var/log/new-api/oneapi-20260624211749.log | head -20
按模型搜索:
grep -i "minimax-m3\|m3\|500\|internal\|panic" /var/log/new-api/oneapi-20260624211749.log | tail -20
Hermes 配置参考
providers:
newapi-local:
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: http://127.0.0.1:3000/v1
cost_factor: 0.0
default_model: minimaxai/minimax-m3
models:
- minimaxai/minimax-m3
- minimaxai/minimax-m2.7
- minimaxai/minimax-m2.5
⚠️ 配置里的 api_key 格式:
sk-0Ex...(旧格式可能有 sk- 前缀),实际 new-api 只认0Ex...。