
什么是 REST API?
月之暗面(Moonshot AI)推出的 Kimi Chat 及其背后的 Kimi K2 模型,凭借其在超长上下文理解(高达128K tokens)和多模态处理能力上的卓越表现,迅速成为开发者和企业关注的焦点。本指南将深入解析 Kimi K2 API 的调用方法,助你轻松将其集成到自己的应用和服务中。
一切始于 API Key,它是你调用 Kimi API 的唯一身份凭证。
https://platform.moonshot.cn/
。sk-
开头的长字符串(如 sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
)。这是你最重要的凭证!安全警示:
官方提供了 Python SDK,极大简化了调用流程。我们以 Python 环境为例:
pip install moonshot
pip install moonshot -i https://pypi.tuna.tsinghua.edu.cn/simple
掌握了 API Key 并配置好环境,现在让我们开始进行核心的 API 调用。Kimi K2 API 主要围绕 Chat Completions
接口展开。
这是最基本也是最常用的功能:向模型发送一段或多段文本消息,并获取模型的文本回复。
from moonshot import Moonshot
# 步骤 1: 初始化客户端 - 替换 '你的API Key' 为你在控制台获取的真实 Key
client = Moonshot(api_key="你的API Key") # 例如: "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 步骤 2: 构建对话历史 (messages)
# 每条消息是一个字典 (dict),包含 'role' (角色) 和 'content' (内容)
# role 可选: 'system' (系统设定), 'user' (用户), 'assistant' (模型之前的回复)
messages = [
{
"role": "system",
"content": "你是一个乐于助人的AI助手。你的回答需要简洁、清晰、有逻辑性。", # 设定AI的角色和行为
},
{
"role": "user",
"content": "请解释一下量子计算的基本原理是什么?它与传统计算机有什么主要区别?", # 用户的问题
},
]
# 步骤 3: 发起 API 请求
# 使用 chat.completions.create 方法
# 必选参数: model (指定模型), messages (对话历史)
# 可选参数: max_tokens (限制回复最大长度), temperature (控制随机性), top_p (控制多样性)等
completion = client.chat.completions.create(
model="moonshot-v1-8k", # 指定模型ID, 例如 'moonshot-v1-8k', 'moonshot-v1-32k', 'moonshot-v1-128k'
messages=messages,
max_tokens=1024, # 限制模型回复的最大token数
temperature=0.3, # 值越低(接近0)输出越确定/保守; 值越高(接近1)输出越随机/有创意
)
# 步骤 4: 提取模型回复
# 返回的 completion 对象包含多个属性,回复内容在 choices[0].message.content
response_text = completion.choices[0].message.content
# 打印模型回复
print("Kimi 的回答:")
print(response_text)
关键参数详解:
model
: 必选。指定要使用的模型。moonshot-v1-8k
: 支持上下文约 8K tokens。moonshot-v1-32k
: 支持上下文约 32K tokens。moonshot-v1-128k
: Kimi K2 核心优势! 支持上下文约 128K tokens,适合处理超长文档和复杂任务。messages
: 必选。一个列表 (list
),包含对话消息字典 (dict
)。role
: 消息发送者角色。system
用于设定助手的行为和背景;user
代表用户的输入;assistant
代表模型之前的回复(用于多轮对话)。content
: 该角色的消息文本内容。max_tokens
: 可选。限制模型在本次请求中生成的 最大 token 数量。注意:这个限制包括输入 (messages
) 和输出 (response
) 的总 tokens 不能超过模型本身的最大上下文长度 (如 128k)。设置合理的 max_tokens
可以控制成本和响应长度。temperature
: 可选 (默认值通常为 0.7)。取值范围 [0, 2]
。控制生成文本的随机性。top_p
: 可选 (默认值通常为 1.0)。取值范围 [0, 1]
。另一种控制多样性的方式,称为核采样 (nucleus sampling)。top_p
的 token 集合。例如 top_p=0.9
表示模型只考虑概率最高的那部分 token (它们的概率累加达到 90%),然后从这部分里随机选择。temperature
或 top_p
其中一个即可,不必同时调整。stream
: 可选 (True
/False
)。是否启用流式传输 (Server-Sent Events)。启用后 (stream=True
),响应会分块返回,适合需要实时显示结果的场景(如聊天界面)。处理流式响应代码稍复杂一些(见下文进阶部分)。stop
: 可选。一个字符串列表 (list[str]
)。指定一个或多个序列,当模型生成遇到这些序列时,会停止生成。例如 stop=["\n", "。"]
表示遇到换行或句号就停止。用于更精确地控制输出格式。Kimi K2 的核心亮点之一是能够理解上传文件的内容(如 PDF, DOCX, XLSX, PPTX, TXT, 图片等)。这极大地扩展了其应用场景。
调用步骤:
files
API 将你的文件上传到平台,获取一个临时的 file_id
。messages
时,在 user
消息的 content
中,使用特定的格式 @file-{file_id}
来引用你上传的文件。你可以要求模型读取文件内容、总结、回答问题、提取信息等。from moonshot import Moonshot
import os
client = Moonshot(api_key="你的API Key")
# 步骤 1: 上传文件
# 指定要上传的文件路径 (替换为你的实际文件路径)
file_path = "./path/to/your/file.pdf" # 支持 PDF, DOCX, XLSX, PPTX, TXT, 图片等
# 使用 files.create 方法上传
# 参数: file (一个打开的文件对象), purpose (固定为 'file-extract')
with open(file_path, "rb") as file_to_upload:
uploaded_file = client.files.create(file=file_to_upload, purpose="file-extract")
# 获取上传文件的唯一标识符 (file_id)
file_id = uploaded_file.id
print(f"文件已上传,ID: {file_id}")
# 步骤 2: 在对话中引用文件并提问
messages = [
{
"role": "system",
"content": "你是一个专业的文档分析助手。请根据用户提供的文档回答问题。"
},
{
"role": "user",
# 使用 @file-{file_id} 格式引用上传的文件,并提问
"content": f"请阅读附件中的文档:@file-{file_id}。\n\n总结这份文档的主要观点,并列出三个关键论据。"
}
]
# 步骤 3: 发起对话请求 (与非文件调用相同)
completion = client.chat.completions.create(
model="moonshot-v1-128k", # 处理长文档强烈推荐使用 128k 模型
messages=messages,
max_tokens=2048,
temperature=0.2 # 文件分析任务通常需要更确定性的输出
)
# 步骤 4: 提取并打印回复
response_text = completion.choices[0].message.content
print("Kimi 的文档分析结果:")
print(response_text)
# (可选) 步骤 5: 删除上传的文件 (如果需要清理)
# client.files.delete(file_id)
文件处理要点:
moonshot-v1-128k
)支持多模态文件解析。user
的 content
中,清晰地指明哪个问题针对哪个文件(尤其在引用多个文件时)。对于需要实时显示结果的场景(如聊天应用),使用流式传输可以显著提升用户体验。响应会分成多个 chunks 陆续返回。
from moonshot import Moonshot
client = Moonshot(api_key="你的API Key")
messages = [{"role": "user", "content": "用生动的语言描述一下秋天的景色。"}]
# 设置 stream=True
stream = client.chat.completions.create(
model="moonshot-v1-8k",
messages=messages,
max_tokens=500,
stream=True, # 开启流式传输
)
print("Kimi 正在生成回复...")
collected_chunks = [] # 用于收集返回的块
for chunk in stream:
if chunk.choices and chunk.choices[0].delta and chunk.choices[0].delta.content:
# 提取当前 chunk 中的文本内容
chunk_content = chunk.choices[0].delta.content
print(chunk_content, end="", flush=True) # 实时打印到屏幕 (end="" 避免换行, flush=True 立即显示)
collected_chunks.append(chunk_content)
# 将所有块组合成完整回复 (可选)
full_reply = "".join(collected_chunks)
system
或 user
消息的开头,清晰告诉模型需要关注文档的哪些部分(如“请重点阅读第三章关于市场分析的内容”)。API 本身是无状态的。实现多轮对话的关键在于在每次请求时,将完整的历史对话记录(包括之前用户说的话和模型的回复) 都包含在 messages
列表中发送。
# 初始化对话
conversation_history = [
{"role": "system", "content": "你是一个风趣幽默的聊天伙伴。"}
]
def chat_with_kimi(user_input):
# 1. 将用户最新输入添加到历史记录
conversation_history.append({"role": "user", "content": user_input})
# 2. 发送包含完整历史的请求
completion = client.chat.completions.create(
model="moonshot-v1-8k",
messages=conversation_history,
max_tokens=300
)
# 3. 获取模型回复
kimi_reply = completion.choices[0].message.content
# 4. 将模型的回复也添加到历史记录中,供下一轮使用
conversation_history.append({"role": "assistant", "content": kimi_reply})
return kimi_reply
# 模拟对话循环
while True:
user_message = input("你说:")
if user_message.lower() in ["退出", "exit", "bye"]:
break
response = chat_with_kimi(user_message)
print("Kimi:", response)
健壮的程序必须处理可能的 API 错误。
from moonshot import Moonshot, APIError, RateLimitError, APITimeoutError
client = Moonshot(api_key="你的API Key")
try:
completion = client.chat.completions.create(
model="moonshot-v1-8k",
messages=[{"role": "user", "content": "你好!"}]
)
print(completion.choices[0].message.content)
except RateLimitError as e:
# 处理速率限制错误 (请求过快)
print(f"请求太快被限制了!请稍后再试。错误信息: {e}")
# 可以添加等待重试逻辑 (e.g., time.sleep)
except APIError as e:
# 处理其他API错误 (如无效请求、认证失败、服务器错误等)
print(f"调用API出错!状态码: {e.status_code}, 错误信息: {e.message}")
if e.status_code == 401:
print("请检查你的API Key是否正确!")
except APITimeoutError as e:
# 处理请求超时
print(f"请求超时: {e}")
except Exception as e:
# 捕获其他未预料到的异常
print(f"发生未知错误: {e}")
Kimi K2 API 为开发者打开了一扇通往强大国产大模型能力的大门。通过本文的指南,你应该已经掌握了:
持续探索:
https://platform.moonshot.cn/docs
) 是获取最新模型列表、API 详细参数、限制说明、最佳实践和更新公告的权威来源。务必定期查阅。prompt
) 的设计、参数的调整。多尝试不同的 system
设定、提问方式、temperature
值,找到最适合你应用场景的组合。Kimi K2 的 128K 上下文和文件处理能力使其在处理复杂、信息密集的任务上具有独特优势。无论是构建智能知识助手、自动化文档处理流水线,还是开发创新的对话应用,Kimi K2 API 都提供了坚实可靠的基础。现在就开始你的集成之旅,释放国产大模型的潜能吧!
参考资料:
https://moonshotai.github.io/Kimi-K2/
(提供项目概览和资源链接)https://platform.moonshot.cn/docs/guide/agent-support#%E8%8E%B7%E5%8F%96-api-key
https://platform.moonshot.cn/docs
(最全面的API参考、指南和更新)