この Topic では、OpenAI 互換の API または DashScope SDK を使用して、Alibaba Cloud Model Studio 上で Kimi モデルを呼び出す方法について説明します。
この Topic で説明するモデルは、中国 (北京) リージョンでのみ利用可能です。これらのモデルを使用するには、中国 (北京) リージョンのAPI キーが必要です。
概要
Kimi は、Moonshot AI が提供する一連の大規模言語モデル (LLM) です。
kimi-k2-thinking: このモデルは思考モードのみをサポートし、
reasoning_contentフィールドを通じて思考プロセスを表示します。優れたコーディング能力とツール呼び出し能力を備えています。このモデルは、論理的な分析、計画、または深い理解を必要とするシナリオに適しています。Moonshot-Kimi-K2-Instruct: このモデルは深い思考をサポートせず、直接応答を生成します。応答速度が速く、迅速かつ直接的な回答を必要とするシナリオに適しています。
モデル | コンテキストウィンドウ | 最大入力 | 最大思考連鎖 | 最大応答 | 入力価格 | 出力価格 |
(トークン) | (100 万トークン) | |||||
kimi-k2-thinking | 262,144 | 229,376 | 32,768 | 16,384 | $0.574 | $2.294 |
Moonshot-Kimi-K2-Instruct | 131,072 | 131,072 | - | 8,192 | $0.574 | $2.294 |
開始
API を呼び出す前に、API キーを作成し、API キーを環境変数としてエクスポートします。SDK を使用してモデルを呼び出す場合は、OpenAI または DashScope SDK をインストールします。
OpenAI 互換
Python
サンプルコード
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="kimi-k2-thinking",
messages=[{"role": "user", "content": "Who are you?"}],
stream=True,
)
reasoning_content = "" # 完全な思考プロセス
answer_content = "" # 完全な応答
is_answering = False # 応答フェーズが開始されたかどうか
print("\n" + "=" * 20 + "Thinking process" + "=" * 20 + "\n")
for chunk in completion:
if chunk.choices:
delta = chunk.choices[0].delta
# 思考コンテンツのみを収集
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
# コンテンツを受信し、応答を開始
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "Complete response" + "=" * 20 + "\n")
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.contentサンプル応答
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。これは私の ID に関する直接的な質問です。私は実際の ID に基づいて正直に答える必要があります。
私は Moonshot AI によって開発された人工知能アシスタントで、名前は Kimi です。私は、以下を含む自己紹介を明確かつ簡潔に行うべきです:
1. 私の ID: AI アシスタント
2. 私の開発者: Moonshot AI
3. 私の名前: Kimi
4. 私のコア機能: 長文処理、インテリジェントな会話、ファイル処理、検索など。
一般ユーザーが理解できるように、過度に専門的な用語を避け、フレンドリでプロフェッショナルなトーンを維持する必要があります。同時に、私は個人の意識、感情、または個人的な経験を持たない AI であることを強調すべきです。
応答構造:
- 私の ID を直接述べる
- 開発者に言及する
- コア機能を簡単に紹介する
- シンプルで明確に保つ
====================完全な応答====================
私は Moonshot AI によって開発された AI アシスタントの Kimi です。私は Mixture-of-Experts (MoE) アーキテクチャに基づいており、超長文コンテキスト理解、インテリジェントな会話、ファイル処理、コード生成、複雑なタスクの推論などの機能を備えています。何かお手伝いできることはありますか?Node.js
サンプルコード
import OpenAI from "openai";
import process from 'process';
// OpenAI クライアントを初期化
const openai = new OpenAI({
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1'
});
let reasoningContent = ''; // 完全な思考プロセス
let answerContent = ''; // 完全な応答
let isAnswering = false; // 応答フェーズが開始されたかどうか
async function main() {
const messages = [{ role: 'user', content: 'Who are you?' }];
const stream = await openai.chat.completions.create({
model: 'kimi-k2-thinking',
messages,
stream: true,
});
console.log('\n' + '='.repeat(20) + 'Thinking process' + '='.repeat(20) + '\n');
for await (const chunk of stream) {
if (chunk.choices?.length) {
const delta = chunk.choices[0].delta;
// 思考コンテンツのみを収集
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
if (!isAnswering) {
process.stdout.write(delta.reasoning_content);
}
reasoningContent += delta.reasoning_content;
}
// コンテンツを受信し、応答を開始
if (delta.content !== undefined && delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + 'Complete response' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
}
}
main();結果
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。これは私の ID に関する直接的な質問です。私は実際の ID に基づいて正直に答える必要があります。
私は Moonshot AI によって開発された人工知能アシスタントで、名前は Kimi です。私は、以下を含む自己紹介を明確かつ簡潔に行うべきです:
1. 私の ID: AI アシスタント
2. 私の開発者: Moonshot AI
3. 私の名前: Kimi
4. 私のコア機能: 長文処理、インテリジェントな会話、ファイル処理、検索など。
一般ユーザーが簡単に理解できるように、過度に専門的な用語を避け、フレンドリでプロフェッショナルなトーンを維持する必要があります。同時に、誤解を避けるために、私は個人の意識、感情、または個人的な経験を持たない AI であることを強調すべきです。
応答構造:
- 私の ID を直接述べる
- 開発者に言及する
- コア機能を簡単に紹介する
- シンプルで明確に保つ
====================完全な応答====================
私は Moonshot AI によって開発された人工知能アシスタントの Kimi です。
得意なこと:
- 長文の理解と生成
- インテリジェントな会話と Q&A
- ファイルの処理と分析
- 情報の取得と統合
AI アシスタントとして、私は個人の意識、感情、または経験を持っていませんが、正確で役立つヘルプを提供するために最善を尽くします。何かお手伝いできることはありますか?HTTP
サンプルコード
curl
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k2-thinking",
"messages": [
{
"role": "user",
"content": "Who are you?"
}
]
}'サンプル応答
{
"choices": [
{
"message": {
"content": "私は Moonshot AI によって開発された人工知能アシスタントの Kimi です。長文の処理、インテリジェントな会話、ファイル分析、プログラミング支援、複雑なタスクの推論が得意です。質問に答えたり、コンテンツを作成したり、ドキュメントを分析したりするお手伝いができます。何かお手伝いできることはありますか?",
"reasoning_content": "ユーザーは「あなたは誰ですか?」と尋ねています。これは私の ID に関する直接的な質問です。私は実際の ID に基づいて正直に答える必要があります。\n\n私は Moonshot AI によって開発された人工知能アシスタントで、名前は Kimi です。私は、以下を含む自己紹介を明確かつ簡潔に行うべきです:\n1. 私の ID: AI アシスタント\n2. 私の開発者: Moonshot AI\n3. 私の名前: Kimi\n4. 私のコア機能: 長文処理、インテリジェントな会話、ファイル処理、検索など。\n\n役立つ情報を提供しながら、フレンドリでプロフェッショナルなトーンを維持する必要があります。複雑にしすぎず、直接答えるだけで十分です。",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 8,
"completion_tokens": 183,
"total_tokens": 191
},
"created": 1762753998,
"system_fingerprint": null,
"model": "kimi-k2-thinking",
"id": "chatcmpl-485ab490-90ec-48c3-85fa-1c732b683db2"
}DashScope
Python
サンプルコード
import os
from dashscope import Generation
# リクエストパラメーターを初期化
messages = [{"role": "user", "content": "Who are you?"}]
completion = Generation.call(
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="kimi-k2-thinking",
messages=messages,
result_format="message", # 結果のフォーマットを message に設定
stream=True, # ストリーミング出力を有効化
incremental_output=True, # 増分出力を有効化
)
reasoning_content = "" # 完全な思考プロセス
answer_content = "" # 完全な応答
is_answering = False # 応答フェーズが開始されたかどうか
print("\n" + "=" * 20 + "Thinking process" + "=" * 20 + "\n")
for chunk in completion:
message = chunk.output.choices[0].message
# 思考コンテンツのみを収集
if message.reasoning_content:
if not is_answering:
print(message.reasoning_content, end="", flush=True)
reasoning_content += message.reasoning_content
# コンテンツを受信し、応答を開始
if message.content:
if not is_answering:
print("\n" + "=" * 20 + "Complete response" + "=" * 20 + "\n")
is_answering = True
print(message.content, end="", flush=True)
answer_content += message.content
# ループの後、reasoning_content と answer_content 変数には完全なコンテンツが含まれます
# 必要に応じて、ここで後続の処理を実行できます
# print(f"\n\nComplete thinking process:\n{reasoning_content}")
# print(f"\nComplete response:\n{answer_content}")サンプル応答
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。これは私の ID に関する直接的な質問です。私は実際の ID に基づいて正直に答える必要があります。
私は Moonshot AI によって開発された人工知能アシスタントで、名前は Kimi です。私はこれを明確かつ簡潔に述べるべきです。
含めるべき主な情報は次のとおりです:
1. 私の名前: Kimi
2. 私の開発者: Moonshot AI
3. 私の性質: 人工知能アシスタント
4. 私ができること: 質問に答える、作成を支援するなど。
私は自分の ID を正確に述べながら、フレンドリで親切なトーンを維持する必要があります。人間であるふりをしたり、個人的な ID を持っているふりをしたりすべきではありません。
適切な応答は次のようになります:
「私は Moonshot AI によって開発された人工知能アシスタントの Kimi です。質問に答えたり、コンテンツを作成したり、ドキュメントを分析したりするなど、さまざまなタスクでお手伝いできます。何かお手伝いできることはありますか?」
この応答は直接的で正確であり、さらなる対話を促します。
====================完全な応答====================
私は Moonshot AI によって開発された人工知能アシスタントの Kimi です。質問に答えたり、コンテンツを作成したり、ドキュメントを分析したりするなど、さまざまなタスクでお手伝いできます。何かお手伝いできることはありますか?Java
サンプルコード
// DashScope SDK バージョン >= 2.19.4
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import java.lang.System;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleGenerationResult(GenerationResult message) {
String reasoning = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (reasoning!= null&&!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================Thinking process====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (content!= null&&!content.isEmpty()) {
finalContent.append(content);
if (!isFirstPrint) {
System.out.println("\n====================Complete response====================");
isFirstPrint = true;
}
System.out.print(content);
}
}
private static GenerationParam buildGenerationParam(Message userMsg) {
return GenerationParam.builder()
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("kimi-k2-thinking")
.incrementalOutput(true)
.resultFormat("message")
.messages(Arrays.asList(userMsg))
.build();
}
public static void streamCallWithMessage(Generation gen, Message userMsg)
throws NoApiKeyException, ApiException, InputRequiredException {
GenerationParam param = buildGenerationParam(userMsg);
Flowable<GenerationResult> result = gen.streamCall(param);
result.blockingForEach(message -> handleGenerationResult(message));
}
public static void main(String[] args) {
try {
Generation gen = new Generation();
Message userMsg = Message.builder().role(Role.USER.getValue()).content("Who are you?").build();
streamCallWithMessage(gen, userMsg);
// 最終結果を出力
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================Complete response====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
logger.error("An exception occurred: {}", e.getMessage());
}
System.exit(0);
}
}サンプル応答
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。これは私の ID に関する直接的な質問です。私は実際の ID に基づいて正直に答える必要があります。
私は Moonshot AI によって開発された人工知能アシスタントで、名前は Kimi です。私はこれを明確かつ簡潔に述べるべきです。
応答には以下を含める必要があります:
1. 私の ID: AI アシスタント
2. 私の開発者: Moonshot AI
3. 私の名前: Kimi
4. 私のコア機能: 長文処理、インテリジェントな会話、ファイル処理など。
人間であるふりをしたり、専門的な詳細を過度に提供したりすべきではありません。明確でフレンドリな回答をするだけで十分です。
====================完全な応答====================
私は Moonshot AI によって開発された人工知能アシスタントの Kimi です。長文の処理、インテリジェントな会話、質問への回答、作成の支援、ファイルの分析と処理のお手伝いが得意です。何かお手伝いできることはありますか?HTTP
サンプルコード
curl
curl -X POST "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k2-thinking",
"input":{
"messages":[
{
"role": "user",
"content": "Who are you?"
}
]
},
"parameters": {
"result_format": "message"
}
}'サンプル応答
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "私は Moonshot AI によって開発された人工知能アシスタントの Kimi です。質問に答えたり、コンテンツを作成したり、ドキュメントを分析したり、コードを書いたりするお手伝いができます。何かお手伝いできることはありますか?",
"reasoning_content": "ユーザーは「あなたは誰ですか?」と尋ねています。これは私の ID に関する直接的な質問です。私は実際の ID に基づいて正直に答える必要があります。\n\n私は Moonshot AI によって開発された人工知能アシスタントで、名前は Kimi です。私はこれを明確かつ簡潔に述べるべきです。\n\n含めるべき主な情報は次のとおりです:\n1. 私の名前: Kimi\n2. 私の開発者: Moonshot AI\n3. 私の性質: 人工知能アシスタント\n4. 私ができること: 質問に答える、作成を支援するなど。\n\nユーザーが理解しやすいように、フレンドリで直接的な方法で応答する必要があります。",
"role": "assistant"
}
}
]
},
"usage": {
"input_tokens": 9,
"output_tokens": 156,
"total_tokens": 165
},
"request_id": "709a0697-ed1f-4298-82c9-a4b878da1849"
}モデルの特徴
モデル | |||||||
kimi-k2-thinking | |||||||
Moonshot-Kimi-K2-Instruct |
デフォルトのパラメーター値
モデル | temperature | top_p | presence_penalty |
kimi-k2-thinking | 1.0 | - | - |
Moonshot-Kimi-K2-Instruct | 0.6 | 1.0 | 0 |
ハイフン (-) は、パラメーターが設定不可であり、デフォルト値がないことを示します。
エラーコード
モデルの呼び出しが失敗し、エラーメッセージが返された場合は、詳細については、「エラーメッセージ」をご参照ください。