一、介绍
接口文档
https://platform.moonshot.cn/docs/guide/migrating-from-openai-to-kimi
收费详情
- 并发: 同一时间内我们最多处理的来自您的请求数
- RPM: request per minute 指一分钟内您最多向我们发起的请求数
- TPM: token per minute 指一分钟内您最多和我们交互的token数
- TPD: token per day 指一天内您最多和我们交互的token数
二、环境准备
获取API Key
访问kimi开发者API
https://platform.moonshot.cn/console/info
找到API Key管理,点击新建:
三、兼容OpenAI方式开发
四、代码
from openai import OpenAI
client = OpenAI(
api_key = "$MOONSHOT_API_KEY",
base_url = "https://api.moonshot.cn/v1",
)
completion = client.chat.completions.create(
model = "moonshot-v1-8k",
messages = [
{"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
{"role": "user", "content": "你好,我叫李雷,1+1等于多少?"}
],
temperature = 0.3,
)
print(completion.choices[0].message.content)
使用恰当长度的模型进行返回。model=moonshot-v1-auto
来让 Kimi 自动选择一个适配当前上下文长度的模型:
import os
import httpx
from openai import OpenAI
client = OpenAI(
api_key=os.environ['MOONSHOT_API_KEY'],
base_url="https://api.moonshot.cn/v1",
)
def estimate_token_count(input_messages) -> int:
"""
在这里实现你的 Tokens 计算逻辑,或是直接调用我们的 Tokens 计算接口计算 Tokens
https://api.moonshot.cn/v1/tokenizers/estimate-token-count
"""
header = {
"Authorization": f"Bearer {os.environ['MOONSHOT_API_KEY']}",
}
data = {
"model": "moonshot-v1-128k",
"messages": input_messages,
}
r = httpx.post("https://api.moonshot.cn/v1/tokenizers/estimate-token-count", headers=header, json=data)
r.raise_for_status()
return r.json()["data"]["total_tokens"]
def select_model(input_messages, max_tokens=1024) -> str:
"""
select_model 根据输入的上下文消息 input_messages,以及预期的 max_tokens 值,
选择一个大小合适的模型。
select_model 内部会调用 estimate_token_count 函数计算 input_messages 所占用
的 tokens 数量,加上 max_tokens 的值作为 total_tokens,并根据 total_tokens
所处的区间选择恰当的模型。
"""
prompt_tokens = estimate_token_count(input_messages)
total_tokens = prompt_tokens + max_tokens
if total_tokens <= 8 * 1024:
return "moonshot-v1-8k"
elif total_tokens <= 32 * 1024:
return "moonshot-v1-32k"
elif total_tokens <= 128 * 1024:
return "moonshot-v1-128k"
else:
raise Exception("too many tokens 😢")
messages = [
{"role": "system", "content": "你是 Kimi"},
{"role": "user", "content": "你好,请给我讲一个童话故事。"},
]
max_tokens = 2048
model = select_model(messages, max_tokens)
completion = client.chat.completions.create(
model=model,
messages=messages,
max_tokens=max_tokens,
temperature=0.3,
)
print("model:", model)
print("max_tokens:", max_tokens)
print("completion:", completion.choices[0].message.content)