前言#
まず、Robot コミュニティの脚哥による MyShell 入門チュートリアル「MyShell ツールボット創作ガイド」をお勧めします。
教哥のこの入門チュートリアルは、MyShell プラットフォームでツールボットを作成するためのガイドを提供しています。MyShell は、ユーザーが無料で使用できるさまざまな AI 大モデルを提供する分散型生成 AI クリエイタープラットフォームです。著者は ChatGPT から MyShell に移行した経験を共有し、MyShell の利点を強調しています。これには、さまざまな AI 大モデルの無料使用、アカウント停止リスクの回避、ポイント報酬の獲得、コミュニティサポート、コスト削減が含まれます。記事では、効果的なプロンプトの書き方、キャラクターの定義、ルールとワークフロー、モデルの選択とプロンプトの強化についても説明しています。
さらに、脚哥は自分が作成したいくつかのツールボットを共有し、テスト、宣伝、将来の展望に関するアドバイスを提供しています。最後に、記事では Claude3 モデルのプロンプト作成のコツについて、XML タグの使用や入力変数のマークアップを含めて紹介しています。
私たちが MyShell を使用してキャラクターボットを作成する際、上記の内容を理解することで、概ね私たちのキャラクターを実現することができます。しかし、AI は多くのプロセスで制御できないため、ボットを構築する際には、ユーザーとのインタラクションプロセスを制御するためのプログラムロジックも必要です。
このように、正式に本文では Pro Config モードについて説明します。このモードは、プログラミングロジックと AI プロンプトロジックのインタラクションの柔軟な方法をバランスさせるものです。
Hello World#
最初の例#
Pro Config モードはプログラミングロジックに似ているため、ある程度のコーディング基礎があることを期待しています。そうすれば、Pro Config の記述 JSON にすぐに慣れ、開発を実現できます。
私たちは Coder の習慣に従い、迅速に Hello World の実践を行います。
{
"type": "automata",
"id": "hello_demo",
"initial": "home_page_state",
"inputs": {},
"outputs": {},
"transitions": {},
"states": {
"home_page_state": {
"inputs": {},
"tasks": [],
"outputs": {},
"render": {
"text": "Hello World! このデモへようこそ。'Start'をクリックしてチャットを開始してください!",
"buttons": [
{
"content": "Start",
"description": "クリックして開始。",
"on_click": "start_demo"
}
]
},
"transitions": {
"start_demo": "home_page_state"
}
}
}
}
上記の設定を Bot の開発者モードに入力すると、以下の効果が得られます:
次に、上記の JSON の意味を説明します:
- まず、この JSON の部分は自動機(Automata)を定義しています。Pro Config では、各自動機は JSON を使用して定義できます。
- この自動機では、ボットがどのような文言を出力するか、つまり
text
フィールドを定義しています。また、on_click
自動の中で、クリック後にどの状態に遷移するかを定義したボタンも定義しています。
これで、Pro Config モードの Hello World の例の作成が完了しました。
原子状態(AtomicState)と自動機(Automata)#
上記の Hello World の例では、自動機が何であるかを大まかに理解しました。要約すると、それはボットが異なる状態に入るのを制御するための抽象です。
次に、原子状態(AtomicState)の概念を紹介します。最も簡単な言葉で自動機との関係を説明すると、自動機は異なる原子状態を含むことができます。自動機が異なる状態間の切り替え関係を説明するためのものであれば、原子状態は特定の複雑な状態の抽象を説明するためのものです。
ここではこの概念を簡単に理解しておき、後の文で詳しく説明します。
もちろん、もっと知りたい場合は、MyShell の公式ドキュメントを直接見ることができます。
入力 / 出力の定義#
上記の Hello World の例では、私たちが使用したtext
フィールドとButton
フィールドを定義しましたが、他にもフィールドがあります。
次に、inputs
とoutputs
フィールドの役割を紹介します。
Talk is cheap、私たちは直接以下のコードを見てみましょう:
{
"type": "automata",
"id": "hello_demo",
"initial": "home_page_state",
"inputs": {},
"outputs": {},
"transitions": {},
"states": {
"home_page_state": {
"inputs": {
"intro_message": {
"type": "text",
"user_input": true,
"default_value": "こんにちは、これはあなたのPro Configチュートリアルボットです"
},
"tts_widget_url": {
"type": "text",
"user_input": true,
"default_value": "https://app.myshell.ai/widget/mEjUNr"
}
},
"tasks": [],
"outputs": {
"intro_message": "{{intro_message}}",
"voice_id": "{{tts_widget_url}}"
},
"render": {
"text": "Hello Word! このデモへようこそ。'Start'をクリックしてチャットを開始してください!",
"buttons": [
{
"content": "Start",
"description": "クリックして開始。",
"on_click": "start_demo"
}
]
},
"transitions": {
"start_demo": "home_page_state"
}
}
}
}
このコードを以前の Hello World のコードに直接上書きすると、ユーザーが Start ボタンをクリックした後、インタラクティブなフォームがポップアップします:
このフォームは、上記のコードを通じて実現された効果です。部分的な重要なコードの意味を解読してみましょう:
- inputs:ここでは
intro_message
とtts_widget_url
の 2 つのフィールドを設定しています。これは、Input の 2 つのテキストボックスのタイトルであり、type
フィールドはtext
で、これはテキストボックスを示し、user_input
はユーザー入力が必要かどうかを示し、default_value
はデフォルト値です。
このように設定すると、ユーザーが入力を完了し、保存をクリックすると、入力値がintro_message
とtts_widget_url
の 2 つの変数として保存され、他の表現で変数表現{{<variable>}}
を使用して参照できます。
- outputs:この変数は、ユーザーが表現を完了した後、私たちのテキストテンプレートに従ってボットに発信される会話内容です。こんな感じです:
上記で述べたように、{{<variable>}}
の形式で構築した変数を参照できるため、他には特に難しいことはなく、すぐに理解できると思います。
MyShell 公式では、ダブルブレース
{{expression}}
を使用して式を包み、出力変数の値をそれに割り当てます。この式は JavaScript 言語で記述され、ECMAScript 5.1 標準に従う必要があります。MyShell は現在このバージョンのみをサポートしています。
ワークフローの構築(Workflow)#
チャットボットの作成#
Pro Config では、ワークフロー(Workflow)を使用して複数のモジュールを接続し、処理する必要があるイベントを完了できます。以下では、チャットボットの例を用いてワークフローの使用方法を説明します。
{
"type": "automata",
"id": "chat_demo",
"initial": "chat_page_state",
"inputs": {},
"outputs": {},
"transitions": {},
"states": {
"chat_page_state": {
"inputs": {
"user_message": {
"type": "IM",
"user_input": true
}
},
"tasks": [
{
"name": "generate_reply",
"module_type": "AnyWidgetModule",
"module_config": {
"widget_id": "1744214024104448000",
"system_prompt": "あなたはPro Configを教える教師です。",
"user_prompt": "{{user_message}}",
"output_name": "reply"
}
},
{
"name": "generate_voice",
"module_type": "AnyWidgetModule",
"module_config": {
"content": "{{reply}}",
"widget_id": "1743159010695057408",
"output_name": "reply_voice"
}
}
],
"render": {
"text": "{{reply}}",
"audio": "{{reply_voice}}"
},
"transitions": {
"CHAT": "chat_page_state"
}
}
}
}
このコードは、Pro Config Teacher キャラクターを実現します。
ワークフローの解析#
各モジュールの意味を一つずつ説明します:
"inputs": {
"user_message": {
"type": "IM",
"user_input": true
}
}
inputsモジュールでは、type
をIM
と定義しています。これはインスタントメッセージタイプです。このタイプは、ボットがボットに送信されたメッセージ形式の入力を受け入れることができることを示しています。
"transitions": {
"CHAT": "chat_page_state"
}
次に、状態遷移の定義transitions
を見てみましょう。ここでは、イベントCHAT
を上文で定義したchat_page_state
に直接設定しています。これは、ユーザーがチャット中にメッセージを送信すると、状態が再評価され、送信されたメッセージがこの状態に入力として渡されることを意味します。その後、user_message
がtask
に渡されます。
"tasks": [
{
"name": "generate_reply",
"module_type": "AnyWidgetModule",
"module_config": {
"widget_id": "1744214024104448000",
"system_prompt": "あなたはPro Configを教える教師です。",
"user_prompt": "{{user_message}}",
"output_name": "reply"
}
},
{
"name": "generate_voice",
"module_type": "AnyWidgetModule",
"module_config": {
"content": "{{reply}}",
"widget_id": "1743159010695057408",
"output_name": "reply_voice"
}
}
]
次に、tasks
部分を見てみましょう。この部分には、実行待ちの複数のmodule
が含まれています。各module
について、module_type
とmodule_config
を指定する必要があります。name
はオプションであり、必須フィールドではありません。
デモのために、最初のタスクでは、事前に設定されたプロンプト - "あなたはPro Configを教える教師です。"
を与え、このプロンプトをボットに渡してその役割を指定します。
2 つ目のタスクでは、返信の音声を発信したいと考えています。この時、MyShell の TSS ウィジェットを使用して音声返信を設定できます。もし他に好みの TSS 音声があれば、MyShell のワークショップで探し、widget_id
を通じて導入すれば使用できます。
ここでは、返信に使用する 2 種類のモジュールを簡単に紹介しました。イベント処理のモジュールに興味がある場合は、公式ドキュメントを訪れて、モジュールを研究してください。
2 つのタスクが実行された後、私たちの定義に従って、2 つの変数reply
とreply_voice
が生成され、準備が整ったら、以下の定義でユーザーに提示されます:
"render": {
"text": "{{reply}}",
"audio": "{{reply_voice}}"
}
全体のプロセスの中で、実際にはボットが「ブラックボックス」イベント - CHAT
の特別なイベントをデフォルトで処理していることに注意してください。この特別なイベントが実行されることで、私たちのルールに従ってchat_page_state
に移行し、対応するタスクを実行することができます。
この例を通じて、Pro Config のボットの大まかなワークフローを理解できたと思います。このことを学べば、自分のボットを作成し、基本的な処理フレームワークを実現できるようになります。
まとめ#
この記事を通じて、MyShell プラットフォームにおける Pro Config モードの基本概念と応用方法を理解しました。Hello World の例とチャットボットの例を通じて、Pro Config モードの自動機(Automata)と原子状態(AtomicState)を使用してボットが異なる状態に入るのを制御し、ユーザーの入力と出力を処理する方法を示しました。これらの例を通じて、Pro Config モードを迅速に習得し、その動作原理を深く理解することができます。
次回は、transitions
、式と変数の具体的な使用方法、他のウィジェットの統合方法など、いくつかの詳細フィールドについて引き続き議論します。共に頑張りましょう。
参考文献#
また、より多くの開発者が MyShell のボット市場の共同構築に参加することを希望しています。招待のリンクこちらをクリック。今後、さらに多くのエアドロップイベントがあなたを待っています。