第02课:30分钟跑通 Kimi API

“第一次跑通 API 是个心理关卡,不是技术关卡。大多数人卡的地方不是代码,而是注册流程里哪步需要点哪里。”


2.1 注册 Kimi 开放平台(5分钟)

第一步:访问开发者平台

打开浏览器访问 platform.kimi.ai,注意这是开发者平台,不是普通用户聊天的 kimi.ai

用手机号注册,国内号码直接可用,全程无需梯子。

第二步:创建 API Key

登录后点击左侧「API Key 管理」→「新建 API Key」。

给 Key 起名(如"副业工具"),点击确认,立即复制保存——系统只显示一次完整 Key,关掉弹窗后就只能看到脱敏版本。

Key 格式类似:sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

安全原则:Key 不要出现在任何 .py 文件里、不要提交到 GitHub、不要发给任何人。后面会讲安全读取方式。

第三步:查看免费额度

新用户通常有免费 token 赠送,在控制台「额度管理」可以查看。本书所有代码案例加起来的 API 消耗不超过 300 万 token,节省着用绰绰有余。


2.2 配置 Python 环境(10分钟)

安装 Python(如已安装跳过)

访问 python.org 下载 Python 3.10 或以上。Windows 安装时勾选「Add Python to PATH」。

验证:

python --version
# 输出类似:Python 3.11.9

安装 openai 库

Kimi 使用 OpenAI 兼容接口,直接用官方 openai 库,无需安装任何专属 SDK:

pip install openai

验证:

python -c "import openai; print(openai.__version__)"
# 输出类似:1.52.0

配置 API Key(环境变量,最安全的方式)

Windows:

setx MOONSHOT_API_KEY "sk-你的完整Key"

设置后关闭并重新打开命令提示符才生效。

Mac / Linux:

echo 'export MOONSHOT_API_KEY="sk-你的完整Key"' >> ~/.bashrc
source ~/.bashrc

验证是否生效:

python -c "import os; print(os.environ.get('MOONSHOT_API_KEY', '未找到'))"

2.3 第一个调用(10分钟)

最小可运行代码

新建文件 hello_kimi.py

import os
from openai import OpenAI

# 用环境变量读取 Key,不要直接写在代码里
client = OpenAI(
    api_key=os.environ.get("MOONSHOT_API_KEY"),
    base_url="https://api.moonshot.ai/v1",  # 这一行是关键,指向 Kimi
)

response = client.chat.completions.create(
    model="moonshot-v1-32k",  # 先用便宜模型测试
    messages=[
        {
            "role": "user",
            "content": "帮我写一条50字以内的蓝牙耳机产品广告语,突出主动降噪功能"
        }
    ]
)

print(response.choices[0].message.content)

运行:

python hello_kimi.py

预期输出类似:

沉浸纯粹,隔绝世界——主动降噪耳机,让每一刻专属于你。

费用:这次调用消耗约 80 token,成本不到 $0.0001(一分钱都不到)。


2.4 理解调用结构

response = client.chat.completions.create(
    model="kimi-k2.6",          # 选择模型
    messages=[                   # 对话消息列表
        {
            "role": "system",    # 系统指令(设定角色和行为规则)
            "content": "你是专业的法律顾问助手,擅长合同风险识别"
        },
        {
            "role": "user",      # 用户消息
            "content": "请分析这份合同第三条款的风险..."
        }
    ],
    temperature=0.3,             # 0=最确定,1=最随机;分析任务用低值
    max_tokens=2000,             # 最大输出 token 数
    stream=False                 # True=流式输出(打字机效果)
)

# 提取输出
content = response.choices[0].message.content

# 查看本次用量
usage = response.usage
print(f"输入:{usage.prompt_tokens} tokens,输出:{usage.completion_tokens} tokens")

temperature 实用设置:

任务类型 推荐值 原因
合同/文档分析 0.1–0.3 需要确定性输出
代码生成 0.2–0.4 逻辑需要稳定
内容创作/文案 0.7–0.9 需要创意多样性
头脑风暴 0.9–1.0 越随机越好

2.5 四种常用调用模式

模式一:流式输出(打字机效果)

适合有界面的工具,让用户看到实时输出,体验更好:

response = client.chat.completions.create(
    model="kimi-k2.6",
    messages=[{"role": "user", "content": "写一份500字的市场分析报告"}],
    stream=True  # 开启流式
)

for chunk in response:
    delta = chunk.choices[0].delta
    if delta.content:
        print(delta.content, end="", flush=True)
print()  # 结尾换行

模式二:多轮对话

让模型记住上下文,支持追问和修改:

messages = [
    {"role": "system", "content": "你是专业的商业计划书顾问"}
]

# 第一轮
messages.append({"role": "user", "content": "帮我为一个宠物洗护店写执行摘要"})
response = client.chat.completions.create(model="kimi-k2.6", messages=messages)
reply = response.choices[0].message.content
messages.append({"role": "assistant", "content": reply})  # 把AI的回复加入历史
print("第一稿:\n", reply)

# 第二轮(基于上文修改)
messages.append({"role": "user", "content": "字数缩短一半,重点突出差异化竞争优势"})
response = client.chat.completions.create(model="kimi-k2.6", messages=messages)
print("修改版:\n", response.choices[0].message.content)

模式三:JSON 结构化输出

做数据提取工具时必用,确保输出格式固定可解析:

import json

response = client.chat.completions.create(
    model="kimi-k2.6",
    messages=[{
        "role": "user",
        "content": """从以下合同条款中提取关键信息,输出 JSON 格式:

合同条款:甲方需在2026年8月31日前交付系统,验收周期30天,
逾期罚款为合同总价的0.5%/天,最高不超过10%。

输出格式:
{
  "deadline": "交付日期",
  "acceptance_days": 验收天数(整数),
  "penalty_rate": "罚款比例",
  "penalty_cap": "罚款上限"
}"""
    }],
    response_format={"type": "json_object"}  # 强制 JSON 输出
)

data = json.loads(response.choices[0].message.content)
print(data)
# 输出:{'deadline': '2026年8月31日', 'acceptance_days': 30, 'penalty_rate': '0.5%/天', 'penalty_cap': '10%'}

模式四:长文件处理(256K 上下文)

Kimi K2 的核心能力,直接喂入完整长文档:

# 读取本地文件
with open("contract.txt", "r", encoding="utf-8") as f:
    document = f.read()

response = client.chat.completions.create(
    model="kimi-k2.6",           # 256K 上下文
    messages=[
        {
            "role": "system",
            "content": "你是专业合同审查律师,专注于识别风险条款和不平等条款"
        },
        {
            "role": "user",
            "content": f"请审查以下合同,列出所有风险条款并给出修改建议:\n\n{document}"
        }
    ],
    temperature=0.2
)

print(response.choices[0].message.content)

2.6 常见报错速查

报错信息 原因 解决方法
AuthenticationError API Key 无效或未设置 检查环境变量是否生效,Key 格式是否完整
ModuleNotFoundError: openai 库未安装 运行 pip install openai
APIConnectionError 网络问题 检查网络,api.moonshot.ai 无需梯子
RateLimitError 调用频率超限 time.sleep(1) 或减少并发
context_length_exceeded 输入超过上下文上限 换 K2.6 或 moonshot-v1-128k,或截短输入
输出质量差 system prompt 不够清晰 加明确的角色设定和输出格式要求

高频问题:Windows 环境变量设置后读不到

原因:setx 命令设置后,需要重新打开新的命令提示符才生效,当前窗口看不到新变量。

临时解决方案(开发调试期可用,生产环境禁止):

import os
os.environ["MOONSHOT_API_KEY"] = "sk-你的Key"  # 仅当前进程有效

2.7 成本监控:养成好习惯

在每次 API 调用后打印用量,避免循环写错导致意外消耗:

def call_kimi(messages, model="kimi-k2.6"):
    response = client.chat.completions.create(
        model=model,
        messages=messages
    )
    
    usage = response.usage
    # 估算成本(K2.6 输入 $0.95/M,输出 $4.00/M)
    input_cost = usage.prompt_tokens * 0.95 / 1_000_000
    output_cost = usage.completion_tokens * 4.00 / 1_000_000
    total_cost = input_cost + output_cost
    
    print(f"[用量] 输入:{usage.prompt_tokens} 输出:{usage.completion_tokens} | 估算成本:${total_cost:.6f}")
    
    return response.choices[0].message.content

# 使用
result = call_kimi([{"role": "user", "content": "分析一下AI行业趋势"}])
print(result)

批量处理前先用单条测试:跑100条数据之前,先跑1条验证prompt和输出格式,再批量跑。


2.8 K2.7 Code 的第一次调用(特殊说明)

K2.7 Code 强制开启思考模式,首次调用时响应时间会比普通模型慢3-10秒,这是模型在"内部推理",是正常现象:

import time

start = time.time()

response = client.chat.completions.create(
    model="kimi-k2.7-code",  # 代码专项模型
    messages=[{
        "role": "user",
        "content": "写一个 Python 函数,输入一个列表,返回去重后按频率降序排列的元素列表"
    }]
)

elapsed = time.time() - start
print(f"耗时:{elapsed:.1f}秒")
print(response.choices[0].message.content)

K2.7 Code 的输出会比普通模型更长——它会先解释思路,再给代码,通常还会有边界条件说明。对客户来说,这种交付质量是值钱的,也是你可以高报价的理由。


本课行动清单

  • [ ] 注册 Kimi 开放平台,查看当前免费额度
  • [ ] 创建 API Key 并安全保存到环境变量
  • [ ] 运行 hello_kimi.py,看到第一次成功输出
  • [ ] 测试一次 JSON 结构化输出模式
  • [ ] 用 K2.7 Code 跑一次代码生成,感受思考模式的输出风格

→ 继续阅读:第03课_Kimi模型选型全景与成本计算.md