【Kimi k1.5】GPT-4oやClaude Sonnet 3.5に匹敵する最新AIモデル!概要や使い方を徹底解説!

Kimi k1.5 概要 使い方
この記事のポイント
  • OpenAI-o1レベルの性能を持った中国のマルチモーダルAIモデル
  • GPT-4oやClaude Sonnet 3.5に匹敵する性能を有する
  • マルチモーダル対応でテキストと画像を同時に学習できる

DeepSeek-R1がリリースされた2025年1月20日、中国のAIスタートアップMoonshot AI社が「Kimi k1.5」を公開しました!

「Kimi k1.5」はOpenAI-o1レベルの性能を持ったマルチモーダルAIモデルです。

特に、短期CoT(Chain-of-Thought)と呼ばれる推論能力において、GPT-4oやClaude Sonnet 3.5を大きく上回る性能を持っているようです。

今回はそんな「Kimi k1.5」の特徴についてご説明します。

ぜひ最後までご覧ください!

目次

Kimi k1.5 とは

「Kimi k1.5」はOpenAI-o1レベル性能を持つマルチモーダルAIモデルです。

基盤となる「Kimi Chat」の初期バージョンは2023年11月に中国でローンチされており、長文処理能力の高さで注目を集めていましたが、今回公開された「Kimi k1.5」 は、その機能強化版として位置付けられています。

特に、短期CoT(Chain-of-Thought)での推論能力が強化されており、「**AIME」や「MATH-500」、「LiveCodeBench」といったベンチマークで、GPT-4oやClaude Sonnet 3.5を大幅に上回る最大+550%もの性能向上を達成しています。

参考:https://github.com/MoonshotAI/Kimi-k1.5?tab=readme-ov-file

上記のベンチマークテストでは、「AIME」77.5、「MATH500」96.2、「Codeforces」94、「MathVista」74.9を記録ておりいずれもOpenAI-o1と同程度かそれ以上のスコアになっていますね。

参考:https://github.com/MoonshotAI/Kimi-k1.5?tab=readme-ov-file

Kimi k1.5 特徴

参考:https://github.com/MoonshotAI/Kimi-k1.5?tab=readme-ov-file

「Kimi k1.5」の主な特徴は以下の通りです。

  • コンテキストスケーリング
    • 強化学習(RL)のコンテキストウィンドウが128,000トークンまで拡張され、文脈が長くなるにつれて性能が向上し続けるそうです。コンテキストウィンドウが大きいほど、モデルはより長い文章や複雑なプロンプトを理解し、応答することができるため、長文脈処理能力が向上していることが分かりますね。
  • 部分的なロールアウト
    • 過去の対話の一部を再利用することで、新しい対話をゼロから生成し直す必要がなくなっています
  • 強化学習(RL)の改善
    • オンラインミラー降下法を採用することで、ロバストな設計が実現されています。
    • 効果的なサンプリング戦略、文章の長さに対するペナルティの最適化によって、ポリシーが最適化されています。
  • フレームワークをシンプル化
    • シンプルな設計が特徴で、長いコンテキストのスケーリングと改良されたポリシー最適化手法を組み合わせることで、LLMを活用した学習に適した簡易的な強化学習(RL)フレームワークを実現しています。
    • コンテキストの長さを拡張できるため、学習されたCoT(Chain of Thought)には計画・内省・修正といった機能があります。また、コンテキストを長くするほど探索ステップ数が増えて、モンテカルロ木探索や価値関数、プロセス報酬モデルなどの複雑な技法に頼らなくても、高い性能を達成できるのが特徴です。
  • マルチモーダル(※)
    • テキストデータと画像データを同時に学習し、両方のモダリティを統合して推論をすることができます。

マルチモーダルAIについて詳しく知りたい方は、以下の記事も参考にしてみてください。

Kimi k1.5 使い方

それでは、実際に「Kimi k1.5」を使っていきましょう!

2025年1月24日時点では、以下の方法でWebUIから「Kimi k1.5」を利用することができます。

  1. Kimi公式サイト(https://kimi.moonshot.cn)にアクセスし、ページ右上の「ログイン」からアカウント登録/ログインします。
  1. 入力欄左下に、以下画像のようにグレースケールでモデルが表示されている方は、そこをクリック。表示されない方は、プロンプト入力欄に「/」を入力してEnterキーを押します。
参考:https://finance.sina.com.cn/tech/digi/2025-01-20/doc-inefrtfy7240286.shtml

筆者の環境では、スイッチは表示されなかったので、「/」を入力してEnterキーを押すと、以下の画像のように「ExplorerFeature in beta, 5 uses per day (5 remaining)」という表示が出ました。

2025年1月24日時点では、1日5回までの試用制限があるようです。(※アカウント認証等で回数増加することができるかもしれません。)

これでKimi k1.5を使える状態になりました。

ちなみに、2025年1月24日時点では、WebUI以外の方法は利用できないようですが、モバイルアプリ(アプリストアで「Kimi智能助手」と検索)や、API(公式GitHubページからテスト申請可能)も近日中に利用可能となるかもしれません。

また、現在は段階的リリース中のため、機能反映に時間差が生じる可能性もあります。

最新情報は、公式サイトやGitHubを参照するようにしましょう!

GitHub
GitHub - MoonshotAI/Kimi-k1.5 Contribute to MoonshotAI/Kimi-k1.5 development by creating an account on GitHub.

【検証】 Kimi k1.5 vs ChatGPT-4o

ここからは、Kimi k1.5とChatGPT-4oモデルの性能比較をしていきます。

コーディングタスク

Prompt

Think in English, Output in Japanese
2048ゲームをPythonで作ってください。

ChatGPT-4oモデルの回答はこちら

以下は、Pythonで2048ゲームを実装するコードです。これは、キーボード入力を使用してプレイできるシンプルなコマンドラインバージョンです。
import numpy as np
import random
import os

def initialize_game():
    board = np.zeros((4, 4), dtype=int)
    add_new_number(board)
    add_new_number(board)
    return board

def add_new_number(board):
    empty_cells = [(r, c) for r in range(4) for c in range(4) if board[r][c] == 0]
    if empty_cells:
        r, c = random.choice(empty_cells)
        board[r][c] = 2 if random.random() < 0.9 else 4

def compress(row):
    new_row = [i for i in row if i != 0]
    new_row += [0] * (4 - len(new_row))
    return new_row

def merge(row):
    for i in range(3):
        if row[i] == row[i + 1] and row[i] != 0:
            row[i] *= 2
            row[i + 1] = 0
    return row

def move_left(board):
    new_board = np.zeros((4, 4), dtype=int)
    for r in range(4):
        new_row = compress(board[r])
        new_row = merge(new_row)
        new_row = compress(new_row)
        new_board[r] = new_row
    return new_board

def move_right(board):
    return np.fliplr(move_left(np.fliplr(board)))

def move_up(board):
    return np.rot90(move_left(np.rot90(board, -1)), 1)

def move_down(board):
    return np.rot90(move_left(np.rot90(board, 1)), -1)

def print_board(board):
    os.system('cls' if os.name == 'nt' else 'clear')
    print(board)

def check_game_over(board):
    for move in [move_left, move_right, move_up, move_down]:
        if not np.array_equal(move(board), board):
            return False
    return True

def main():
    board = initialize_game()
    print_board(board)
    while True:
        move = input("W(上) A(左) S(下) D(右) Q(終了): ").lower()
        if move == 'q':
            print("ゲーム終了")
            break
        elif move == 'a':
            board_new = move_left(board)
        elif move == 'd':
            board_new = move_right(board)
        elif move == 'w':
            board_new = move_up(board)
        elif move == 's':
            board_new = move_down(board)
        else:
            continue

        if not np.array_equal(board, board_new):
            board = board_new
            add_new_number(board)
        print_board(board)

        if check_game_over(board):
            print("ゲームオーバー!")
            break

if __name__ == "__main__":
    main()

Kimi k1.5の回答はこちら

以下是一个用Python实现的2048游戏代码
import tkinter as tk
from tkinter import messagebox
import random

GRID_SIZE = 4
TILE_SIZE = 100
PADDING = 10
BACKGROUND_COLOR = "#92877d"
TILE_COLORS = {
    0: "#9e948a", 2: "#eee4da", 4: "#ede0c8",
    8: "#f2b179", 16: "#f59563", 32: "#f67c5f",
    64: "#f65e3b", 128: "#edcf72", 256: "#edcc61",
    512: "#edc850", 1024: "#edc53f", 2048: "#edc22e",
}

class Game2048:
    def __init__(self, master):
        self.master = master
        self.master.title("2048")
        self.master.geometry(f"{GRID_SIZE * TILE_SIZE + PADDING * (GRID_SIZE + 1)}x{GRID_SIZE * TILE_SIZE + PADDING * (GRID_SIZE + 1)}")
        self.master.resizable(False, False)
        self.init_grid()
        self.reset_game()

    def init_grid(self):
        self.canvas = tk.Canvas(self.master, bg=BACKGROUND_COLOR, bd=0, highlightthickness=0)
        self.canvas.pack(fill=tk.BOTH, expand=True)
        self.tiles = []
        for i in range(GRID_SIZE):
            row = []
            for j in range(GRID_SIZE):
                x1 = PADDING + j * (TILE_SIZE + PADDING)
                y1 = PADDING + i * (TILE_SIZE + PADDING)
                x2 = x1 + TILE_SIZE
                y2 = y1 + TILE_SIZE
                rect = self.canvas.create_rectangle(x1, y1, x2, y2, fill=TILE_COLORS[0], outline="")
                text = self.canvas.create_text(x1 + TILE_SIZE // 2, y1 + TILE_SIZE // 2, text="", font=("Helvetica", 30), fill="#776e65")
                row.append((rect, text))
            self.tiles.append(row)

    def reset_game(self):
        self.grid = [[0] * GRID_SIZE for _ in range(GRID_SIZE)]
        self.spawn_new_tile()
        self.spawn_new_tile()
        self.update_ui()

    def spawn_new_tile(self):
        empty_cells = [(i, j) for i in range(GRID_SIZE) for j in range(GRID_SIZE) if self.grid[i][j] == 0]
        if empty_cells:
            i, j = random.choice(empty_cells)
            self.grid[i][j] = 2 if random.random() < 0.9 else 4

    def update_ui(self):
        for i in range(GRID_SIZE):
            for j in range(GRID_SIZE):
                value = self.grid[i][j]
                rect, text = self.tiles[i][j]
                self.canvas.itemconfig(rect, fill=TILE_COLORS.get(value, TILE_COLORS[2048]))
                self.canvas.itemconfig(text, text=str(value) if value != 0 else "")

    def compress(self, row):
        new_row = [num for num in row if num != 0]
        new_row += [0] * (GRID_SIZE - len(new_row))
        return new_row

    def merge(self, row):
        for i in range(len(row) - 1):
            if row[i] == row[i + 1] and row[i] != 0:
                row[i] *= 2
                row[i + 1] = 0
        return row

    def move_left(self, grid):
        new_grid = []
        for row in grid:
            compressed_row = self.compress(row)
            merged_row = self.merge(compressed_row)
            new_grid.append(self.compress(merged_row))
        return new_grid

    def rotate_right(self, grid):
        return [list(row) for row in zip(*grid[::-1])]

    def rotate_left(self, grid):
        return [list(row) for row in zip(*grid)][::-1]

    def reverse_rows(self, grid):
        return [row[::-1] for row in grid]

    def is_game_over(self, grid):
        for i in range(GRID_SIZE):
            for j in range(GRID_SIZE):
                if grid[i][j] == 0:
                    return False
                if j + 1 < GRID_SIZE and grid[i][j] == grid[i][j + 1]:
                    return False
                if i + 1 < GRID_SIZE and grid[i][j] == grid[i + 1][j]:
                    return False
        return True

    def key_press(self, event):
        key = event.keysym
        if key in ["Up", "Down", "Left", "Right"]:
            if key == "Up":
                self.grid = self.move_left(self.rotate_left(self.grid))
                self.grid = self.rotate_right(self.grid)
            elif key == "Down":
                self.grid = self.move_left(self.rotate_right(self.grid))
                self.grid = self.rotate_left(self.grid)
            elif key == "Left":
                self.grid = self.move_left(self.grid)
            elif key == "Right":
                self.grid = self.move_left(self.reverse_rows(self.grid))
                self.grid = self.reverse_rows(self.grid)
            self.spawn_new_tile()
            self.update_ui()
            if self.is_game_over(self.grid):
                messagebox.showinfo("Game Over", "No more moves left!")

root = tk.Tk()
game = Game2048(root)
root.bind("<Key>", game.key_press)
root.mainloop()

数学タスク

Prompt

Think in English, Output in Japanese
直角三角形の脚の長さが3cmと4cmの場合、斜辺の長さを求めてください。

ChatGPT-4oモデルの回答はこちら

Kimi k1.5の回答はこちら

画像読み込みタスク

Prompt

Think in English, Output in Japanese

ChatGPT-4oモデルの回答はこちら

Kimi k1.5の回答はこちら

検証結果

コーディングタスクにおいては、ChatGPT-4oのほうが簡潔なコードに仕上がっており可読性も高いですが、処理の違いに起因するものかと思います。

ただ、数学タスク・画像読み込みタスクにおいては、ChatGPT-4o・Kimi k1.5ともに回答精度は同等に感じました。

まとめ

最後にKimi k1.5の特徴をまとめます。

  • GPT-4oやClaude Sonnet 3.5を上回る性能
  • コンテキストウィンドウが128,000まで拡張
  • 過去の対話を再利用することで、新しい対話をゼロから生成し直す必要がない
  • 強化学習の改善(オンラインミラー降下法、サンプリング戦略、ペナルティの最適化)
  • 段階的リリース中のため、機能反映に時間差が生じる可能性あり

DeepSeek-R1」に続いて「Kimi k1.5」と中国から続々とオープンソースのハイスペックモデルが公開されていますね。

今後の展開からも目が離せません!

最後に

いかがだったでしょうか?

Kimi k1.5の優れた推論能力と長文処理性能は、業務効率化や高度なデータ分析にも活用可能です。生成AIの導入を検討されている方は、ぜひ最適な活用方法を模索してみてください。

株式会社WEELは、自社・業務特化の効果が出るAIプロダクト開発が強みです!

開発実績として、

・新規事業室での「リサーチ」「分析」「事業計画検討」を70%自動化するAIエージェント
・社内お問い合わせの1次回答を自動化するRAG型のチャットボット
・過去事例や最新情報を加味して、10秒で記事のたたき台を作成できるAIプロダクト
・お客様からのメール対応の工数を80%削減したAIメール
・サーバーやAI PCを活用したオンプレでの生成AI活用
・生徒の感情や学習状況を踏まえ、勉強をアシストするAIアシスタント

などの開発実績がございます。

まずは、無料相談にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ
無料相談

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、サービス紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 晋平大竹

    生成AIの登場に大きな衝撃を受けたWebライター。好きなAIツールは、ChatGPTとAdobeFirefly。AIがこれからの世界を良い方向に導いてくれると信じ、正しい&有益な情報を発信し続けています!

  • URLをコピーしました!
  • URLをコピーしました!
目次