ClouisleClouisle

会话 API

查询、重命名、删除会话,并读取会话与消息统计

会话有两套路由:

  • 用户会话(agents 路由器):挂载在 /api/v1/agents 下,只作用于当前用户自己的会话,支持查询、重命名、删除会话与删除单条消息。
  • 平台会话(conversations 路由器):挂载在 /api/v1/conversations 下,面向团队/管理视角,支持分页检索团队内会话、查看详情、单条与批量删除,以及会话统计。

两套路由都需要 conversation:read(写操作为 conversation:delete)。

端点总览

方法路径用途
GET/api/v1/agents/conversations/my查询当前用户的全部会话
GET/api/v1/agents/{agent_id}/conversations查询当前用户在某 Agent 下的会话
GET/api/v1/agents/conversations/{conversation_id}获取会话和消息
PATCH/api/v1/agents/conversations/{conversation_id}重命名会话
DELETE/api/v1/agents/conversations/{conversation_id}删除会话
DELETE/api/v1/agents/conversations/{conversation_id}/messages/{message_id}删除单条消息
GET/api/v1/conversations分页检索团队内会话
GET/api/v1/conversations/{conversation_id}获取会话详情(含消息与用户信息)
DELETE/api/v1/conversations/{conversation_id}删除单个会话
DELETE/api/v1/conversations?ids=...批量删除会话
GET/api/v1/conversations/stats会话与消息总量、按 Agent 分布
GET/api/v1/conversations/stats/trends会话、消息与 Token 的按日趋势

用户会话端点

用户端点全部以 Conversation.user 为范围:访问他人的会话一律按「不存在」处理(404,错误码 6210)。每个端点的参数、响应与错误详见 Agent API 的 Agent 会话。

方法路径目标
GET/api/v1/agents/conversations/my当前用户的全部会话,可按 agent_id 过滤
GET/api/v1/agents/{agent_id}/conversations当前用户在该 Agent 下的会话,支持 search/时间范围/sort_by 与分页
GET/api/v1/agents/conversations/{conversation_id}会话详情 + 可见消息(含 version_count)
PATCH/api/v1/agents/conversations/{conversation_id}重命名(title 1–200 字符,不传则不变)
DELETE/api/v1/agents/conversations/{conversation_id}删除会话(消息级联,同时递减 Agent 计数)
DELETE/api/v1/agents/conversations/{conversation_id}/messages/{message_id}删除单条消息(行锁事务内同步更新会话计数与 Token 用量)

平台会话端点

平台路由器面向团队/管理视角,是管理后台「会话管理」页面的数据源。

分页检索会话

GET /api/v1/conversations
参数类型必填默认值说明
team_idstring (UUID)否-按团队筛选(会校验团队成员身份)
agent_idstring (UUID)否-按 Agent 筛选(不在可访问范围内时返回空列表而非报错)
user_idstring (UUID)否-按用户筛选(仅对具备仪表盘访问权限的调用者生效)
searchstring否-按会话标题模糊匹配,不检索消息正文
untitled_onlyboolean否false仅返回无标题会话;与 search 同时提供时 untitled_only 生效(elif 分支)
pageinteger否1页码(最小 1)
page_sizeinteger否20每页条数(1–100)

结果按 updated_at 降序返回 PageData[ConversationListOut]。列表项除会话字段外还包含管理视图专用的 user_id、user_name,以及冗余的 agent_name、agent_icon。

获取会话详情

GET /api/v1/conversations/{conversation_id}

返回 ConversationWithMessages:会话字段 + messages(可见消息,逐条带 version_count),并额外带 user_id、user_name。与用户端点不同,平台详情允许具备仪表盘访问权限的管理员读取团队内他人的会话。

删除会话

DELETE /api/v1/conversations/{conversation_id}
curl -X DELETE "https://your-domain.com/api/v1/conversations/conv-123" \
  -H "Authorization: Bearer YOUR_TOKEN"

批量删除会话

DELETE /api/v1/conversations?ids=conv-123&ids=conv-456

ids 是必填的重复查询参数(list[UUID]),不是 JSON 请求体。批量删除不会回滚单条失败:只要至少一个目标存在就执行删除,只有全部目标都不存在时才返回 404(6210)。删除同样是永久的,建议先按时间、团队、用户与 Agent 筛选确认范围。

访问范围

平台端点的可见范围由「可访问 Agent + 仪表盘权限」共同决定:

调用者可见范围
超级管理员全部团队的会话
团队所有者/管理员(具备仪表盘访问权限)所在团队内全部会话;可进一步用 team_id 限定
普通成员/访客仅自己的会话

非超级管理员在指定 team_id 时会先校验团队成员身份;无可访问 Agent 时列表返回空结果(不报错)。

能力差异:平台 /api/v1/conversations 路由器没有 PATCH(重命名)也没有按消息删除的端点。这两项操作只在 agents 路由器下的 /api/v1/agents/conversations/... 提供。会话详情端点也不提供独立的消息分页接口——消息内联在详情响应中。

会话统计

两条统计路由都以「可访问 Agent」为底座,并叠加 own_only 与仪表盘权限:

  • 不传 team_id 时,范围是调用者所在团队的全部 Agent(超级管理员为全部 Agent)。
  • 传入 team_id 时,范围限定为该团队的 Agent,并校验团队成员身份。
  • 具备仪表盘访问权限(超级管理员,或指定团队的所有者/管理员)时看到范围内全部会话;普通成员/访客只看到自己的会话。
  • own_only=true 会把任何调用者都限制为自己的会话。

当调用者没有任何可访问 Agent 时,两条路由都返回零值数据(stats 为空的 conversations_by_agent,trends 为整段零值日桶),而不是报错。

会话统计概览

GET /api/v1/conversations/stats
参数类型必填默认值说明
team_idstring (UUID)否-限定到单个团队
own_onlyboolean否false仅统计调用者自己的会话
{
  "code": 0,
  "data": {
    "total_conversations": 1284,
    "total_messages": 18237,
    "conversations_by_agent": [
      {
        "agent_id": "1c2f1a2e-0f4e-4a8f-9d4a-2b0d7b3dcb6d",
        "agent_name": "Support Assistant",
        "agent_icon": "life-buoy",
        "count": 742
      }
    ]
  },
  "msg": "success"
}

conversations_by_agent 最多返回会话数最多的 10 个 Agent,按数量降序。若某 Agent 记录已无法解析,agent_name 回退为本地化的「unknown」文案,agent_icon 为 null。

会话趋势

GET /api/v1/conversations/stats/trends?period=30d
参数类型必填默认值说明
team_idstring (UUID)否-限定到单个团队
periodstring否7d时间范围:7d(7 个日点)或 30d(30 个日点);其他任何取值都按 7d 处理
own_onlyboolean否false仅统计调用者自己的会话
{
  "code": 0,
  "data": {
    "period": "7d",
    "data": [
      {
        "date": "09/20",
        "conversations": 34,
        "messages": 512,
        "tokens": 187340,
        "users": {}
      }
    ]
  },
  "msg": "success"
}
字段类型说明
periodstring请求传入的周期
dataarray每个日点一项,从最早到当天
data[].datestring日期标签,格式为 MM/DD
data[].conversationsinteger当天创建的会话数
data[].messagesinteger当天在可访问会话中产生的消息数
data[].tokensinteger当天 prompt 与 completion Token 之和
data[].usersobject按用户 ID 的拆分:{"name": string, "conversations": integer, "tokens": integer}

users 只在请求带了 team_id 且调用者具备该团队仪表盘权限时才填充,否则为空对象。另外,在「无可访问 Agent」的零值提前返回路径中,日点结构里根本没有 users 字段——客户端解析前应先判断字段是否存在,不要假设它一定为空对象。

消息版本

消息可有多个版本,响应包含 version_number、is_active、父消息/分支关系与 version_count。编辑或重新生成会创建分支;切换版本只改变活动版本,且会停用所选版本之后的版本(它们基于旧分支)。详见 Agent 聊天 API 的消息版本。

错误码

错误码消息说明
2000Unauthorized缺少或无效的 Bearer 令牌
3000Permission denied缺少 conversation:read / conversation:delete,或 not_team_member(指定的 team_id 非本人团队)
6210Conversation not found会话不存在、不属于当前用户(用户端点),或不在可访问团队内
6211Message not found消息不存在或不属于该会话(仅删除单条消息时返回)
1001Validation failed参数不合法,例如 ids 缺失或分页越界(page_size 上限 100)

用户端点把「他人的会话」与「不存在的会话」统一返回 404(6210),以免泄露会话是否存在;平台端点对不在可访问团队内的会话返回 403(not_team_member),对普通成员访问他人会话同样返回 404。

相关文档

这篇文章对你有帮助吗?

本页目录