cssmagic / blog

CSS魔法 - 博客
http://blog.cssmagic.net/
2.81k stars 274 forks source link

魔法哥解答 Kimi API 常见问题,顺便探讨 AI 应用开发的那些事儿 #120

Open cssmagic opened 5 months ago

cssmagic commented 5 months ago

有不少群友已经在尝试 Kimi API 了,大家反馈的问题大多是共通的,因此魔法哥通过这篇文章统一解答一下。这些问题在调用其他大模型 API 时也有参考意义,建议收藏备用哦。

文章末尾还会跟大家分享一些 “内部消息”,让我们一起期待 Kimi API 的后续进展。

大模型的 API 有什么用?

可能有小伙伴会问:“已经有网页版的 Kimi 智能助手了,我用得也挺好,为什么还需要 API?”

网页版的智能助手确实方便,但每次使用都需要登录网页进行对话,这对于程序化和自动化的场景就无能为力了。这里简单举两个例子:

此外,现在已经有大量基于大模型 API 开发的工具,比如智能体搭建平台、浏览器插件等等。我们不需要自己从零开发,只需要在这些工具中配置好大模型 API 的访问途径,就可以享受这些工具的带来便利了。

Kimi 提供了哪些 API?

Kimi 目前提供的 API 可以分为以下几类:

相信你已经看出来了,第二项 “模型推理” 就是最核心的能力。目前大型语言模型最典型的推理能力,就是 “对话式文本补全”,这也是行业标杆 ChatGPT 所引领的大模型工作模式。

Kimi API 前两项的接口设计是完全兼容 OpenAI 的,第三项接口也尽可能与 OpenAI 的设计保持一致。因此这三项都可以直接用通过 OpenAI 官方的 SDK 来调用,Kimi 官网的示例代码就是采用 OpenAI 的 Python 客户端库来写的。

这带来一个巨大的好处,理论上基于 OpenAI “Chat Completion” 接口的项目都可以用 Kimi API 跑起来。LangChain 等框架也可以把 Kimi API 当作 OpenAI 来调用。小伙伴们看到这里,是不是跃跃欲试了?

Kimi 有哪些模型可以调用?模型之间有什么区别?

Kimi API 目前提供了三个规格的模型:moonshot-v1-8k / moonshot-v1-32k / moonshot-v1-128k

这三个模型在推理能力上没有区别,主要区别在于上下文窗口的大小。模型名称里的 8k、32k 和 128k 就是指模型的上下文窗口的 token 数量。而所谓 “上下文窗口”,是指模型一次能处理的输入和输出内容的总长度上限。

由于各个模型的计费标准随上下文规格递增,因此在选择模型时需要根据实际需求来判断。也就是说,我们在调用 API 之前,可以先评估一下输入长度和期望得到的输出的长度,然后选择一个合适的模型规格。

这里也简单科普一下 “token” 这个概念:大模型在处理自然语言的过程中,需要对原始文本进行分词操作,而 token 就是分词之后得到的字符片断。比如 “我知道了” 这句话,分词之后就是 “我”、“知道”、“了” 三个 token。

因此,token 数并不直接等同与单词数或汉字数。关于 token 与字数的对应关系以及不同模型的 “token 利用率”,魔法哥在 上期文章 有详细介绍,这里就不赘述了。

API 如何计费?Kimi 定价贵不贵?

Kimi 目前只对 “Chat Completion” API 收费,按照 token 的实际用量来计费。即每次调用 API 时,根据输入和输出的 token 总量来计算费用。计费标准如下:

pricing

顺便一提,在 OpenAI 的 Chat Completion 接口中,输入和输出 token 的计费标准是不同的,输入比输出要便宜。而 Kimi 和其他国内大模型的 API 通常采用 “输入输出统一定价” 的计费模式。

讲到这里,大家肯定会关心:Kimi 的 API 定价到底贵不贵?

与国内其他大模型 API 的价格对比,Kimi 的定价属于中游水平。考虑到 Kimi 性能出色,这个价位还是相当划算的。

感觉调用 API 的回答效果和网页版 Kimi 智能助手不一样?

理论上来说,网页版 Kimi 智能助手和 API 背后的大模型能力是相同的。大家在实际使用中感受到的差异可能有以下两个原因:

魔法哥把网页版 Kimi 的系统提示词存了一份在这里,大家可以仔细研究:
github.com/cssmagic/Awesome-AI/issues/2

为什么每次调用 API 返回的结果不一样?

这确实是 AI 大模型与常规计算机程序的重要差异。大模型本质上是一种人工神经网络,它在推理过程引入了一定的随机性——即使每次的输入完全相同,输出结果也可能不同。

这种随机性在很多场景下是我们需要的,但在某些场景下可能会带来困扰。在这种情况下,我们有一些手段可以提升模型输出的可预测性和稳定性:

另外,如果你的应用确实存在反复调用相同输入的需求,可以考虑把模型的输出结果缓存起来,这样不仅响应更快,而且还能节省 API 调用成本哦。

如何让模型返回 JSON 格式的数据?

当我们把大模型当作一个后端服务来使用时,通常期望它返回特定结构的 JSON 数据,以便与其他功能模块进行对接和交互。

OpenAI 的 Chat Completion 接口为了适应这种需求,提供了 JSON 模式。在调用接口时,把 response_format 参数设置为 { "type": "json_object" },即可要求模型输出 JSON 格式的数据。

Kimi API 目前还不支持 JSON 模式(官方表示很快就会上线),但我们还是有一些手段可以实现 JSON 格式的输出:

这里强调一下示例的重要性:如果没有示例,模型输出的 JSON 结构往往与我们的预期并不一致。包括 OpenAI 即使提供了 JSON 模式,也需要我们提供示例来约束其结构。

内部消息:Kimi API 的后续计划

参考资料


希望这篇文章能帮助到大家。如果你还有其他问题,欢迎在评论区留言,魔法哥会尽力解答!

新朋友请关注公众号,下次更新不迷路:

weixin-qrcode


© Creative Commons BY-NC-ND 4.0   |   我要订阅   |   我要打赏