From afced72c3c1d890d2213aeac9346c80b8388f8fb Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 17 Jul 2026 17:42:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20kimi=20uapi=20=E8=A1=A5=E5=85=A8=20uapii?= =?UTF-8?q?o=20=E5=AE=9A=E4=B9=89=EF=BC=8C=E7=A7=BB=E9=99=A4=E6=89=80?= =?UTF-8?q?=E6=9C=89=E5=8D=A0=E4=BD=8D=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/kimi_k3_uapi.sql | 215 +++++++++++---------------------------- 1 file changed, 62 insertions(+), 153 deletions(-) diff --git a/scripts/kimi_k3_uapi.sql b/scripts/kimi_k3_uapi.sql index 79555a3..0dac6a7 100644 --- a/scripts/kimi_k3_uapi.sql +++ b/scripts/kimi_k3_uapi.sql @@ -1,39 +1,40 @@ -- ============================================================ -- Kimi K3 API 接入 (月之暗面 / Moonshot) -- Base URL: https://api.moonshot.cn/v1 --- 兼容 OpenAI 格式 --- 文档: https://platform.kimi.com/docs/api/chat +-- 兼容 OpenAI 格式, 文档: https://platform.kimi.com/docs/api/chat -- ============================================================ -- ============================================================ --- 1. 确认 modelprovider 和 upapp 存在 +-- 0. 前置: modelprovider / upapp (如不存在先创建) -- ============================================================ --- INSERT IGNORE INTO modelprovider (id, name) VALUES ('', '月之暗面'); --- INSERT IGNORE INTO upapp (id, name, key, baseurl, enabled_date) VALUES ('', '月之暗面', 'MOONSHOT_API_KEY', 'https://api.moonshot.cn', '2026-07-17'); +-- INSERT IGNORE INTO modelprovider (id, name) VALUES ('moonshot', '月之暗面'); +-- INSERT IGNORE INTO upapp (id, name, `key`, baseurl, enabled_date) +-- VALUES ('upapp_moonshot', '月之暗面', 'MOONSHOT_API_KEY', 'https://api.moonshot.cn', '2026-07-17'); +SET @upapp_id = 'upapp_moonshot'; -- 替换为实际的月之暗面 upapp.id -- ============================================================ --- 2. Chat Completions (对话补全) — OpenAI 兼容,支持流式 --- POST /v1/chat/completions +-- 1. uapiio — 文件管理输入输出定义 +-- ============================================================ +REPLACE INTO `uapiio` (`id`, `name`, `description`, `input_fields`) VALUES +('kimi_file_upload_io', 'kimi文件上传', 'Kimi文件上传 multipart/form-data', '[]'), +('kimi_file_list_io', 'kimi文件列表', 'Kimi文件列表查询', '[]'), +('kimi_file_retrieve_io', 'kimi文件详情', 'Kimi文件元数据查询', '[]'), +('kimi_file_delete_io', 'kimi文件删除', 'Kimi文件删除', '[]'), +('kimi_file_content_io', 'kimi文件内容', 'Kimi文件内容提取', '[]'); + +-- ============================================================ +-- 2. Chat Completions — POST /v1/chat/completions +-- t2t 复用已有 ioid Is8l4TGkcZcqFSjbbeIK2 (文本会话) -- ============================================================ REPLACE INTO `uapi` (`id`, `name`, `need_auth`, `stream`, `path`, `httpmethod`, `chunk_match`, `headers`, `params`, `data`, `response`, `ioid`, `callbackurl`, `upappid`) VALUES ( - 'kimi_t2t', - 't2t', - '0', - 'stream', - '/chat/completions', - 'POST', - 'data: ', - '{ - "Authorization": "Bearer {{apikey}}", - "Content-Type": "application/json" -}', + 'kimi_t2t', 't2t', '0', 'stream', + '/chat/completions', 'POST', 'data: ', + '{"Authorization": "Bearer {{apikey}}", "Content-Type": "application/json"}', NULL, '{ {% if stream %} - "stream_options":{ - "include_usage": true - }, + "stream_options":{"include_usage": true}, {% endif %} {% if tools %} "tools": {{json.dumps(tools, ensure_ascii=False)}}, @@ -46,15 +47,9 @@ VALUES ( {% else %} "messages": [ {% if sys_prompt %} - { - "role": "system", - "content": {{json.dumps(sys_prompt, ensure_ascii=False)}} - }, + {"role": "system", "content": {{json.dumps(sys_prompt, ensure_ascii=False)}}}, {% endif %} - { - "role": "user", - "content": {{json.dumps(prompt, ensure_ascii=False)}} - } + {"role": "user", "content": {{json.dumps(prompt, ensure_ascii=False)}}} ], {% endif %} {% if stream %} @@ -62,14 +57,10 @@ VALUES ( {% endif %} "model": "{{model}}", "reasoning_effort": "max" -} -', +}', '{ - "id": "{{id}}", - "object": "{{object}}", - "created": {{created}}, - "choices": {{json.dumps(choices, ensure_ascii=False)}}, - "model": "{{model}}", + "id": "{{id}}", "object": "{{object}}", "created": {{created}}, + "choices": {{json.dumps(choices, ensure_ascii=False)}}, "model": "{{model}}", {% if object == "chat.completion" %} "reasoning_content": {{json.dumps(choices[0].message.reasoning_content, ensure_ascii=False)}}, "content":{{json.dumps(choices[0].message.content, ensure_ascii=False)}}, @@ -77,49 +68,25 @@ VALUES ( "reasoning_content": {{json.dumps(choices[0].delta.reasoning_content, ensure_ascii=False)}}, "content":{{json.dumps(choices[0].delta.content, ensure_ascii=False)}}, {% endif %} -{% if usage %} -{% set usage1 = usage.update({"model": model}) %} - "finish": "1", - "usage":{{json.dumps(usage)}} +{% if usage %}{% set usage1 = usage.update({"model": model}) %} + "finish": "1", "usage":{{json.dumps(usage)}} {% else %} "finish":"0" -{% endif %} -} -', - 'Is8l4TGkcZcqFSjbbeIK2', -- 复用文本会话 ioid - NULL, - '' -- 替换为月之暗面的 upapp.id +{% endif %}}', + 'Is8l4TGkcZcqFSjbbeIK2', NULL, @upapp_id ); -- ============================================================ --- 3. 上传文件 POST /v1/files (multipart/form-data) +-- 3. 上传文件 POST /v1/files -- ============================================================ REPLACE INTO `uapi` (`id`, `name`, `need_auth`, `stream`, `path`, `httpmethod`, `chunk_match`, `headers`, `params`, `data`, `response`, `ioid`, `callbackurl`, `upappid`) VALUES ( - 'kimi_file_upload', - 'file_upload', - '0', - 'none', - '/files', - 'POST', - NULL, - '{ - "Authorization": "Bearer {{apikey}}" -}', - NULL, - NULL, -- multipart 由 Sage 框架自动处理 - '{ - "id": "{{id}}", - "object": "{{object}}", - "filename": "{{filename}}", - "purpose": "{{purpose}}", - "bytes": {{bytes}}, - "created_at": {{created_at}}, - "status": "{{status}}" -}', - '', -- 需新建 file_upload ioid - NULL, - '' + 'kimi_file_upload', 'file_upload', '0', 'none', + '/files', 'POST', NULL, + '{"Authorization": "Bearer {{apikey}}"}', + NULL, NULL, + '{"id": "{{id}}", "object": "{{object}}", "filename": "{{filename}}", "purpose": "{{purpose}}", "bytes": {{bytes}}, "created_at": {{created_at}}, "status": "{{status}}"}', + 'kimi_file_upload_io', NULL, @upapp_id ); -- ============================================================ @@ -127,25 +94,12 @@ VALUES ( -- ============================================================ REPLACE INTO `uapi` (`id`, `name`, `need_auth`, `stream`, `path`, `httpmethod`, `chunk_match`, `headers`, `params`, `data`, `response`, `ioid`, `callbackurl`, `upappid`) VALUES ( - 'kimi_file_list', - 'file_list', - '0', - 'none', - '/files', - 'GET', - NULL, - '{ - "Authorization": "Bearer {{apikey}}" -}', - NULL, - NULL, - '{ - "object": "{{object}}", - "data": {{json.dumps(data)}} -}', - '', -- 需新建 ioid - NULL, - '' + 'kimi_file_list', 'file_list', '0', 'none', + '/files', 'GET', NULL, + '{"Authorization": "Bearer {{apikey}}"}', + NULL, NULL, + '{"object": "{{object}}", "data": {{json.dumps(data)}}}', + 'kimi_file_list_io', NULL, @upapp_id ); -- ============================================================ @@ -153,31 +107,12 @@ VALUES ( -- ============================================================ REPLACE INTO `uapi` (`id`, `name`, `need_auth`, `stream`, `path`, `httpmethod`, `chunk_match`, `headers`, `params`, `data`, `response`, `ioid`, `callbackurl`, `upappid`) VALUES ( - 'kimi_file_retrieve', - 'file_retrieve', - '0', - 'none', - '/files/{{file_id}}', - 'GET', - NULL, - '{ - "Authorization": "Bearer {{apikey}}" -}', - NULL, - NULL, - '{ - "id": "{{id}}", - "object": "{{object}}", - "filename": "{{filename}}", - "purpose": "{{purpose}}", - "bytes": {{bytes}}, - "created_at": {{created_at}}, - "status": "{{status}}", - "status_details": "{{status_details}}" -}', - '', -- 需新建 ioid - NULL, - '' + 'kimi_file_retrieve', 'file_retrieve', '0', 'none', + '/files/{{file_id}}', 'GET', NULL, + '{"Authorization": "Bearer {{apikey}}"}', + NULL, NULL, + '{"id": "{{id}}", "object": "{{object}}", "filename": "{{filename}}", "purpose": "{{purpose}}", "bytes": {{bytes}}, "created_at": {{created_at}}, "status": "{{status}}", "status_details": "{{status_details}}"}', + 'kimi_file_retrieve_io', NULL, @upapp_id ); -- ============================================================ @@ -185,26 +120,12 @@ VALUES ( -- ============================================================ REPLACE INTO `uapi` (`id`, `name`, `need_auth`, `stream`, `path`, `httpmethod`, `chunk_match`, `headers`, `params`, `data`, `response`, `ioid`, `callbackurl`, `upappid`) VALUES ( - 'kimi_file_delete', - 'file_delete', - '0', - 'none', - '/files/{{file_id}}', - 'DELETE', - NULL, - '{ - "Authorization": "Bearer {{apikey}}" -}', - NULL, - NULL, - '{ - "id": "{{id}}", - "object": "{{object}}", - "deleted": {{deleted}} -}', - '', -- 需新建 ioid - NULL, - '' + 'kimi_file_delete', 'file_delete', '0', 'none', + '/files/{{file_id}}', 'DELETE', NULL, + '{"Authorization": "Bearer {{apikey}}"}', + NULL, NULL, + '{"id": "{{id}}", "object": "{{object}}", "deleted": {{deleted}}}', + 'kimi_file_delete_io', NULL, @upapp_id ); -- ============================================================ @@ -212,22 +133,10 @@ VALUES ( -- ============================================================ REPLACE INTO `uapi` (`id`, `name`, `need_auth`, `stream`, `path`, `httpmethod`, `chunk_match`, `headers`, `params`, `data`, `response`, `ioid`, `callbackurl`, `upappid`) VALUES ( - 'kimi_file_content', - 'file_content', - '0', - 'none', - '/files/{{file_id}}/content', - 'GET', - NULL, - '{ - "Authorization": "Bearer {{apikey}}" -}', - NULL, - NULL, - '{ - "content": "{{content}}" -}', - '', -- 需新建 ioid - NULL, - '' + 'kimi_file_content', 'file_content', '0', 'none', + '/files/{{file_id}}/content', 'GET', NULL, + '{"Authorization": "Bearer {{apikey}}"}', + NULL, NULL, + '{"content": "{{content}}"}', + 'kimi_file_content_io', NULL, @upapp_id );