一、介绍
接口文档
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 OpenAIclient = 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 OpenAIclient = OpenAI(api_key=os.environ['MOONSHOT_API_KEY'],base_url="https://api.moonshot.cn/v1",
)def estimate_token_count(input_messages) -> int:"""在这里实现你的 Tokens 计算逻辑,或是直接调用我们的 Tokens 计算接口计算 Tokenshttps://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_tokensif 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)