ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【AI大模型接入SDK】ChatServer接口设计规范

【AI大模型接入SDK】ChatServer接口设计规范


🎬 个人主页:艾莉丝努力练剑

❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》
《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平

🎬 艾莉丝的简介:


文章目录

  • 1 ~> ChatServer 接口整体概述
    • 1.1 业务功能点
    • 1.2 API 预先约定的工程价值
  • 2 ~> RESTful API 接口设计规范
    • 2.1 RESTful 基础概念
      • 2.1.1 核心要素
    • 2.2 RESTful 接口通用报文范式
      • 2.2.1 请求报文构成
      • 2.2.2 响应报文通用结构
  • 3 ~> ChatServer 全部接口契约定义
    • 3.1 获取会话列表
      • 3.1.1 请求定义
      • 3.1.2 响应体
    • 3.2 获取可用模型列表
      • 3.2.1 请求定义
      • 3.2.2 响应体
    • 3.3 创建新会话
      • 3.3.1 请求定义
      • 3.3.2 响应体
    • 3.4 获取会话历史消息
      • 3.4.1 请求定义
      • 3.4.2 响应体
    • 3.5 发送消息‑全量返回模式
      • 3.5.1 请求定义
      • 3.5.2 响应体
    • 3.6 发送消息‑流式 SSE 异步模式
      • 3.6.1 请求定义
      • 3.6.2 SSE 流式响应报文格式
    • 3.7 删除会话
      • 3.7.1 请求定义
      • 3.7.2 响应体
  • 4 ~> ChatServer 接口开发总结
    • 4.1 工程约束
    • 4.2 关键工程要点
  • 结尾


1 ~> ChatServer 接口整体概述

1.1 业务功能点

ChatServer 聊天服务核心业务能力,客户端通过 HTTP 接口与服务端完成交互,实现前后端分离架构。

  • 获取会话列表
  • 获取支持的模型列表
  • 新建会话
  • 发送消息(支持全量返回、SSE 流式返回两种模式)
  • 获取会话历史消息
  • 删除会话

1.2 API 预先约定的工程价值

  • 前后端依据同一套 API 文档并行开发,避免联调阶段接口契约不匹配问题。
  • 测试人员可基于 API 文档提前编写测试用例、设计测试计划。
  • 所有角色开发、测试工作同步推进,提升整体项目迭代效率。

2 ~> RESTful API 接口设计规范

2.1 RESTful 基础概念

REST:Representational State Transfer,表现层状态转移;RESTful 为基于 REST 思想的 API 设计风格,不是网络协议,是一套接口设计标准,底层依托 HTTP 协议实现客户端‑服务器通信。

2.1.1 核心要素

  • 资源 (Resource)
    • 将业务中每一个实体、对象抽象为资源,例如会话、模型、用户。
    • 每一份资源使用唯一 URI 进行标识,URL 作为 URI 的具体实现形式。
    • 示例:/api/sessions代表会话集合资源。
  • 表现层
    • 代表资源在网络传输中的序列化格式,支持 JSON、XML、HTML。
    • RESTful 工程实践优先选用JSON,具备轻量、程序易于解析的特性。
  • HTTP 动作(HTTP Methods),使用 HTTP 方法描述对资源的操作行为
    • GET:获取资源
    • POST:创建资源
    • PUT:更新资源
    • DELETE:删除资源
  • 无状态特性
    • 每一次 HTTP 请求完全独立;服务端不保存客户端会话上下文状态。
    • 客户端每一次请求必须携带服务端处理业务所需要的全部参数信息。
    • 若业务需要会话状态,必须额外自行实现会话存储机制。

2.2 RESTful 接口通用报文范式

2.2.1 请求报文构成

  1. HTTP 请求方法
  2. 资源 URI(请求 URL)
  3. 请求体 JSON 载荷(POST/PUT 场景)

2.2.2 响应报文通用结构

  • HTTP 状态码标识请求传输层级结果;业务结果由响应体内业务字段表达。
  • 响应体统一 JSON 格式,包含请求标识、业务错误码、错误信息、结果载体对象。
{"requestId":"string",// 请求唯一ID,用于链路追踪"errorCode":0,// 业务错误码,0代表业务执行成功"errorMsg":"",// 业务错误描述,成功时为空字符串"result":{}// 业务返回数据载体对象}

3 ~> ChatServer 全部接口契约定义

公共约束:非流式接口 HTTP 返回状态码均为200 OK,业务成功失败通过 JSON 内部布尔 / 错误码字段区分;所有非流式接口请求、响应均使用 JSON 格式。

3.1 获取会话列表

3.1.1 请求定义

  • 请求方法:GET
  • 请求 URL:/api/sessions
  • 请求体:无

3.1.2 响应体

{"success":true,// bool,本次业务是否成功"message":"string",// 结果描述文本"data":[// array,会话列表数组{"id":"string",// 会话id"model":"string",// 使用的模型名称"created_at":1700000000,// int64_t,会话创建时间戳"updated_at":1700000100,// int64_t,会话最后更新时间戳"message_count":10,// int,该会话对话总次数"first_user_message":"string"// string,第一条用户消息正文,用于会话列表预览}]}

3.2 获取可用模型列表

3.2.1 请求定义

  • 请求方法:GET
  • 请求 URL:/api/models
  • 请求体:无

3.2.2 响应体

{"success":true,// bool,业务是否成功"message":"string",// 结果描述"data":[// array,可用模型数组{"name":"string",// 模型名称,调用时作为入参使用"desc":"string"// 模型功能描述}]}

3.3 创建新会话

3.3.1 请求定义

  • 请求方法:POST
  • 请求 URL:/api/session
  • 请求体
{"model":"string"// 需要使用的模型名称,来源于/api/models接口返回name字段}

3.3.2 响应体

{"success":true,// bool,业务是否成功"message":"string",// 结果描述"data":[{"session_id":"string",// 会话唯一ID,后续所有会话相关接口必须携带该标识"model":"string"// 当前会话绑定的模型名称}]}

3.4 获取会话历史消息

3.4.1 请求定义

  • 请求方法:GET
  • 请求 URL:/api/session/${session_id}/history
  • 路径参数:session_id,创建会话接口返回的会话 ID
  • 请求体:无

3.4.2 响应体

{"success":true,// bool,业务是否成功"message":"string",// 结果描述"data":[// array,消息历史数组,按时间排序{"id":"string",// 单条消息唯一id"role":"string",// 消息角色:user / assistant"content":"string",// 消息正文内容"timestamp":1700000200// int64_t,消息生成时间戳,秒级}]}

3.5 发送消息‑全量返回模式

等待大模型完整生成全部内容之后,一次性返回全部应答结果。

3.5.1 请求定义

  • 请求方法:POST
  • 请求 URL:/api/message
  • 请求体
{"session_id":"string",// 目标会话ID"model":"string",// 模型名称"message":"string"// 用户输入提问内容}

3.5.2 响应体

{"success":true,// bool,业务是否成功"message":"string",// 结果描述"data":[{"session_id":"string","response":"string"// 大模型完整应答全部文本}]}

3.6 发送消息‑流式 SSE 异步模式

SSE(Server‑Sent Events)服务端推送事件,分片逐块返回模型输出文本,前端实时渲染打字机效果;HTTP 状态码 200 OK,响应 Content‑Type 为text/event‑stream。

3.6.1 请求定义

  • 请求方法:POST
  • 请求 URL:/api/message/async
  • 请求体
{"session_id":"string","model":"string","message":"string"}

3.6.2 SSE 流式响应报文格式

data:模型输出片段1 data:模型输出片段2 data:模型输出片段3 data:[DONE]
  • 每一条data:代表一块增量输出文本;客户端持续拼接收到的 data 内容。
  • data:[DONE]为流结束标记,客户端收到该标记代表本次对话流式输出全部完成,关闭 SSE 连接。

3.7 删除会话

3.7.1 请求定义

  • 请求方法:DELETE
  • 请求 URL:/api/session/${session_id}
  • 路径参数:session_id,待删除会话 ID
  • 请求体:无

3.7.2 响应体

{"success":true,// bool;true代表会话服务端删除成功,前端需要同步删除本地页面会话条目"message":"string"// 结果描述}

4 ~> ChatServer 接口开发总结

4.1 工程约束

  1. ChatServer 后端服务、前端页面交互逻辑,必须严格遵循本套 RESTful 接口契约实现。
  2. 前端页面调用全部接口,完成会话全生命周期管理:创建会话、发送消息、拉取历史、销毁会话。

4.2 关键工程要点

  • 接口契约先行:正式编码开发前完成 API 文档定义,支撑前后端、测试多角色并行工作。
  • 两种消息返回模式选型:
    • 全量返回:逻辑简单,适合简短问答;大模型长输出场景用户体验差,等待时间长。
    • SSE 流式输出:实时增量推送,聊天产品主流方案;客户端需要实现 SSE 事件监听、文本分片拼接逻辑。
  • RESTful 无状态:会话状态全部通过session_id参数携带,服务端不在 HTTP 上下文存储会话信息。
  • 资源路径语义化:使用 HTTP 动词表达增删改查行为,URI 代表业务资源,不使用 URL 中出现/getSession这类动词形式。

结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

艾莉丝努力练剑

C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主

👀【关注】跟随我一起深耕技术领域,见证每一次成长。
❤️【点赞】让优质内容被更多人看见,让知识传递更有力量。
⭐【收藏】把核心知识点存好,在需要时随时查、随时用。
💬【评论】分享你的经验或疑问,评论区一起交流避坑!

不要忘记给博主“一键四连”哦!

“今日练剑达成!”

“技术之路难免有困惑,但同行的人会让前进更有方向。”

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

往期回顾:

【AI大模型接入SDK】ChatServer项目整体概述与系统架构

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡
૮₍ ˶ ˊ ᴥ ˋ˶₎ა

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进