xiaowei-system/skills/devops/devops-umbrella/references/new-api-debugging.md

171 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# New-API 本地模型网关 — 运维调试手册
> 来源2026-06-24 调试 m3 模型 Internal Server Error session
> DB 路径:`/var/lib/new-api/one-api.db`(正确)
> 旧备份:`~/.openclaw/workspace/one-api.db`(过期,勿用)
---
## 进程信息
```bash
# 进程查找
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
# 用 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()
"
```
当前 token2026-06-24`0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP`
## 查询渠道和 Abilities
```python
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 查询全为空 | 同上 | 同上 |
## 添加模型到多个渠道
```python
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()
```
## 测试模型调用
```bash
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 搜索:
```bash
grep "20260624131917" /var/log/new-api/oneapi-20260624211749.log | head -20
```
按模型搜索:
```bash
grep -i "minimax-m3\|m3\|500\|internal\|panic" /var/log/new-api/oneapi-20260624211749.log | tail -20
```
## Hermes 配置参考
```yaml
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...`