对 Kimi 客户端 API 的全面逆向工程研究。覆盖 59 个 proto 服务、212 个 RPC 方法、609 个 message(含字段类型)。 详细阐述双协议架构、静态研究方法论、业务地图、服务详解及字段级调用说明。
Kimi 客户端的 API 是 双协议 架构,研究前必须先分清:
| 协议 | 路径 | 用途 | 特征 |
|---|---|---|---|
| REST | /api/* | 账户、设备、文件等外围能力 | Ktor Client + OkHttp, application/json |
| Connect-RPC | /apiv2/* | 所有核心业务(聊天、社区、IM、会员) | application/connect+json,纯 JSON 无二进制 protobuf |
核心结论:Chat(对话)、Moment(社区)、Feed(信息流)、IM(群聊)等全部走 Connect-RPC。研究核心业务 = 研究 Connect-RPC。
| 工具 | 产出 | 用途 |
|---|---|---|
| APKTool M | smali 代码 + 资源 | 拿到全部混淆后的类与方法 |
| jadx(可选) | 近似 Java 源码 | 比 smali 可读性高,但混淆类仍需还原 |
| R8 mapping.txt(关键) | 混淆映射 | 还原混淆类名/方法名的唯一钥匙 |
本研究中 APKTool M 产出 smali,无 mapping.txt,因此类型还原采用启发式(见 2.3)。
proto 的 RPC 服务信息没有目录结构(类被 R8 混淆成 or/*、nr/* 等短包名),但关键字符串全部保留在 smali 常量池里:
无 mapping.txt 时,混淆类 → 原始类型的还原依赖三条线索:
精确还原仍依赖 mapping.txt。本研究已导出《混淆类清单》(620 个混淆类 + 推测映射),拿到 mapping 后可一键对照。
流式方法(如 Chat、SubscribeMessageStream)响应为按行/帧分隔的 JSON 事件流:
断点续传靠递增 eventOffset;若误用 unary 方式调用流式方法,服务端返回 "event stream, 请使用 stream 方法请求"。
59 个服务按业务域归类,帮助快速定位"某个功能走哪个 API":
| 业务域 | 服务 | 定位 |
|---|---|---|
| 账号 | account.gateway.v1.AccountService | 登录/注册/扫码/设备绑定 |
| 核心对话 | kimi.gateway.chat.v1.ChatService kimi.gateway.chat.v1.ChatShareService kimi.gateway.chat.v1.PromptService kimi.chatty.v1.ChattyService | 与 Kimi 对话的主入口 聊天分享导出(PDF/Docx) 提示词增强/推荐 轻量工具调用/打断 |
| 群聊 IM | kimi.gateway.im.v1.IMService | 多人房间即时通讯 |
| 社区 | moment.v1.*(15 个服务) | 动态/评论/信息流/关注/话题/搜索/通知 |
| 智能体 | kimi.gateway.mcp.v1.OKCService kimi.gateway.mcp.v1.MCPOAuthService kimi.gateway.swarm.v1.SwarmService | OKC 智能体部署/引用解析 MCP 服务器授权 多智能体编排 |
| 记忆 | kimi.gateway.memory.v1.* | 长期记忆读写/记忆库/梦境 |
| 任务 | kimi.gateway.trigger.v1.TriggerService | 定时/条件触发 |
| 推荐 | kimi.gateway.suggest.v1.*(3 服务) | 首页展示/弹窗/引导 |
| 内容生产 | kimi.gateway.slides.v1.SlidesService kimi.gateway.tts.v1.TTSService kimi.gateway.converter.v1.ConverterService kimi.gateway.artifact.v1.ArtifactService kimi.gateway.file.v1.FileService | PPT 生成 文字转语音 文件/格式转换 可运行产物(代码/HTML) 文件解析进度 |
| 商业化 | kimi.gateway.membership.v2.MembershipService kimi.gateway.order.v1.SubscriptionService kimi.gateway.order.v1.GoodsService kimi.gateway.promotionalasset.v1.PromotionalAssetService kimi.gateway.issuance.v1.IssuanceService | 会员等级/权益 订阅/续费 商品列表 促销资产 凭证发放 |
| 系统 | kimi.gateway.config.v1.ConfigService kimi.gateway.experiment.v1.ExperimentService kimi.gateway.riskcontrol.v1.RiskControlService kimi.gateway.misc.v1.MiscService kimi.usersetting.v1.UserSettingService | 客户端配置 AB 实验 风控 杂项 用户偏好设置 |
| Claw | kimi.gateway.claw.v1.ClawService kimi.gateway.claw.v1.ClawSkillService kimi.gateway.claw.v1.ClawFileService | 爪机 Bot 管理 远程技能 爪机文件 |
| 技能 | kimi.gateway.skill.v1.SkillService kimi.gateway.skill.v1.SkillJobService | 技能市场 技能执行任务 |
| 其他 | kimi.gateway.pin.v1.PinService kimi.gateway.context.v1.ContextService kimi.gateway.project.v1.ProjectService kimi.gateway.websites.v1.WebsiteSlugService kimi.gateway.feed.v1.FeedService kimi.gateway.notification.v1.NotificationService kimi.gateway.app.v1.AppService | 置顶 会话上下文 项目 网站别名 信息流 站内通知 应用市场 |
| 离线任务 | kimi.outbox.v1.OutboxService | 离线任务队列(发件箱) |
每个服务按业务定位、典型场景、方法列表详细说明。
业务定位:账号与登录
典型场景:短信/微信/Google 登录、扫码登录、设备注册、Token 刷新
业务定位:轻量聊天/工具
典型场景:通用工具调用、打断生成
业务定位:应用市场
典型场景:应用发布/版本管理
业务定位:可运行产物
典型场景:分享代码/HTML 产物
业务定位:核心对话(Kimi 主聊天)
典型场景:发起对话、继续、恢复、订阅消息流、管理会话、消息赞踩、分享聊天
业务定位:聊天分享导出
典型场景:导出聊天为 Docx
业务定位:提示词增强
典型场景:获取增强提示词
业务定位:Claw 爪机 Bot 管理
典型场景:创建/删除 Bot、管理模型 API Key
业务定位:社区内聊天
典型场景:从动态发起聊天、获取最近聊天、重新聊天
业务定位:社区评论系统
典型场景:发评论、删评论、看评论列表与楼中楼、评论点赞
业务定位:社区动态发布与管理(核心写入)
典型场景:发动态、删动态、点赞、看相似动态、动态里的聊天分享卡片
其他社区服务:FavoriteService, FeedService, FollowService, HashtagService, InterestService, MuteService, NotificationService, SearchService, UploadService, UserService, ComplaintService, ConfigService 等。
每个方法列出请求体字段与响应体字段(名称/类型/含义)。类型基于 JVM 签名 + 启发式映射。
请求 CreateChatV2Request
| 字段 | 类型 | 含义 |
|---|---|---|
| momentId | string | 动态ID |
| chatType | message(ChatType?) | chatType |
| chatTypeSubKey | string | chatTypeSubKey |
| askKimiQuestion | string | askKimiQuestion |
响应 CreateChatV2Response
| 字段 | 类型 | 含义 |
|---|---|---|
| chatId | int32 | 会话ID |
| _chat | Chat | chat |
| chatType | message(ChatType?) | chatType |
| chatTypeSubKey | message(ChatTypeSubKey?) | chatTypeSubKey |
请求 GetLastChatV2Request
| 字段 | 类型 | 含义 |
|---|---|---|
| momentId | string | 动态ID |
| chatType | message(ChatType?) | chatType |
| chatTypeSubKey | int32 | chatTypeSubKey |
响应 GetLastChatV2Response
| 字段 | 类型 | 含义 |
|---|---|---|
| chatId | int32 | 会话ID |
| chatType | string | chatType |
| chatTypeSubKey | message(ChatTypeSubKey?) | chatTypeSubKey |
流式方法:响应为按行分隔的 JSON 事件流(含 heartbeat/done/chunk 等事件,用 eventOffset 续传),不能按普通 unary 调用。
请求 ReChatRequest momentId int32
响应 ReChatResponse chatId int32, _chat Chat, chatType, chatTypeSubKey
请求 momentId int32, mentions string, links string
响应 _comment Comment
请求 commentId string 响应无字段
请求 momentId int32, _rootCommentId string, _pinnedCommentId string
响应 nextPageToken string, _pageStat PageStat, isLastPage bool, _pinnedCommentId string, comments repeated
请求 text string, visibility string, _artifactShareId string, images repeated, mentions repeated, links repeated, hashtagIds int32
响应 _moment Moment
请求 momentId string 响应无字段
请求 chatShareId string 响应 _chatShareCard ChatShareCard
请求 chatIds repeated 响应 chatIds int32
流式方法:响应为按行分隔的 JSON 事件流(含 heartbeat/done/chunk 等事件,用 eventOffset 续传)
请求 ChatRequest chatId int32, _message ChatMessage, _options string, _projectId string, tools string
响应 ChatResponse op, _mask, eventOffset int32, _chat Chat, _message ChatMessage, _block Block, _ref ChatFileRef, _usage Usage, _notification Notification, _done Done, _heartbeat Heartbeat, _tts, _interaction, _interactionAck
请求 _projectId int32, _withMessageContent string, _includePinned string, pageSize string, pageToken bool
响应 nextPageToken string, chats repeated, pinnedChats repeated
请求 chatId int32, _direction string, _startMessageId int32, _includeStartMessage string, _endMessageId message(EndMessageId?), _includeEndMessage string, _noMarkAsRead bool
响应 nextPageToken string
请求 chatId int32, _message Message, _scenario string, _options string, tools string