171 lines
4.7 KiB
Markdown
171 lines
4.7 KiB
Markdown
# 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()
|
||
"
|
||
```
|
||
|
||
当前 token(2026-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...`。 |