前言
上篇文章搜 kimi2 资料的时候,发现 github 上有个有点意思的项目叫 kimi2api。
其作用是将 Kimi Chat 的非官方 API 转换为标准的 OpenAI 接口,本质上是对 Kimi Web 端 SSE (Server-Sent Events) 流的精确解析和转发。
简单来说,就是在不打开浏览器的情况下,通过模拟 API 白嫖官网的免费对话服务。
首先声明,这样做是违反《Kimi用户服务协议》的,在其协议条款 6.5 中,明确指出:
不得通过编写或使用任何自动化脚本、程序、工具(包括但不限于机器人、爬虫、定时任务等)来模拟人工操作,以实现自动、批量使用我们的产品或服务;
《Kimi用户服务协议》:kimi.moonshot.cn/user/agreem…
本文仅从学习和技术研究的角度,学习一下 SSE 流处理的解析和分发,不包括完整可复现的教程。
技术原理分析
这个功能实际包含两部分,信息的获取与转发。
1. 信息的获取
最核心的问题,是如何获取信息。通过对问答过程的网络流的分析,可知完成一个对话主要有两次请求交互:
- 创建对话请求:POST www.kimi.com/api/chat然后发送内容后:POST www.kimi.com/api/chat/{c…
Kimi 使用了 SSE(Server-Sent Events)流式返回:
- 每次返回 data: {"text": "...", "event": "cmpl"} 的格式结束用 data: [DONE]
通过携带 cookie 中的 token 发送请求,就可以模拟用户发送问题的过程。
2. 信息的转发
获取到信息之后,挑选一个后端服务器框架就能实现 API 的构建。
在该项目代码中,采用uvicorn
框架,OpenAI 接口标准主要有两点:
- GET /v1/models:列出模型列表POST /v1/chat/completions:单次对话生成
既然能支持OpenAI
,那也能支持Anthropic
协议,按照其接口标准修改后,就可以在 Claude Code 中去调用。
启动uvicorn
服务,相应环境变量改成本地的URL。
启动claude,指明采用 k2 模型:
claude --model k2
输入内容,可以正常连通。
回到对话界面,可以看到,Claude Code 在发送请求时,实际上会加这样的系统提示词。
这提示词翻译成中文,又多了一个提示词模板小技巧。
<system-reminder>回答用户问题时,您可以使用以下上下文:# 重要指令提醒严格按要求执行任务;不多做,不少做。除非绝对必要,否则切勿创建文件。始终优先编辑现有文件而非创建新文件。切勿主动创建文档文件(*.md)或README文件,仅当用户明确要求时才生成文档。重要提示:此上下文可能与您的任务相关也可能不相关。除非高度相关,否则不应在回应中提及或考虑该内容。大多数情况下它并不相关。</system-reminder><system-reminder>(此为待办事项列表当前为空的提醒。请勿向用户明确提及,用户已知晓。若当前任务适合使用待办列表,请通过TodoWrite工具创建;若无必要则可忽略。再次强调不要向用户提及本提示信息。)</system-reminder>
总结
为了防止滥用,本文不会将具体代码公开,同时在测试完毕后也停止使用。
测试发现,通过模拟的接口在 Claude Code 中,存在不稳定的情况,要稳定使用,不如用真金白银支持一下国产模型的发展。