# RAG 应用 API 接口文档 **项目**: 建科小智开放平台 **版本**: v3.8 **最后更新**: 2026-04-02 --- ## 概述 本文档介绍如何通过 API 调用 RAG 应用和知识库检索功能。 ### 基础信息 - **Base URL**: `http://your-domain.com/bigmodel/api` - **认证方式**: API Key / Token - **数据格式**: JSON ### 认证方式 在请求头中携带认证信息: ```http Authorization: Bearer {your_token} ``` 或 ```http X-API-Key: {your_api_key} ``` --- ## 应用调用接口 通过应用 ID 调用 RAG 应用,实现智能问答功能。 ### 发送对话消息 向指定应用发送消息并获取回复。 ```http POST /chat/{appId} ``` **路径参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | appId | string | 是 | RAG 应用 ID | **请求参数**: | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | query | string | 是 | - | 用户问题内容 | | conversationId | string | 否 | - | 会话 ID(用于多轮对话) | | userId | string | 否 | - | 用户 ID(用于区分不同用户) | | streaming | boolean | 否 | false | 是否使用流式响应 | **请求示例**: ```bash curl -X POST http://your-domain.com/bigmodel/api/chat/app_001 \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "query": "如何申请年假?", "userId": "user_123", "streaming": false }' ``` **响应示例**(非流式): ```json { "code": 200, "message": "success", "data": { "conversationId": "conv_abc123", "answer": "申请年假的流程如下:\n\n1. 登录公司 OA 系统\n2. 进入\"请假申请\"页面\n3. 选择请假类型为\"年假\"\n4. 填写请假日期和天数\n5. 提交申请等待审批", "sources": [ { "documentId": "doc_001", "documentName": "员工手册.pdf", "sliceId": "slice_001", "content": "员工年假申请需提前 3 个工作日在 OA 系统提交...", "score": 0.92 }, { "documentId": "doc_002", "documentName": "考勤管理制度.pdf", "sliceId": "slice_045", "content": "年假天数根据工龄计算:1-3 年 5 天,3-5 年 10 天...", "score": 0.85 } ], "usage": { "promptTokens": 156, "completionTokens": 89, "totalTokens": 245 } } } ``` **流式响应示例**: 当 `streaming: true` 时,服务器会以 SSE (Server-Sent Events) 方式推送数据: ```text data: {"answer": "申", "conversationId": "conv_abc123"} data: {"answer": "请年假", "conversationId": "conv_abc123"} data: {"answer": "的流程如下:\n\n", "conversationId": "conv_abc123"} data: {"answer": "1. 登录 OA 系统", "conversationId": "conv_abc123"} data: [DONE] ``` **错误响应**: ```json { "code": 400, "message": "应用不存在或已下线", "data": null } ``` --- ### 获取对话历史 获取指定会话的完整对话历史。 ```http GET /chat/{appId}/history/{conversationId} ``` **路径参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | appId | string | 是 | RAG 应用 ID | | conversationId | string | 是 | 会话 ID | **响应示例**: ```json { "code": 200, "message": "success", "data": { "conversationId": "conv_abc123", "appId": "app_001", "userId": "user_123", "createdAt": "2026-04-02 10:30:00", "updatedAt": "2026-04-02 11:45:00", "messages": [ { "id": "msg_001", "role": "user", "content": "如何申请年假?", "createdAt": "2026-04-02 10:30:00" }, { "id": "msg_002", "role": "assistant", "content": "申请年假的流程如下:\n\n1. 登录公司 OA 系统\n2. 进入\"请假申请\"页面...", "createdAt": "2026-04-02 10:30:05", "sources": [ { "documentName": "员工手册.pdf", "content": "员工年假申请需提前 3 个工作日..." } ] }, { "id": "msg_003", "role": "user", "content": "年假有多少天?", "createdAt": "2026-04-02 10:31:00" }, { "id": "msg_004", "role": "assistant", "content": "年假天数根据工龄计算:\n- 1-3 年:5 天\n- 3-5 年:10 天\n- 5-10 年:15 天", "createdAt": "2026-04-02 10:31:05" } ] } } ``` --- ### 删除对话会话 删除指定的对话会话及其所有历史记录。 ```http DELETE /chat/{appId}/history/{conversationId} ``` **响应示例**: ```json { "code": 200, "message": "删除成功", "data": { "conversationId": "conv_abc123" } } ``` --- ## 知识库检索接口 直接调用知识库进行文档检索,不经过应用层。 ### 单一知识库检索 在单个知识库中进行语义检索。 ```http POST /knowledge/{knowledgeId}/search ``` **路径参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | knowledgeId | string | 是 | 知识库 ID | **请求参数**: | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | query | string | 是 | - | 检索关键词或问题 | | topK | number | 否 | 5 | 返回结果数量(1-20) | | scoreThreshold | number | 否 | 0.5 | 相似度阈值(0-1) | | documentIds | array | 否 | - | 指定检索的文档 ID 列表 | **请求示例**: ```bash curl -X POST http://your-domain.com/bigmodel/api/knowledge/kb_001/search \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "query": "年假申请流程", "topK": 10, "scoreThreshold": 0.7 }' ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "knowledgeId": "kb_001", "knowledgeName": "人力资源知识库", "query": "年假申请流程", "total": 5, "results": [ { "sliceId": "slice_001", "documentId": "doc_001", "documentName": "员工手册.pdf", "content": "员工年假申请需提前 3 个工作日在 OA 系统提交申请,经部门经理审批后方可休假。", "score": 0.92, "metadata": { "pageNumber": 15, "position": "第 3 章 第 2 节" } }, { "sliceId": "slice_045", "documentId": "doc_002", "documentName": "考勤管理制度.pdf", "content": "年假天数根据工龄计算:1-3 年 5 天,3-5 年 10 天,5-10 年 15 天,10 年以上 20 天。", "score": 0.85, "metadata": { "pageNumber": 8, "position": "第 2 章 第 5 条" } }, { "sliceId": "slice_112", "documentId": "doc_001", "documentName": "员工手册.pdf", "content": "未休年假可在当年申请折现,折现标准按日工资的 300% 计算。", "score": 0.78, "metadata": { "pageNumber": 16, "position": "第 3 章 第 3 节" } } ] } } ``` --- ### 多知识库联合检索 在多个知识库中进行联合语义检索。 ```http POST /knowledge/search ``` **请求参数**: | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | query | string | 是 | - | 检索关键词或问题 | | knowledgeIds | array | 是 | - | 知识库 ID 列表 | | topK | number | 否 | 5 | 每个知识库返回结果数量 | | scoreThreshold | number | 否 | 0.5 | 相似度阈值 | | rerank | boolean | 否 | false | 是否启用重排序 | **请求示例**: ```bash curl -X POST http://your-domain.com/bigmodel/api/knowledge/search \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "query": "项目报销流程", "knowledgeIds": ["kb_001", "kb_003", "kb_005"], "topK": 5, "rerank": true }' ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "query": "项目报销流程", "knowledgeBaseCount": 3, "total": 12, "results": [ { "knowledgeId": "kb_003", "knowledgeName": "财务知识库", "slices": [ { "sliceId": "slice_201", "documentId": "doc_050", "documentName": "项目费用报销管理办法.pdf", "content": "项目报销流程:1. 填写报销单 2. 附上发票和明细 3. 项目经理审批 4. 财务审核 5. 出纳付款", "score": 0.95, "rerankScore": 0.98 }, { "sliceId": "slice_205", "documentId": "doc_050", "documentName": "项目费用报销管理办法.pdf", "content": "差旅费报销需提供往返交通票据和住宿发票,市内交通按每天 80 元包干。", "score": 0.82, "rerankScore": 0.85 } ] }, { "knowledgeId": "kb_001", "knowledgeName": "人力资源知识库", "slices": [ { "sliceId": "slice_078", "documentId": "doc_015", "documentName": "员工福利手册.pdf", "content": "项目奖金发放与报销是独立的流程,奖金随工资发放,报销单独走财务流程。", "score": 0.71, "rerankScore": 0.72 } ] } ] } } ``` --- ### 获取知识库文档列表 获取指定知识库中的文档列表。 ```http GET /knowledge/{knowledgeId}/documents ``` **查询参数**: | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | pageNum | number | 否 | 1 | 页码 | | pageSize | number | 否 | 20 | 每页数量 | | keyword | string | 否 | - | 文件名关键词 | **响应示例**: ```json { "code": 200, "message": "success", "data": { "knowledgeId": "kb_001", "knowledgeName": "人力资源知识库", "total": 15, "pageNum": 1, "pageSize": 20, "documents": [ { "documentId": "doc_001", "fileName": "员工手册.pdf", "fileSize": 2048576, "fileType": "pdf", "status": "active", "sliceCount": 45, "createdAt": "2026-01-15 09:30:00", "updatedAt": "2026-01-20 14:20:00" }, { "documentId": "doc_002", "fileName": "考勤管理制度.pdf", "fileSize": 1536000, "fileType": "pdf", "status": "active", "sliceCount": 32, "createdAt": "2026-01-16 10:00:00", "updatedAt": "2026-01-22 11:30:00" } ] } } ``` --- ## 错误码说明 | 错误码 | 说明 | |--------|------| | 200 | 成功 | | 400 | 请求参数错误 | | 401 | 认证失败(Token 无效或过期) | | 403 | 无权限访问 | | 404 | 资源不存在(应用/知识库不存在) | | 429 | 请求频率超限 | | 500 | 服务器内部错误 | --- ## 使用示例 ### Python 示例 ```python import requests BASE_URL = "http://your-domain.com/bigmodel/api" TOKEN = "your_token" headers = { "Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json" } # 调用 RAG 应用 response = requests.post( f"{BASE_URL}/chat/app_001", headers=headers, json={ "query": "如何申请年假?", "userId": "user_123" } ) result = response.json() print(result["data"]["answer"]) # 知识库检索 response = requests.post( f"{BASE_URL}/knowledge/kb_001/search", headers=headers, json={ "query": "年假申请流程", "topK": 5 } ) result = response.json() for item in result["data"]["results"]: print(f"[{item['score']:.2f}] {item['content']}") ``` ### JavaScript 示例 ```javascript const BASE_URL = 'http://your-domain.com/bigmodel/api'; const TOKEN = 'your_token'; const headers = { 'Authorization': `Bearer ${TOKEN}`, 'Content-Type': 'application/json' }; // 调用 RAG 应用 async function chat(appId, query, userId) { const response = await fetch(`${BASE_URL}/chat/${appId}`, { method: 'POST', headers, body: JSON.stringify({ query, userId }) }); const result = await response.json(); return result.data.answer; } // 知识库检索 async function searchKnowledge(knowledgeId, query, topK = 5) { const response = await fetch(`${BASE_URL}/knowledge/${knowledgeId}/search`, { method: 'POST', headers, body: JSON.stringify({ query, topK }) }); const result = await response.json(); return result.data.results; } // 使用示例 chat('app_001', '如何申请年假?', 'user_123') .then(answer => console.log(answer)); ``` --- **备注**: - 所有接口的 Mock 数据位于 `src/mock/` 目录下 - 在 `src/apis/api.ts` 中通过 `USE_MOCK` 标志切换 Mock/真实 API - 生产环境请关闭 Mock 模式