【Codestral-22B】Mistral AI発コーディングAI!80言語以上に対応!
2024年5月29日、Mistral AIが自社初のコーディング用生成AIモデルである「Codestral」を発表しました。Codestralのパラメータモデルは220億、3万2000トークンのコンテキストウィンドウを持っており80以上のプログラミング言語に対応しているので、コーディングやバグ・エラー解消のサポートに役立つことでしょう!
また、Codestralを使って作成されたアプリケーションはX(旧Twitter)で7万回以上も表示されており、非常にたくさんの注目を集めています!
この記事では、Mistral AI Codestral-22B-v0.1のgoogle colaboratoryでの導入方法や実際に使ってみた使用感をお伝えします。
本記事を最後まで読むことで、google colaboratoryでMistral AI Codestral-22B-v0.1を使用することができるようになります。ぜひ最後まで目を通してコーディングのレベルアップを目指しましょう。
Mistral AI Codestral-22B-v0.1の概要
Mistral AI Codestral-22B-v0.1は2024年5月29日にリリースされた、コーディング用生成AIモデルです。
Codestral-22B-v0.1モデルは、220億のパラメータモデル、3万2000トークンのコンテキストウィンドウを持っており、80以上のプログラミング言語に対応しておりC言語やPython、Javaといった人気のプログラミング言語以外にもSwiftやFortranといった言語にまで対応しています。
Codestral-22B-v0.1モデルをリリースした、Mistral AI社はOpenAIに対抗しうるフランスにあるスタートアップ会社。ユーザーに合わせて複数のAIモデルをリリースしており、商用利用可能モデルや非商用モデルなどの開発を行っています。
Mistral AI Codestral-22B-v0.1のパフォーマンス
Codestral-22B-v0.1モデルのパフォーマンスを競合モデルと比較した結果、コーディング自動補完システムを評価するRepoBenchベンチマークで特に優れたパフォーマンスを発揮しています。
HumanEvalは、複数のプログラミング言語に対応しており、異なるプログラミング言語間でのモデル性能の比較が可能です。コーディングの正確性や効率性などの基準を設けており、基準に沿って、各プログラミング言語における正確なコーディング自動補完を評価。
例えば、HumanEval Pythonでは、Codestral-22B-v0.1モデルを使用した場合の正確性は81.1%であり競合モデルであるCodeLlama 70Bの正確性は67.1%です。Python以外にも正確性が算出されており、表の一番右側が平均正確性です。平均正確性が高いほど複数のプログラミング言語に対応していると理解するのがいいでしょう。
また、競合モデルとのFill-in-the-middle(FIM)性能を比較した結果が次の表。FIM性能はテキスト生成の一種で、与えられたテキストに基づいて、テキストが不足している部分の生成を行う技術です。
FIM性能が高いと、エンジニアがコーディングしたコードの一部を理解して、より正確にコーディング補完が実施されます。
下の表はPythonとJavaScript、JavaのFIM性能を評価しており、Codestral-22B-v0.1モデルがDeepSeek Coder 33Bよりも高いFIM性能を示しており、特にJavaScriptで性能が良いことがわかります。
なお、コーディング用生成AIについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
Mistral AI Codestral-22B-v0.1のライセンス
Codestral-22B-v0.1モデルはMNLP-0.1ライセンスでリリースされています。MNLP-0.1ライセンスでは改変や配布、私的使用が可能となっていますが、非商用目的もしくは研究目的でのみ可能です。
利用用途 | 可否 |
---|---|
商用利用 | ❌ |
改変 | ⭕️ |
配布 | ⭕️ |
特許使用 | 不明(明記なし) |
私的使用 | ⭕️ |
Mistral AI Codestral-22B-v0.1の使い方
CodestralのデモコードはMistral AIに公開されているので、それを参考にgoogle colaboratoryで実行します。
本記事で紹介するデモコードは、コード補完とテキスト生成、チャットを使用したコード生成です。
HuggingFaceにもデモコードが記載されていますが、より詳しく解説されているのがMistral AIだったのでそちらのコードを使用します。
参考記事:https://huggingface.co/mistralai/Codestral-22B-v0.1
Mistral AIでAPI Key設定
Codestralを使用するためには、Mistral AIでAPI Keyを取得する必要があります。
まずは、Mistral AIにアクセスして、サインインをしましょう。
Log inボタンをクリックするとログイン画面に遷移するので、すでにアカウントを作成している方は、上記2種類のいずれかでログインをします。
まだアカウントを作成していない方は、ページ下部のsing upをクリックしてアカウント登録をしましょう。
Sign upページは以下のようになっています。
Sign upがうまくいくと画像のページに移るため、WorkSpaceの名前を設定し、「I’m a solo creator」と「I accept the Mistral AI Terms of Service and Privacy Policy.」にチェックを入れて、「Create Workspace」をクリックすれば完了です。
Workspaceの作成が終了すると、以下のページに遷移するので、「Active my trail」をクリック後に電話番号を入力、送信されてきたパスキーを入力することで5ドル分のクレジットをもらうことができAPI Keyの作成が可能になります。
ページ左部の「API Keys」をクリックして、API Keyを作成していきましょう。
Key nameは任意の名前を入力し、Expirationは入力しなくても大丈夫です。入力が完了したら「Create Key」をクリックして、APIキー作成が完了します。
Codestral-22B-v0.1の使用
ここまででCodeStral-22B-v0.1を使うための準備が終了しました。
ここからは実際にgoogle colaboratoryを使ってCodeStral-22B-v0.1を実装します。
!pip install transformers huggingface_hub torch accelerate
!pip install mistralai
ここまではコード補完とテキスト生成、チャットを使用したコード生成いずれも共通です。
Mistral AI Codestral-22B-v0.1を動かすのに必要な動作環境
Codestral-22B-v0.1を実装した際のgoogle colaboratoryの動作環境情報です。
■Pythonのバージョン:Python 3.8以上
■使用ディスク量:29.9GB
■RAMの使用量:4.0GB
Mistral AI Codestral-22B-v0.1を実際に使ってみた
Codestral-22B-v0.1を使って、コード補完・チャットを使ったコード生成・テキスト生成を実装します。
CodeStral-22B-v0.1を使ったコード補完
まずはコード補完です。Mistral AIのドキュメントに記載されているコードでは、フィボナッチ数列を生成する関数を作成しています。
今回は、フィボナッチ数列の関数ではなく、ダイクストラのアルゴリズムを作成するための入力プロンプトにします。
「prompt」に関数名を入力すると、そこからコード内容を予測してコード補完を実行します。
コード補完のコードはこちら
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
os.environ["MISTRAL_API_KEY"] = "Your_API_key"
api_key = os.environ["MISTRAL_API_KEY"]
client = MistralClient(api_key=api_key)
model = "codestral-latest"
prompt = "def dijkstra(graph, start):"
suffix = "n = int(input('Enter a number: '))\nprint(dijkstra(n))"
response = client.completion(
model=model,
prompt=prompt,
suffix=suffix,
)
print(f"{prompt}\n{response.choices[0].message.content}\n{suffix}")
生成されたコードがこちら
コード補完の結果はこちら
def dijkstra(graph, start):
distances = {node: float('infinity') for node in graph}
distances[start] = 0
unvisited = set(graph)
while unvisited:
current_node = min(unvisited, key=lambda node: distances[node])
unvisited.remove(current_node)
for neighbor, weight in graph[current_node].items():
distance = distances[current_node] + weight
if distance < distances[neighbor]:
distances[neighbor] = distance
return distances
# Example usage:
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 5},
'C': {'A': 4, 'B': 2, 'D': 1},
'D': {'B': 5, 'C': 1}
}
start_node = 'A'
result = dijkstra(graph, start_node)
print(f"Shortest distances from node {start_node}: {result}")
n = int(input('Enter a number: '))
print(dijkstra(n))
参考記事:https://docs.mistral.ai/capabilities/code_generation/
CodeStral-22B-v0.1のチャットを使ったコード生成
次にチャットを利用したコード生成です。
チャットでは自分の開発したい内容を「messages」の「coment」に入力をします。
今回は「Pythonで簡単なアプリケーションを作成したいのですが、アプリケーションを作成するコードを教えてください。」という内容を英語で入力しています。
チャットを使ったコード生成のコードはこちら
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
os.environ["MISTRAL_API_KEY"] = "Your_API_key"
api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-large-latest"
client = MistralClient(api_key=api_key)
chat_response = client.chat(
model=model,
messages=[ChatMessage(role="user", content="I want to create a simple application in Python, provide code to create a recommended application.")]
)
print(chat_response.choices[0].message.content)
作成されたコードがこちら
チャットを使ったコード生成の結果はこちら
class Task:
def __init__(self, description):
self.description = description
self.completed = False
def complete(self):
self.completed = True
class TaskList:
def __init__(self):
self.tasks = []
def add_task(self, description):
task = Task(description)
self.tasks.append(task)
def view_tasks(self):
for index, task in enumerate(self.tasks):
status = '[x]' if task.completed else '[ ]'
print(f'{index}. {status} {task.description}')
def delete_task(self, index):
del self.tasks[index]
def main():
task_list = TaskList()
while True:
print('\nTask List Application')
print('1. Add task')
print('2. View tasks')
print('3. Delete task')
print('4. Quit')
choice = input('Choose an option: ')
if choice == '1':
description = input('Enter task description: ')
task_list.add_task(description)
elif choice == '2':
task_list.view_tasks()
elif choice == '3':
index = int(input('Enter task index to delete: '))
task_list.delete_task(index)
elif choice == '4':
break
else:
print('Invalid option. Please try again.')
if __name__ == '__main__':
main()
実際に実行しましたがエラーなくスムーズに使用することができました。
参考記事:https://docs.mistral.ai/getting-started/clients/
CodeStral-22B-v0.1を使ったテキスト生成
最後にテキスト生成を行います。こちらは「フランスで一番おいしいチーズは?」という内容を英語で送信しています。
テキスト生成のコードはこちら
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
os.environ["MISTRAL_API_KEY"] = "Your_API_Key"
api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-large-latest"
client = MistralClient(api_key=api_key)
chat_response = client.chat(
model=model,
messages=[ChatMessage(role="user", content="What is the best French cheese?")]
)
print(chat_response.choices[0].message.content)
生成されたテキストがこちらです。
テキスト生成の結果はこちら
The "best" French cheese can be subjective as it depends on personal taste preferences. However, some of the most popular and renowned French cheeses include:
1. Brie: Often referred to as "The Queen of Cheeses," Brie is a soft cheese with a bloomy rind. It's known for its creamy texture and mild, slightly sweet flavor.
2. Camembert: Similar to Brie, Camembert is a soft cheese with a bloomy rind. However, it has a stronger, earthier flavor.
3. Roquefort: This is a blue cheese made from sheep's milk. It's known for its tangy, slightly salty flavor and crumbly texture.
4. Comté: A hard cheese made from unpasteurized cow's milk, Comté has a complex flavor with nutty, brown-butter, and fruity notes.
5. Chèvre: This is a general term for French cheeses made from goat's milk. They can range in texture from soft and spreadable to firm, with a tangy, slightly sweet flavor.
参考記事:https://docs.mistral.ai/capabilities/completion/
なお、Googleのコーディングタスクに特化したLLMについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
Mistral AI Codestral-22B-v0.1とGPT-4oの実行速度を比較してみた
今回はCodestral-22Bを使うことで開発時間と労力を節約できるのか検証するために、ChatGPT-4oを使って比較します。使用したプロンプトは以下です。
「Create simple task application for Python.」
和訳:
Python用のシンプルなタスクアプリケーションを作成する。
Codestral-22B-v0.1のコードはこちら
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
os.environ["MISTRAL_API_KEY"] = "Your_API_key"
api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-large-latest"
client = MistralClient(api_key=api_key)
chat_response = client.chat(
model=model,
messages=[ChatMessage(role="user", content="create simple task application for Python.")]
)
print(chat_response.choices[0].message.content)
Codestral-22B-v0.1の結果はこちら
class Task:
def __init__(self, task_list=[]):
self.task_list = task_list
def add_task(self, task):
self.task_list.append(task)
return self.task_list
def view_tasks(self):
for index, task in enumerate(self.task_list, start=1):
print(f"{index}. {task}")
def delete_task(self, task_number):
try:
del self.task_list[task_number - 1]
return self.task_list
except IndexError:
print("Invalid task number.")
def main():
my_tasks = Task()
while True:
print("\n1. Add Task\n2. View Tasks\n3. Delete Task\n4. Quit")
user_choice = input("Enter your choice: ")
if user_choice == "1":
task = input("Enter the task: ")
my_tasks.add_task(task)
elif user_choice == "2":
if not my_tasks.task_list:
print("No tasks to display.")
else:
my_tasks.view_tasks()
elif user_choice == "3":
if not my_tasks.task_list:
print("No tasks to delete.")
else:
task_number = int(input("Enter the task number to delete: "))
my_tasks.delete_task(task_number)
elif user_choice == "4":
break
else:
print("Invalid choice. Please try again.")
if __name__ == "__main__":
main()
ChatGPT-4oの結果はこちら
import sqlite3
# Connect to the SQLite database
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
# Create a table for tasks
c.execute('''CREATE TABLE IF NOT EXISTS tasks
(id INTEGER PRIMARY KEY, task TEXT, status TEXT)''')
conn.commit()
conn.close()
import sqlite3
def add_task(task):
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute("INSERT INTO tasks (task, status) VALUES (?, ?)", (task, 'incomplete'))
conn.commit()
conn.close()
print("Task added!")
def view_tasks():
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute("SELECT * FROM tasks")
tasks = c.fetchall()
conn.close()
return tasks
def complete_task(task_id):
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute("UPDATE tasks SET status = ? WHERE id = ?", ('complete', task_id))
conn.commit()
conn.close()
print("Task marked as complete!")
def delete_task(task_id):
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute("DELETE FROM tasks WHERE id = ?", (task_id,))
conn.commit()
conn.close()
print("Task deleted!")
def main():
while True:
print("\nTask Management System")
print("1. Add Task")
print("2. View Tasks")
print("3. Complete Task")
print("4. Delete Task")
print("5. Exit")
choice = input("Enter your choice: ")
if choice == '1':
task = input("Enter task: ")
add_task(task)
elif choice == '2':
tasks = view_tasks()
for task in tasks:
print(f"{task[0]}. {task[1]} - {task[2]}")
elif choice == '3':
task_id = int(input("Enter task ID to complete: "))
complete_task(task_id)
elif choice == '4':
task_id = int(input("Enter task ID to delete: "))
delete_task(task_id)
elif choice == '5':
print("Exiting...")
break
else:
print("Invalid choice! Please try again.")
if __name__ == "__main__":
main()
どちらも同じプロンプトで実行をしていますが、Codestral-22Bの方がより簡潔なコーディングになっています。
生成時間については、Codestralが10秒に対してChatGPT-4oは16秒という結果だったので、開発時間・労力の節約はCodestralを使うことで可能です。
なお、コーディングなしでアプリを作る方法について詳しく知りたい方は、下記の記事を合わせてご確認ください。
まとめ
本記事では、Mistral AI Codestral-22B-v0.1をgoogle colaboratoryで使う方法を解説しましたが、GPUを使用しないのでどなたでも気軽に利用できます。
コーディング用生成AIはいくつもリリースされていますが、Codestral-22B-v0.1ほど正確で時間と労力の節約ができる生成AIはこれまでなかったのではないでしょうか。
将来的には日本語にも対応することで、コーディング用生成AIが身近になり、多くの人がプログラミングを始めるようになるかもしれませんね。
WEELの生成AIへのスタンス
ChatGPTやStable Diffusionなど使い勝手の良いAIサービスは沢山あります。そういったもの1度使ってみて、もっとこうしたい、こう言った使い方をしたいと言った方に向けてカスタマイズを勧めております。
もし、自社で生成AIを活用したいという場合は
1. 汎用的な生成AIツールを導入し、定着させる
2. 業務を生成AIに解けるタスクまで分解し、自動化する
のどちらかが良いと思います。
弊社では
1の場合、生成AIセミナーの実施や生成AIコンサルティングなどで、AI専門家による生成AI活用指導
2の場合、PoC開発やソリューション開発などで、LLMエンジニアやAIコンサルタントが御社にあったAIツールの開発を行います。
無料相談にてご相談を承っておりますので、興味がある方は以下からご連絡ください。
→無料相談で話してみる
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、通勤時間に読めるメルマガを配信しています。
最新のAI情報を日本最速で受け取りたい方は、以下からご登録ください。
また、弊社紹介資料もご用意しておりますので、併せてご確認ください。