top of page

ICP Ninja & AIを使ったICP dapp開発の強化

  • 執筆者の写真: ICP Japan
    ICP Japan
  • 5月12日
  • 読了時間: 7分

この3部構成のシリーズでは、ICP Ninja — インターネットコンピュータ上でのアプリケーション開発とデプロイメントの方法を変革する革新的なウェブベースの開発環境を探ります。

この記事では、ICP NinjaのAIアシスタントに焦点を当て、コードの説明、修正、最適化を支援することで、どのように開発体験を向上させるかを紹介します。この強力なツールがどのように開発プロセスをスムーズにするか、初心者と経験豊富な開発者のための実践的な例を示します。

ICP Ninjaの概要については、「ICP Ninja: Your Dojo for the Internet Computer」記事をご覧ください。最新のプラットフォーム強化についての詳細は、最初の記事「ICP Ninja update: Coulomb Milestone unleashed」をご覧いただき、プロジェクト共有、認証オプション、クロスチェーン機能についてご確認ください。

今回は、ICP Ninjaに統合されたAIアシスタントがインターネットコンピュータ開発者にとって開発体験をどのように変革するかをご紹介します。この記事では、Coulombマイルストーンの一部として最近追加された強力なAI機能を探り、どのようにこのインテリジェントアシスタントがあなたの個人的なコーディングパートナーとして機能するかを示します。

ICP Ninjaとは?

ICP Ninjaは、ICP上でのdapp開発とデプロイを楽しく、迅速に、教育的に行えるように設計されたウェブベースの開発環境です。いくつかの例示プロジェクトから選ぶか、新しいプロジェクトを開始し、ウェブブラウザで直接dappの構築を始めることができます。

Coulombマイルストーンの一環として、ICP Ninjaに追加された新機能は以下の通りです:

  • 開発者の生産性向上: カニスターのログ、ライブプロジェクトのコンパイルログ、新しいコードエディターが開発者が他の人気IDEと似た環境でより生産的に作業できるようサポートします。

  • AI学習アシスタント: ICPのドキュメントと開発者リソースに特化してトレーニングされたAI学習アシスタントは、ICPに関する質問に答えたり、カニスターコードを説明したり、コードの修正や変更を行ったりします。

  • プロジェクト共有とエクスポート: 作成したプロジェクトを直接リンクで他の人に送信してコードを共有したり、GitHubリポジトリにエクスポートしたりできます。

  • インターネットアイデンティティまたはGitHubでのログインとプロジェクト保存: 好きなアカウントでログインして進行状況を保存し、どのデバイスからでも作業を再開できます。

ICP AI学習アシスタント

ICP Ninjaには、質問に答えたり、さらに学ぶためのリソースへのリンクを提供するだけでなく、個人的なコーディングアシスタントとして機能する新しいICP AI学習アシスタントが搭載されています。コードスニペットの変更、修正、説明を求めることができ、コードを改善して最適化し、プロジェクトがベストプラクティスを満たしていることを確認できます。

以下の「Counter dapp」例を見て、AIがどのように役立つかを確認してみましょう:

motoko

コピーする

actor Counter { stable var counter = 0; // Get the value of the counter. public query func get() : async Nat { return counter; }; // Set the value of the counter. public func set(n : Nat) : async () { counter := n; }; // Increment the value of the counter. public func inc() : async () { counter += 1; }; };

コードの説明

ICP Ninja内で、AIにインタラクションさせたいコードを右クリックし、「Ask AI — Explain」を選択します。この例の場合、AIは以下のような説明を返します:

  1. このコードは、Counterという名前のアクターを定義しています。Motokoでは、アクターはインターネットコンピュータにデプロイできるサービスを作成するために使用されます。

  2. stable var counter = 0; を宣言しています。stableキーワードは重要で、カニスターのアップグレードを超えてcounter変数の値が保持されることを保証します。これはMotokoの直交持続性機能である「Stable Variables」の例です。

  3. アクターは3つのpublic関数を定義しています:

    • get(): 現在のカウンターの値を返すクエリ関数です。public queryとしてマークされており、外部から呼び出すことができ、速い読み取りに最適化されています。

    • set(n : Nat): カウンターを指定した値nに設定する関数です。public update関数であり、アクターの状態を変更できます。

    • inc(): カウンターを1増加させる関数です。これもpublic update関数です。

stableキーワードを使うことで、カウンターの値がカニスターのアップグレードを超えて保持されることを保証しています。これにより、カニスターのコードを更新しても、カウンターの値が0にリセットされることはありません。

コードの修正

コードにエラーがある場合、例えばアクターが定義されていない場合など、AIに修正を求めることができます。「Ask AI — Fix」を選択すると、AIは適切にコンパイルされる修正済みバージョンを返し、変更点を説明します:

修正後、このコードはインターネットコンピュータ用の完全かつ機能的なカウンターアクターを定義しています。修正された内容は以下の通りです:

  1. コードは現在、actor Counter { ... }の宣言内に適切にラップされています。Motokoでは、アクターはインターネットコンピュータにデプロイできるサービスを作成するために使用されます。

  2. stable var counter = 0;の宣言は、アクター内に正しく配置されました。stableキーワードは、カウンター変数の値がカニスターのアップグレードを超えて保持されることを保証します。

  3. 3つのpublic関数(get、set、inc)は現在、アクター内に適切にカプセル化されています。

この修正後のバージョンは、インターネットコンピュータ上でコンパイルしてカニスターとしてデプロイできる完全なMotokoプログラムとなり、永続的なカウンター値の取得、設定、増加のためのシンプルなインターフェースを提供します。

コードの改善

AIにコードを改善してもらう際、コードはベストプラクティスに従って修正され、適用可能な最適化が行われます。最適化の例としては、速度やコストを最適化するために更新呼び出しをクエリ呼び出しに置き換えたり、コードを効率化するために複数の関数を一つにまとめたりすることがあります。

上記のカウンターの例では、AIが「Ask AI — Improve」オプションを選択した際に提案した改善点は以下の通りです:

改善点:

  1. 基本ライブラリからNatとErrorモジュールをインポートしました。

  2. inc()関数は新しいカウンター値を返すようになり、クライアントにとって便利です。

  3. dec()関数を追加し、カウンターを減少させる機能を実装しました。カウンターがすでにゼロの場合にはResult型を使用してエラーハンドリングを行います。

  4. reset()関数を追加し、カウンターをゼロにリセットする機能を実装しました。

  5. get()関数で明示的なreturn文を削除しました。Motokoでは、最後の式が暗黙的に返されるためです。

これらの改善により、カウンターはより機能的で堅牢になります。dec()関数でのResult型の使用は、Motokoでのエラーハンドリングのより慣用的な方法を示しています。

この改善版は、インターネットコンピュータのさまざまな例(カウンター例や永続的ストレージ例など)で見られるベストプラクティスに沿っており、より多くの機能とエラーハンドリングを追加しています。

コードの修正

最後に、AI学習アシスタントにコードを修正してもらうことができます。「Ask AI — Modify」を選択し、コードをどのように変更したいかを指定するプロンプトを入力します。例えば、「カウンターの初期値を100に設定し、カウンターを10ずつ増加させるようにコードを修正してください」と頼むことができます。AIは以下のように修正されたコードを返します:

motoko

コピーする

actor Counter { stable var counter : Nat = 100; // Get the value of the counter. public query func get() : async Nat { counter }; // Set the value of the counter. public func set(n : Nat) : async () { counter := n; }; // Increment the value of the counter by 10. public func inc() : async Nat { counter += 10; counter }; };

ICP Ninja AI例プロジェクト

AI学習アシスタントはICP NinjaにおけるAIの唯一のアプリケーションではありません。プラットフォームには新しい例プロジェクトとしてAIチャットボットが登場しました。この例では、Ollamaモデルを使用しており、自分のAIアプリケーションをカスタマイズして作成するための出発点を提供します。ボットの名前やアイコンをカスタマイズしたり、特定のプロンプトに対して指定した応答をプログラムしたりできます。

この例プロジェクトは、ICP上での分散型AI(DeAI)を示しています。カニスターのスマートコントラクトは、オンチェーンまたはオフチェーンで実行されている言語学習モデルと直接やり取りできます。ICPにホストされたAIアプリケーションは改竄不可能、検証可能、停止不可能です。オンチェーンでデプロイされた他のAI例には、顔認識サンプルや画像分類の例があります。

LLMチャットボットの例は、MotokoまたはRustで利用可能です。ぜひ、これを使って開発を開始してみてください。

開発を始める

ICP NinjaでICP dappの開発を始めるには、開発者ドキュメントをご覧いただくか、ICP上での分散型AIについて学んでください。

また、Coulombマイルストーンの詳細についてもご確認いただけます。

Commentaires


bottom of page