# 招商助手前端 API 接口文档 > ## ⚠️ 这是交接时的代码快照,不是接口规格 > > - **来源**:接手项目时根据当时的源码整理生成 > - **没有版本可追溯性**:接口和功能后续一直在改,本文档不会跟着更新; > 从生成那一刻之后新增或修改的接口,它一律不知道 > - **用途**:只能用来翻"某个前端模块**当初**调了什么接口、传了什么参数" > > **不要**照着它实现新功能(现行契约见 `../api-chat.md`); > **也不要**拿它当"原来行为是什么"的判据——它是二手整理,可能遗漏或失真, > 精确判断请直接 diff 改动前的源码备份。 > 基于 `zhaoshang-llm` 项目源码整理,涵盖全部前端调用的后端接口。 > > 环境变量说明: > - `VITE_API` — 主业务 API 网关基础地址(如 `//qingpu-data-api.metamaker.cn`) > - `VITE_MODEL_SERVER` — LLM 模型服务地址(如 `https://qingpu-data-api.metamaker.cn/llms/qingpu`) > - `VITE_ASR` — 语音识别服务地址 > - `VITE_ASSISTANT_STATISTICS_BASE_URL` — 统计服务基础地址(回退到 `VITE_API`) > - `VITE_STREAM_SERVER` — 流媒体/数字人视频流服务地址 --- ## 目录 1. [对话服务](#1-对话服务) - 1.1 [AI 对话生成(SSE 流式)](#11-ai-对话生成sse-流式) - 1.2 [表单对话生成(SSE 流式)](#12-表单对话生成sse-流式) - 1.3 [表单提交对话(SSE 流式)](#13-表单提交对话sse-流式) 2. [企业认证服务](#2-企业认证服务) - 2.1 [企业登录](#21-企业登录) - 2.2 [获取企业信息](#22-获取企业信息) 3. [会话管理服务](#3-会话管理服务) - 3.1 [获取远程会话列表](#31-获取远程会话列表) - 3.2 [获取会话聊天记录](#32-获取会话聊天记录) - 3.3 [更新会话信息(重命名)](#33-更新会话信息重命名) - 3.4 [删除会话](#34-删除会话) 4. [反馈服务](#4-反馈服务) - 4.1 [对话反馈(点赞/点踩)](#41-对话反馈点赞点踩) - 4.2 [统计反馈上报](#42-统计反馈上报) 5. [统计服务](#5-统计服务) - 5.1 [页面访问统计](#51-页面访问统计) 6. [文件上传服务](#6-文件上传服务) - 6.1 [获取 OSS 上传签名凭证](#61-获取-oss-上传签名凭证) - 6.2 [上传文件到 OSS](#62-上传文件到-oss) 7. [媒体资源服务](#7-媒体资源服务) - 7.1 [获取媒体文件信息](#71-获取媒体文件信息) 8. [政策服务](#8-政策服务) - 8.1 [政策列表搜索](#81-政策列表搜索) - 8.2 [政策列表更新数据获取](#82-政策列表更新数据获取) 9. [历史记录服务(已停用)](#9-历史记录服务已停用) - 9.1 [追加历史记录](#91-追加历史记录) 10. [TTS 语音合成服务(已停用)](#10-tts-语音合成服务已停用) - 10.1 [文本转语音](#101-文本转语音) 11. [ASR 语音识别服务](#11-asr-语音识别服务) - 11.1 [ASR WebSocket 语音识别](#111-asr-websocket-语音识别) 12. [环境配置与代理映射](#12-环境配置与代理映射) 13. [后端服务架构总览](#13-后端服务架构总览) --- ## 1. 对话服务 ### 1.1 AI 对话生成(SSE 流式) **用户向 AI 发送问题,服务端以 Server-Sent Events 流式返回回答内容。** | 属性 | 值 | |---|---| | **接口地址** | `{VITE_API}/knowledge/chat` 或 `{VITE_API}/dialog/chat` | | **选择逻辑** | 由 `isKnowledgeApi()` 返回 `true` 时用 `/knowledge/chat`,否则用 `/dialog/chat` | | **请求方法** | `POST` | | **通讯协议** | SSE(Server-Sent Events),使用 `@microsoft/fetch-event-source` 库 | | **源码位置** | `src/components/stream-message-coordinator.ts` L270-551 | | **调用入口** | `useBusinessAssistantChat.ts` → `sendMessage()` → `smc.generateAnswer(text)` | #### 请求 Headers | Header | 类型 | 必填 | 说明 | |---|---|---|---| | `Content-Type` | `string` | ✅ | 固定为 `application/json` | | `Authorization` | `string` | ⚠️ 可选 | 用户认证 token(`globalThis.authToken` 或 `globalThis.token`) | | `Uber-Trace-Id` | `string` | ⚠️ 可选 | 阿里云 ARMS 链路追踪 ID(当 `window.__bl` 存在时自动注入) | #### 请求体 (JSON) ```json { "card_id": 0, "department_id": "", "text": "用户输入的问题文本", "session_id": "uuid-session-id", "format": "object", "model": "当前 LLM 模型名(globalThis.llmModel)", "transmission": { "session_id": "uuid-session-id", "model": "当前 LLM 模型名", "credit_code": "企业统一社会信用代码", "files": ["https://oss-url/uploaded-file1.pdf"], "file_pos": [0], "enable_thinking": true }, "source": "zhaoshang", "credit_code": "企业统一社会信用代码", "knowledge_ids": ["知识库 ID 列表"], "enable_history": true } ``` | 字段 | 类型 | 必填 | 说明 | |---|---|---|---| | `card_id` | `number` | ✅ | 卡片 ID,固定传入 | | `department_id` | `string` | ⚠️ | 部门 ID | | `text` | `string` | ✅ | 用户问题文本 | | `session_id` | `string` | ✅ | 当前会话 UUID | | `format` | `string` | ✅ | 固定值 `"object"` | | `model` | `string` | ✅ | LLM 模型标识,如 `"gpt-4"` | | `transmission` | `object` | ✅ | 传输参数,包含会话、模型、企业、文件等上下文 | | `transmission.credit_code` | `string` | ⚠️ | 企业信用代码(登录用户才有) | | `transmission.files` | `string[]` | ⚠️ | 用户上传的文件 URL 列表 | | `transmission.file_pos` | `number[]` | ⚠️ | 文件位置标记(与 files 长度一致) | | `transmission.enable_thinking` | `boolean` | ⚠️ | 是否开启深度思考模式 | | `source` | `string` | ⚠️ | 来源标识,如 `"zhaoshang"` | | `credit_code` | `string` | ⚠️ | 企业信用代码 | | `knowledge_ids` | `string[]` | ⚠️ | 知识库 ID 列表(从上一轮返回中获取) | | `enable_history` | `boolean` | ✅ | 固定值 `true`,启用历史上下文 | | `task_id` | `string` | ⚠️ | 仅在 `formChatting=true` 时传入 | #### SSE 事件处理 **`onopen` 回调**: 连接建立后触发,可能返回服务端预处理信息(如限流提示),通过 `handleServerPreprocessInfo(response)` 解析。 **`onmessage` 回调**: 每条 SSE 消息的 `data` 为 JSON 字符串: ```json { "message": "流式输出的文本片段", "record_id": "对话记录 ID(首条消息携带)", "status": "done | interrupt", "reasoning_content": "思考过程文本(深度思考模式)", "knowledge_ids": ["知识库 ID"], "disease_id": "诊断 ID(医疗场景)", "from": "风险等级标识" } ``` | 事件/字段 | 说明 | |---|---| | `msg.event === "fail"` | 服务端返回失败,`data.message` 为错误信息 | | `data.record_id` | 首次出现时,触发 `recordId` 事件供反馈使用 | | `data.reasoning_content` | 深度思考内容,触发 `reasoning_content` 事件 | | `data.message` 包含 `` / `` | 切换思考模式标志 | | `data.message` 包含媒体资源 | 解析后触发 `relate` / `reference` 事件 | | `data.message` 包含 `