MoonshotAI / MoonshotAI/kimi-cli
开发 Kimi API 都是吃 **** 的吗? || Does everyone who develops Kimi API have to pay for ****?
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 11.4k
- Forks
- 1.3k
- Avg merge
- 9h 47m
- Merged PRs (30d)
- 2
Description
开发 Kimi API 都是吃 **** 的吗???
模型调用工具的时候,content 是空的,这消息是你们自己返回的。
结果我把你们自己返回的消息原样传回去,你们啪一下给我一个 400:
text content is empty
不是,这他妈不是你们自己拉出来的吗?
出来的时候合法,传回去就非法,你们这个消息是他妈一次性筷子吗?
最后还得我专门给 Kimi 写个判断,有 tool_calls 而且 content 为空,就把 content 整个删掉。
你们自己的 kimi-cli 也是这么修的。
合着你们 API 拉裤子里了,不洗裤子,给全世界开发者每人发一把刷子是吧?
然后这个逼 Schema 更是给我看笑了。
别的模型都能传,就你 Kimi 不行:
tools.function.parameters is not a valid moonshot flavored json schema
moonshot flavored json schema
什么鸡巴 Moonshot 风味?
JSON Schema 是他妈奶茶吗?到你这里还得选一个月之暗面限定口味?
标准 JSON Schema 允许不写 type,别的模型吃得好好的,到你这里直接 400。
你们官方怎么解决的呢?
不是修服务端。
是在客户端里递归遍历 Schema,哪里没有 type 就往哪里硬塞。
能猜就猜,猜不出来默认补个 "type": "string"。
我操,真他妈天才。
Schema 是工具合同,你们跟改厕所墙上的小广告一样说改就改?
原本允许任意类型,你们一拍脑袋改成字符串,以后工具参数错了算谁的?算 MCP 的?算开发者的?还是算你们这个逼客户端偷偷篡改 Schema 的?
别人支持标准,你们发明方言。
别人修服务端,你们修改用户数据。
别人提供 SDK,你们提供一套给自己擦屁股的补丁合集。
就这还好意思叫 OpenAI compatible?
兼容在哪?URL 长得像就叫兼容?字段名抄过来就叫兼容?
真正一调用工具,满地都是 Kimi 特供狗屎。
还有你们这个思考内容。
外面都已经是 JSON 了,你们还能把思考过程直接塞进 content,然后套个:
<think>
</think>
来区分。
你们是不会加字段吗?
还是觉得 2026 年的开发者特别喜欢从字符串里解析 XML?
流式输出再把一个标签拆成几个 chunk,让每个客户端自己维护状态机,猜你现在到底是在思考还是在放屁。
reasoning_content 放着不用,非得把思考和正文搅在同一个字符串里。
不知道的还以为你们这个 API 是从哪个上古论坛富文本编辑器里抠出来的。
接你们一个 Kimi,开发者得替你们删空 content,替你们修 JSON Schema,替你们猜字段类型,替你们解析 <think>,最后还得替你们查为什么同一套代码别的模型都能跑,只有你们这个逼玩意满屏 400。
你们卖的是 API,还是开发者改造训练营?
我花钱调用你们模型,还得顺手帮你们修协议、修 SDK、擦屁股?
模型能力做得不错,API 写成这坨逼样。
别再往客户端里塞特判假装问题解决了。
把你们自己的服务端修明白。
开发者不是来替你们吃屎的。
Is it necessary to develop Kimi API for ****? ? ?
When the model calls the tool, content is empty, and this message is returned by you yourself.
As a result, I sent back the message you returned as it is, and you slapped me with a 400:
text content is empty
No, didn’t you fucking pull this out yourself?
It was legal when it came out, but it was illegal when it was passed back. Is your news about disposable chopsticks?
In the end, I had to write a judgment specifically for Kimi. If there were tool_calls and content was empty, I would delete the entire content.
Your own kimi-cli is also cultivated in this way.
I shit my pants with your API, don’t wash my pants, and give every developer in the world a brush, right?
Then this schema made me laugh even more.
Other models can be uploaded, but not your Kimi:
tools.function.parameters is not a valid moonshot flavored json schema
moonshot flavored json schema
What Dick Moonshot flavor?
Is JSON Schema fucking milk tea? When you come here, you still have to choose the dark side limited flavor for a month?
Standard JSON Schema allows you not to write type. Other models are fine, and you will get a 400 directly.
How did your officials solve it?
It's not about repairing the server.
The Schema is recursively traversed in the client, and where there is no type, it is forced into it.
If you can guess, just guess. If you can't guess, the default is "type": "string".
Holy shit, that’s fucking genius.
Schema is a tool contract. Are you going to change it just like the small advertisement on the bathroom wall?
Originally, any type was allowed, but you suddenly changed it to string. Who will be responsible if the tool parameters are wrong in the future? Is it considered an MCP? Considered a developer? Or are you the ones who force the client to secretly tamper with the Schema?
Others support standards, you invent dialects.
While others repair the server, you modify user data.
Others provide the SDK, and you provide a set of patches to wipe your own ass.
Is this why you have the nerve to call it OpenAI compatible?
Where is the compatibility? Just because the URLs look similar is compatible? Copying the field name is called compatible?
Really call the tool and there's Kimi special shit all over the place.
And the content of your thoughts.
The outside is already in JSON, you can also insert the thinking process directly into content, and then use it like this:
<think>
</think>
to distinguish.
Don't you know how to add fields?
Or do you think developers in 2026 will particularly enjoy parsing XML from strings?
Streaming output then splits a tag into several chunks, allowing each client to maintain its own state machine. Guess whether you are thinking or farting now.
If reasoning_content is left alone, the thinking and text must be mixed in the same string.
For those who don’t know, you might think that you pulled this API from some ancient forum’s rich text editor.
Kimi, the developer will have to delete content for you, fix JSON Schema for you, guess field types for you, parse <think> for you, and finally find out for you why the same set of code can be run by other models, but you are the only one who fills the screen with 400.
Are you selling APIs or developer transformation training camps?
I spend money to call your model, but I also have to help you fix the protocol, fix the SDK, and wipe your butt?
The model capabilities are well done, and the API is written like this.
Stop pretending that the problem is solved on the client side.
Fix your own server.
Developers are not here to take your shit for you.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the reported Kimi API requests through kimi-cli and compare the returned tool-call messages, schema validation errors, and streaming chunks. The report names no files or tests and combines several server/client compatibility concerns; completion would require a scoped fix with regression coverage and confirmation that affected requests no longer return 400.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, backend-api-design, cli
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100