IMA知识库 API
⚠️ 必读约束
🌐 服务信息
🔒 认证
所有请求必须携带 Header:
| Header | 说明 | | ---------------------- | ------------------ | | `ima-openapi-clientid` | Client ID | | `ima-openapi-apikey` | API Key | | `Content-Type` | `application/json` |
---
快速决策
| 用户意图 | 接口 | | ------------------------------- | ---------------------------------------------------------------------- | | 「上传文件到知识库」 | `check_repeated_names` → `create_media` → COS Upload → `add_knowledge` | | 「上传文件到指定文件夹」 | 先定位文件夹 → 同上(传入 `folder_id`) | | 「添加网页/微信文章到知识库」 | `import_urls` | | 「获取知识库信息」 | `get_knowledge_base` | | 「浏览知识库内容 / 浏览文件夹」 | `get_knowledge_list`(可传 `folder_id` 进入子文件夹) | | 「在知识库中搜索」 | `search_knowledge` | | 「搜索知识库列表」 | `search_knowledge_base` | | 「获取可添加的知识库列表」 | `get_addable_knowledge_base_list` | | 「检查文件名是否重复」 | `check_repeated_names` |
---
数据结构
KnowledgeBaseInfo(知识库信息)
| 字段 | 类型 | 说明 | | ----------------------- | -------- | ------------- | | `id` | string | 知识库唯一 ID | | `name` | string | 知识库名称 | | `cover_url` | string | 封面图 URL | | `description` | string | 描述 | | `recommended_questions` | string[] | 推荐问题列表 |
KnowledgeInfo(知识条目)
| 字段 | 类型 | 说明 | | ------------------ | ------ | ------------- | | `media_id` | string | 媒体 ID | | `title` | string | 标题 | | `parent_folder_id` | string | 所属文件夹 ID |
FolderInfo(文件夹条目)
| 字段 | 类型 | 说明 | | ------------------ | ------ | ----------- | | `folder_id` | string | 文件夹 ID | | `name` | string | 文件夹名称 | | `file_number` | int64 | 文件数 | | `folder_number` | int64 | 子文件夹数 | | `parent_folder_id` | string | 父文件夹 ID | | `is_top` | bool | 是否置顶 |
AddableKnowledgeBaseInfo(可添加的知识库信息)
| 字段 | 类型 | 说明 | | ------ | ------ | ---------- | | `id` | string | 知识库 ID | | `name` | string | 知识库名称 |
SearchedKnowledgeBaseInfo(搜索到的知识库信息)
| 字段 | 类型 | 说明 | | ----------- | ------ | ---------- | | `id` | string | 知识库 ID | | `name` | string | 知识库名称 | | `cover_url` | string | 封面图 URL |
SearchedKnowledgeInfo(搜索到的知识条目)
| 字段 | 类型 | 说明 | | ------------------- | ------ | -------------------------- | | `media_id` | string | 媒体 ID | | `title` | string | 标题 | | `parent_folder_id` | string | 所属文件夹 ID | | `highlight_content` | string | 高亮内容(内容匹配时返回) |
ContentInfo(内容信息)
| 字段 | 类型 | 说明 | | ------------ | ------ | ----------------------- | | `content_id` | string | 内容 ID(网页时为 URL) |
ImportURLData(URL 导入结果)
| 字段 | 类型 | 说明 | | ---------- | ------ | ----------------------- | | `url` | string | 导入的 URL | | `ret_code` | int32 | 0=成功,非 0=失败 | | `media_id` | string | 导入成功后返回的媒体 ID |
FileInfo(文件信息)
`add_knowledge` 文件上传时使用:
| 字段 | 类型 | 说明 | | ------------------ | ------ | -------------------------- | | `cos_key` | string | COS 对象 Key | | `file_size` | uint64 | 文件大小(字节) | | `last_modify_time` | int64 | 最后修改时间(秒级时间戳) | | `password` | string | 文件密码(如有) | | `file_name` | string | 文件名称 |
Credential(COS 上传凭证)
`create_media` 返回,用于上传文件到腾讯云 COS:
| 字段 | 类型 | 说明 | | --------------- | ------ | -------------------------- | | `token` | string | 临时 TOKEN | | `secret_id` | string | 临时 Secret ID | | `secret_key` | string | 临时 Secret Key | | `start_time` | int64 | 凭证开始时间(秒级时间戳) | | `expired_time` | int64 | 凭证过期时间(秒级时间戳) | | `appid` | string | COS AppID | | `bucket_name` | string | COS 桶名称 | | `region` | string | COS 桶所在区域 | | `custom_domain` | string | 自定义域名 | | `cos_key` | string | COS 对象 Key |
MediaType(媒体类型枚举)
| 值 | 名称 | content_type / 说明 |
| --- | -------------- | ------------------------------------------------------------------------------------------------------------- |
| 1 | PDF | `application/pdf` |
| 2 | 网页 | N/A(直接 AddKnowledge,`web_info.content_id=
---
接口详情
1. 创建媒体
POST /openapi/wiki/v1/create_media
触发场景:上传文件到知识库的第一步,获取 COS 上传凭证。#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | ------------------- | ------ | ---- | ------------------------------ | | `file_name` | string | 是 | 文件名称(最长 1024 字符) | | `file_size` | uint64 | 是 | 文件大小(字节) | | `content_type` | string | 是 | MIME 类型 | | `knowledge_base_id` | string | 是 | 知识库 ID | | `file_ext` | string | 是 | 文件后缀名(无点号,如 `pdf`) |
#### 返回字段
| 字段 | 类型 | 说明 | | ---------------- | ---------- | ------------ | | `media_id` | string | 媒体 ID | | `cos_credential` | Credential | COS 上传凭证 |
---
2. 添加知识
POST /openapi/wiki/v1/add_knowledge
触发场景:上传文件到知识库的最后一步,或直接添加网页 URL。#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | --------------------- | ----------- | -------- | --------------------------------------- | | `media_type` | int32 | 是 | 媒体类型 | | `media_id` | string | 否 | 文件上传时必填,CreateMedia 返回的 ID | | `title` | string | 是 | 标题 | | `knowledge_base_id` | string | 是 | 知识库 ID | | `folder_id` | string | 否 | 文件夹 ID(省略则添加到根目录) | | `note_info` | ContentInfo | 否 | 笔记内容信息 | | `web_info` | ContentInfo | 否 | 网页内容信息(media_type=2 时必填) | | `web_info.content_id` | string | 条件必填 | 网页 URL(media_type=2 时必填) | | `session_info` | ContentInfo | 否 | 会话内容信息 | | `file_info` | FileInfo | 否 | 文件信息(文件上传时必填,见 FileInfo) |
#### 返回字段
| 字段 | 类型 | 说明 | | ---------- | ------ | ------- | | `media_id` | string | 媒体 ID |
---
3. 获取知识库信息
POST /openapi/wiki/v1/get_knowledge_base
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | ----- | -------- | ---- | --------------------------------- | | `ids` | string[] | 是 | 知识库 ID 列表(1-20 个,不重复) |
#### 返回字段
| 字段 | 类型 | 说明 |
| ------- | -------------------------------- | -------------- |
| `infos` | map\
---
4. 浏览知识库内容
POST /openapi/wiki/v1/get_knowledge_list
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | ------------------- | ------ | ---- | ----------------------------- | | `cursor` | string | 是 | 游标,首次传空字符串 | | `limit` | uint64 | 是 | 数量限制(1-50) | | `knowledge_base_id` | string | 是 | 知识库 ID | | `folder_id` | string | 否 | 文件夹 ID(省略则列出根目录) |
#### 返回字段
| 字段 | 类型 | 说明 | | ---------------- | --------------- | ---------------- | | `knowledge_list` | KnowledgeInfo[] | 知识条目列表 | | `is_end` | bool | 是否到达列表末尾 | | `next_cursor` | string | 下页游标 | | `current_path` | FolderInfo[] | 当前路径 |
---
5. 搜索知识库内容
POST /openapi/wiki/v1/search_knowledge
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | ------------------- | ------ | ---- | -------------------- | | `query` | string | 是 | 搜索关键词 | | `cursor` | string | 是 | 游标,首次传空字符串 | | `knowledge_base_id` | string | 是 | 知识库 ID |
#### 返回字段
| 字段 | 类型 | 说明 | | ------------- | ----------------------- | ------------------------------------------------------------------------ | | `info_list` | SearchedKnowledgeInfo[] | 搜索结果(`media_id`, `title`, `parent_folder_id`, `highlight_content`) | | `is_end` | bool | 是否到达列表末尾 | | `next_cursor` | string | 下页游标 |
---
6. 搜索知识库列表
POST /openapi/wiki/v1/search_knowledge_base
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | -------- | ------ | ---- | -------------------- | | `query` | string | 是 | 搜索关键词 | | `cursor` | string | 是 | 游标,首次传空字符串 | | `limit` | uint64 | 是 | 数量限制(1-50) |
#### 返回字段
| 字段 | 类型 | 说明 | | ------------- | --------------------------- | ------------------------------------- | | `info_list` | SearchedKnowledgeBaseInfo[] | 搜索结果(`id`, `name`, `cover_url`) | | `is_end` | bool | 是否到达列表末尾 | | `next_cursor` | string | 下页游标 |
---
7. 获取可添加的知识库列表
POST /openapi/wiki/v1/get_addable_knowledge_base_list
触发场景:用户想上传文件或添加内容到知识库,但不确定可以添加到哪些知识库时,列出当前用户有权限添加内容的知识库。#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | -------- | ------ | ---- | -------------------- | | `cursor` | string | 是 | 游标,首次传空字符串 | | `limit` | uint64 | 是 | 数量限制(1-50) |
#### 返回字段
| 字段 | 类型 | 说明 | | ----------------------------- | -------------------------- | ---------------------- | | `addable_knowledge_base_list` | AddableKnowledgeBaseInfo[] | 可添加内容的知识库列表 | | `next_cursor` | string | 下页游标 | | `is_end` | bool | 是否到达列表末尾 |
---
8. 检查文件名重复
POST /openapi/wiki/v1/check_repeated_names
触发场景:上传文件到知识库前,检查目标知识库(及文件夹)中是否已存在同名文件。仅用于文件类型(media_type 1/3/4/5/7/9/13/14),不用于网页(2/6)、笔记(11)等。#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | ------------------- | ------------------------- | ---- | ----------------------------- | | `params` | CheckRepeatedNamesParam[] | 是 | 待检查的文件列表(1-2000 个) | | `knowledge_base_id` | string | 是 | 知识库 ID | | `folder_id` | string | 否 | 文件夹 ID(省略则检查根目录) |
CheckRepeatedNamesParam:| 字段 | 类型 | 说明 | | ------------ | ------ | ----------------------------- | | `name` | string | 文件名称 | | `media_type` | int32 | 媒体类型(见 MediaType 枚举) |
#### 返回字段
| 字段 | 类型 | 说明 | | --------- | -------------------------- | -------- | | `results` | CheckRepeatedNamesResult[] | 检查结果 |
CheckRepeatedNamesResult:| 字段 | 类型 | 说明 | | ------------- | ------ | ------------------------- | | `name` | string | 文件名称 | | `is_repeated` | bool | `true` 表示同名文件已存在 |
---
9. 导入 URL
POST /openapi/wiki/v1/import_urls
触发场景:添加网页或微信公众号文章到知识库。替代 `add_knowledge` 的 `media_type=2/6` 用法,支持批量导入,服务端自动识别 URL 类型。#### 请求参数
| 字段 | 类型 | 必填 | 说明 | | ------------------- | -------- | ---- | ----------------------------------- | | `knowledge_base_id` | string | 是 | 知识库 ID | | `folder_id` | string | 是 | 文件夹 ID | | `urls` | string[] | 是 | URL 列表(1-10 个,每个非空字符串) |
#### 返回字段
| 字段 | 类型 | 说明 |
| --------- | ---------------------------- | ----------------------------------------- |
| `results` | map\
---
文件夹说明
知识库内容以文件夹层级结构组织。文件夹是一种特殊的知识条目:
---
文件大小限制
上传前必须校验文件大小,超限文件应在上传前拦截:
| 文件类型 | media_type | 最大大小 | | --------------------------- | ----------- | -------- | | Excel、TXT、Xmind、Markdown | 5/13/14/7 | 10 MB | | 图片 | 9 | 30 MB | | PDF、Word、PPT、音频及其他 | 1/3/4/15 等 | 200 MB |
网页(2/6)、笔记(11)等非文件类型无大小限制。音频文件额外限制:最长 2 小时。
---
响应格式
所有 API 返回统一结构:
```json { "retcode": 0, "errmsg": "成功", "data": { ... } } ```
---
游标翻页使用规范
1. 首次请求:`cursor` 传空字符串 `""` 2. 检查返回的 `is_end`:`false` 表示还有更多数据 3. 将返回的 `next_cursor` 作为下次请求的 `cursor` 4. `is_end = true` 时停止翻页
---
错误码
| 错误码 | 说明 | 建议处理 | | ------ | ------------ | --------------------------- | | 0 | 成功 | — | | 110001 | 参数非法 | 检查请求参数(详见 errmsg) | | 110002 | 配置非法 | 检查服务配置 | | 110010 | 下游网络错误 | 可重试 | | 110011 | 下游逻辑错误 | 不可重试,详见 errmsg | | 110012 | 接口无效 | 检查接口路径 | | 110013 | 客户端取消 | 检查请求是否超时 | | 110020 | 安全打击 | 检查内容是否违规 | | 110021 | 请求频控 | 降低请求频率后重试 | | 110030 | 无权限 | 确认操作权限 |