一个有点意思的kimi2项目

758 阅读3分钟

前言

上篇文章搜 kimi2 资料的时候,发现 github 上有个有点意思的项目叫 kimi2api。

其作用是将 Kimi Chat 的非官方 API 转换为标准的 OpenAI 接口,本质上是对 Kimi Web 端 SSE (Server-Sent Events) 流的精确解析和转发。

简单来说,就是在不打开浏览器的情况下,通过模拟 API 白嫖官网的免费对话服务。

首先声明,这样做是违反《Kimi用户服务协议》的,在其协议条款 6.5 中,明确指出:

不得通过编写或使用任何自动化脚本、程序、工具(包括但不限于机器人、爬虫、定时任务等)来模拟人工操作,以实现自动、批量使用我们的产品或服务;

《Kimi用户服务协议》:https://kimi.moonshot.cn/user/agreement/modelUse?version=v2

《Kimi用户服务协议》:kimi.moonshot.cn/user/agreem…

本文仅从学习和技术研究的角度,学习一下 SSE 流处理的解析和分发,不包括完整可复现的教程。

技术原理分析

这个功能实际包含两部分,信息的获取与转发。

1. 信息的获取

最核心的问题,是如何获取信息。通过对问答过程的网络流的分析,可知完成一个对话主要有两次请求交互:

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 中,存在不稳定的情况,要稳定使用,不如用真金白银支持一下国产模型的发展。

图片