Files
ChatLab/docs/cn/chatlab-api.md
2026-03-28 00:10:29 +08:00

500 lines
13 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.
# ChatLab API 文档
ChatLab 提供本地 RESTful API 服务,允许外部工具、脚本和 MCP 等通过 HTTP 接口查询聊天记录、执行 SQL 查询、导入聊天数据。
## 快速开始
### 1. 启用服务
打开 ChatLab → 设置 → ChatLab API → 开启服务。
启用后会自动生成 API Token默认监听端口 `5200`
### 2. 验证服务状态
```bash
curl http://127.0.0.1:5200/api/v1/status \
-H "Authorization: Bearer YOUR_TOKEN"
```
响应示例:
```json
{
"success": true,
"data": {
"name": "ChatLab API",
"version": "1.0.0",
"uptime": 3600,
"sessionCount": 5
},
"meta": {
"timestamp": 1711468800,
"version": "0.0.2"
}
}
```
## 基本信息
| 项目 | 说明 |
| -------- | ------------------------- |
| 基础 URL | `http://127.0.0.1:5200` |
| API 前缀 | `/api/v1` |
| 认证方式 | Bearer Token |
| 数据格式 | JSON |
| 绑定地址 | `127.0.0.1`(仅本机访问) |
### 认证
所有请求必须携带 `Authorization` 请求头:
```
Authorization: Bearer clb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```
Token 可在 设置 → ChatLab API 页面查看和重新生成。
### 统一响应格式
**成功响应:**
```json
{
"success": true,
"data": { ... },
"meta": {
"timestamp": 1711468800,
"version": "0.0.2"
}
}
```
**错误响应:**
```json
{
"success": false,
"error": {
"code": "SESSION_NOT_FOUND",
"message": "Session not found: abc123"
}
}
```
---
## 端点列表
### 系统
| 方法 | 路径 | 说明 |
| ---- | ---------------- | -------------------------- |
| GET | `/api/v1/status` | 服务状态 |
| GET | `/api/v1/schema` | ChatLab Format JSON Schema |
### 数据查询(导出)
| 方法 | 路径 | 说明 |
| ---- | ------------------------------------- | ------------------------ |
| GET | `/api/v1/sessions` | 获取所有会话列表 |
| GET | `/api/v1/sessions/:id` | 获取单个会话详情 |
| GET | `/api/v1/sessions/:id/messages` | 查询消息(分页) |
| GET | `/api/v1/sessions/:id/members` | 获取成员列表 |
| GET | `/api/v1/sessions/:id/stats/overview` | 获取概览统计 |
| POST | `/api/v1/sessions/:id/sql` | 执行自定义 SQL只读 |
| GET | `/api/v1/sessions/:id/export` | 导出 ChatLab Format JSON |
### 数据导入
| 方法 | 路径 | 说明 |
| ---- | ----------------------------- | ------------------------ |
| POST | `/api/v1/import` | 导入聊天记录(新建会话) |
| POST | `/api/v1/sessions/:id/import` | 增量导入到指定会话 |
---
## 端点详细说明
### GET /api/v1/status
获取 API 服务的运行状态。
**响应:**
| 字段 | 类型 | 说明 |
| -------------- | ------ | ------------------------- |
| `name` | string | 服务名称(`ChatLab API` |
| `version` | string | ChatLab 应用版本 |
| `uptime` | number | 服务运行时间(秒) |
| `sessionCount` | number | 当前会话总数 |
---
### GET /api/v1/schema
获取 ChatLab Format 的 JSON Schema 定义,便于构建符合规范的导入数据。
---
### GET /api/v1/sessions
获取所有已导入的会话列表。
**响应示例:**
```json
{
"success": true,
"data": [
{
"id": "session_abc123",
"name": "技术交流群",
"platform": "qq",
"type": "group",
"messageCount": 58000,
"memberCount": 120
}
]
}
```
---
### GET /api/v1/sessions/:id
获取单个会话的详细信息。
**路径参数:**
| 参数 | 类型 | 说明 |
| ---- | ------ | ------- |
| `id` | string | 会话 ID |
---
### GET /api/v1/sessions/:id/messages
分页查询指定会话的消息列表,支持多种过滤条件。
**查询参数:**
| 参数 | 类型 | 默认值 | 说明 |
| ----------- | ------ | ------ | ------------------------ |
| `page` | number | 1 | 页码 |
| `limit` | number | 100 | 每页条数(最大 1000 |
| `startTime` | number | - | 起始时间戳(秒级 Unix |
| `endTime` | number | - | 结束时间戳(秒级 Unix |
| `keyword` | string | - | 关键词搜索 |
| `senderId` | string | - | 按发送者 platformId 筛选 |
| `type` | number | - | 按消息类型筛选 |
**请求示例:**
```bash
curl "http://127.0.0.1:5200/api/v1/sessions/abc123/messages?page=1&limit=50&keyword=你好" \
-H "Authorization: Bearer YOUR_TOKEN"
```
**响应:**
```json
{
"success": true,
"data": {
"messages": [
{
"senderPlatformId": "123456",
"senderName": "张三",
"timestamp": 1703001600,
"type": 0,
"content": "你好!"
}
],
"total": 1500,
"page": 1,
"limit": 50,
"totalPages": 30
}
}
```
---
### GET /api/v1/sessions/:id/members
获取指定会话的所有成员列表。
---
### GET /api/v1/sessions/:id/stats/overview
获取指定会话的概览统计信息。
**响应:**
```json
{
"success": true,
"data": {
"messageCount": 58000,
"memberCount": 120,
"timeRange": {
"start": 1609459200,
"end": 1703001600
},
"messageTypeDistribution": {
"0": 45000,
"1": 8000,
"5": 3000,
"80": 2000
},
"topMembers": [
{
"platformId": "123456",
"name": "张三",
"messageCount": 5800,
"percentage": 10.0
}
]
}
}
```
| 字段 | 说明 |
| ------------------------- | -------------------------------------------------------------------------------- |
| `messageCount` | 总消息数 |
| `memberCount` | 成员数 |
| `timeRange` | 最早/最新消息时间戳(秒级 Unix |
| `messageTypeDistribution` | 各消息类型的数量key 为 [消息类型](./chatlab-format.md#消息类型对照表) 枚举值) |
| `topMembers` | 前 10 活跃成员(按消息数降序) |
---
### POST /api/v1/sessions/:id/sql
对指定会话的数据库执行只读 SQL 查询。仅允许 `SELECT` 语句。
**请求体:**
```json
{
"sql": "SELECT sender, COUNT(*) as count FROM messages GROUP BY sender ORDER BY count DESC LIMIT 10"
}
```
**响应:**
```json
{
"success": true,
"data": {
"columns": ["sender", "count"],
"rows": [
["123456", 5800],
["789012", 3200]
]
}
}
```
> 关于数据库表结构,请参考 ChatLab 内部文档或使用 `SELECT * FROM sqlite_master WHERE type='table'` 查询。
---
### GET /api/v1/sessions/:id/export
导出完整会话数据,格式为 [ChatLab Format](./chatlab-format.md) JSON。
**限制:** 最多导出 **10 万条** 消息。如果会话消息数超过此限制,返回 `400 EXPORT_TOO_LARGE` 错误。超大会话建议使用 `/messages` 分页 API 逐页获取。
**响应:**
```json
{
"success": true,
"data": {
"chatlab": {
"version": "0.0.2",
"exportedAt": 1711468800,
"generator": "ChatLab API"
},
"meta": {
"name": "技术交流群",
"platform": "qq",
"type": "group"
},
"members": [...],
"messages": [...]
}
}
```
---
### POST /api/v1/import
将聊天记录导入 ChatLab**创建新会话**。
#### 支持的 Content-Type
| Content-Type | 格式 | 适用场景 | Body 限制 |
| ---------------------- | ------------------- | ------------------------------ | ---------- |
| `application/json` | ChatLab Format JSON | 中小数据(快速测试、脚本集成) | **50MB** |
| `application/x-ndjson` | ChatLab JSONL 格式 | 大规模数据(生产级集成) | **无限制** |
#### JSON 模式示例
```bash
curl -X POST http://127.0.0.1:5200/api/v1/import \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chatlab": {
"version": "0.0.2",
"exportedAt": 1711468800
},
"meta": {
"name": "导入测试",
"platform": "qq",
"type": "group"
},
"members": [
{ "platformId": "123", "accountName": "测试用户" }
],
"messages": [
{
"sender": "123",
"accountName": "测试用户",
"timestamp": 1711468800,
"type": 0,
"content": "Hello World"
}
]
}'
```
#### JSONL 模式示例
```bash
cat data.jsonl | curl -X POST http://127.0.0.1:5200/api/v1/import \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/x-ndjson" \
--data-binary @-
```
**响应:**
```json
{
"success": true,
"data": {
"mode": "new",
"sessionId": "session_xyz789"
}
}
```
> 关于 ChatLab Format 的详细规范,请参考 [ChatLab 标准化格式规范](./chatlab-format.md)。
---
### POST /api/v1/sessions/:id/import
将聊天记录**增量导入**到已存在的会话。支持去重,相同消息不会重复插入。
**去重规则:**
消息唯一键为 `timestamp + senderPlatformId + contentLength`。如果一条消息的时间戳、发送者和内容长度与已有消息完全相同,则视为重复并跳过。
**路径参数:**
| 参数 | 类型 | 说明 |
| ---- | ------ | ----------- |
| `id` | string | 目标会话 ID |
Content-Type 和请求体格式与 `POST /api/v1/import` 相同。
**响应:**
```json
{
"success": true,
"data": {
"mode": "incremental",
"sessionId": "session_abc123",
"newMessageCount": 150
}
}
```
---
## 并发与限制
| 限制项 | 值 | 说明 |
| ---------------- | ------- | ------------------------------- |
| JSON 请求体大小 | 50MB | `application/json` 模式 |
| JSONL 请求体大小 | 无限制 | `application/x-ndjson` 流式模式 |
| 导出消息上限 | 10 万条 | `/export` 端点 |
| 分页最大每页 | 1000 条 | `/messages` 端点 |
| 导入并发 | 1 | 同一时刻仅允许一个导入操作 |
---
## 错误码
| 错误码 | HTTP 状态码 | 说明 |
| ------------------------ | ----------- | ------------------------------- |
| `UNAUTHORIZED` | 401 | Token 无效或缺失 |
| `SESSION_NOT_FOUND` | 404 | 会话不存在 |
| `INVALID_FORMAT` | 400 | 请求体不符合 ChatLab Format |
| `SQL_READONLY_VIOLATION` | 400 | SQL 不是 SELECT 语句 |
| `SQL_EXECUTION_ERROR` | 400 | SQL 执行出错 |
| `EXPORT_TOO_LARGE` | 400 | 消息数超过导出上限10 万条) |
| `BODY_TOO_LARGE` | 413 | 请求体超过 50MB仅 JSON 模式) |
| `IMPORT_IN_PROGRESS` | 409 | 有其他导入正在进行 |
| `IMPORT_FAILED` | 500 | 导入失败 |
| `SERVER_ERROR` | 500 | 服务内部错误 |
---
## 安全说明
- **仅本机访问**API 绑定 `127.0.0.1`,不对外暴露
- **Token 认证**:所有端点需携带有效 Bearer Token
- **SQL 只读限制**`/sql` 端点仅允许 `SELECT` 查询
- **默认关闭**API 服务需手动开启
---
## 使用场景
### 1. MCP 集成
将 ChatLab API 接入 Claude Desktop 等 AI 工具,实现 AI 对聊天记录的直接查询和分析。
### 2. 自动化脚本
编写脚本定期从其他平台导出聊天记录,转换为 ChatLab Format 后通过 Push API 自动导入。
### 3. 数据分析
通过 SQL 端点执行自定义查询,配合 Python/R 等工具进行高级数据分析。
### 4. 数据备份
通过 `/export` 端点定期导出重要会话数据作为 JSON 备份。
### 5. 定时拉取
在设置页配置外部数据源 URLChatLab 会按设定间隔自动拉取并导入新数据。
---
## 版本信息
| 版本 | 说明 |
| ---- | ------------------------------------------------------------------------------ |
| v1 | 初始版本支持会话查询、消息搜索、SQL、导出、导入JSON + JSONL、Pull 调度器 |