本ドキュメントはDialBBのノーコードツール(DialBB-NC)のドキュメントです.
Windows11,MacOSで動作します.
もし,すでにPythonがインストールされていれば,バージョンを確かめてください.インストールされているかどうかの確かめ方やバージョンの確かめ方はそのうち記述します.インストールされていても,バージョンが3.10-3.12であれば,新しくインストールする必要はありません.3.9以前のPythonがインストールされている場合,使っていないならアンインストールしてください.使っている場合,DialBBの開発者(dialbb あっと c4a.jp)に相談してください.
Windows 11
Pythonがインストールされていない場合,以下の手順でPythonをインストールします.
ブラウザのアドレスバーに https://www.python.org/downloads/windows/ を打ち込んでEnterキーを押します.
表示されている中から以下の部分を探します.以下は3.10.11ですが,3.10.x-3.12.xであれば,別のバージョンでも構いません.

64bit OSの場合は,Windows installer (64-bit)を,32bit OSの場合はWindows installer (32 -bit)をクリックします.
「ダウンロード」フォルダに python-3.10.11-amd64.exeまたはpython-3.10.11-amd32.exeというファイルができるので,ダブルクリックします.
以下の画面が現れます.

Add python.exe to PATHにチェックを入れてからInstall Nowをクリックします.

Pythonがインストールされます.
必要なファイルを以下の手順でダウンロードします.
ブラウザから https://c4a-ri.github.io/dialbb/files/dialbb-setup.zip にアクセスします.
ダウンロードフォルダにdialbbファイルがダウンロードされます.エクスプローラでダウンロードフォルダを開いて確認してください.以下のようなファイルができているはずです.
![]()
このようにチャックの模様があるものをzipファイルと呼びます.環境によっては,dialbb-setup.zipという名前で表示されます.
複数回ダウンロードすると,新しくダウンロードしたものはdialbb-setup(1)のような名前になるので,その場合,ダウンロードフォルダのdialbb-setupを削除してからもう一度ダウンロードしてください.
エクスプローラでdialbb-setupアイコンの上にカーソルを持っていき右クリックし,「すべて展開」を選びます.出てきた画面で,「展開」を押してください.dialbb-setupフォルダができるので,それを開いてください.
install(環境によってはinstall.bat)をダブルクリックします.DialBBがインストールされます.
「WindowsによってPCが保護されました」と出るかもしれません.その場合,「詳細情報」をクリックすると,「実行」ボタンが出てくるので,それを押してください.
Press any key to continue . . .と表示されたらインストールは完了なので,何かキーを押して終了してください.
必要なファイルを以下の要領でダウンロードします.
ブラウザでのアドレスバーに https://github.com/c4a-ri/dialbb-scenario-editor/blob/main/docs/files/DialBB_Scenario_Editor-installer-1.1.0-win.exe を打ち込んでEnterキーを押します.
遷移したページの右側の下向き矢印をクリックします.
ダウンロードフォルダにDialBB_Scenario_Editor-installer-1.0.0-win.exeという名前のアプリのインストーラーがダウンロードされます.
エクスプローラでこのインストーラーをダブルクリックします.
「WindowsによってPCが保護されました」と出るかもしれません.その場合,「詳細情報」をクリックすると,「実行」ボタンが出てくるので,それを押してください.
ダイアログが表示されたら
dialbb-setupフォルダ内でstart-dialbb-nc(またはstart-dialbb-nc.bat)をダブルクリックします.
正常に起動するとメイン画面が表示されます.

Windowsの場合と同様,Python3.10-3.12がインストールされていれば,新たにインストールする必要はありません.
Pythonがインストールされていない場合,以下の手順でインストールしてください.
Pythonの公式ダウンロードサイトにアクセスしてください.
適当なバージョン(例:3.10.11)の下の,macOS 64-bit universal2 installerをクリックし,ファイルをダウンロードします.
ダウンロードした .pkg ファイルを開いて,画面に表示される指示に従いインストールを進めてください.
https://c4a-ri.github.io/dialbb/files/dialbb-setup.zip からdialbb-setup.zipファイルをダウンロードします.Downloadフォルダにダウンロードされます.ターミナルを開きます.適当なディレクトリ(DialBBディレクトリと呼びます)を作って移動してください.
そこで,
xxxxxxxxxxunzip ~/Downloads/dialbb-setup.zippip install --force-reinstall *.whlとしてください.DialBBがインストールされます.
ブラウザからhttps://drive.google.com/file/d/1ebLGkBhH-OA4vW0vxOZb-wdSucgnmqYw/view?usp=drive_linkにアクセスして,pkgファイルをダウンロードします.ダブルクリックしてインストールしてください.セキュリティの関係でインストールがうまくいかないことがあります.その場合,DialBBの開発者にお気軽に連絡ください.
ターミナルで以下を実行します.(ディレクトリはどこでも構いません)
xxxxxxxxxxdialbb-ncMacの場合少し画面が乱れます.(修正予定)
すでにあるアプリケーションを読み込む場合は,選択ボタンをクリックし,読み込むアプリケーションのzipファイルを選択し,読み込みを押します.

アプリケーションを新たに作成する場合は,新規作成ボタンをクリックし,言語を選択します.テンプレートアプリケーションファイルが読み込まれます.

その時点で読み込まれているアプリケーションの名前(zipファイルの名前)がメイン画面のCurrent applicationのところに表示されます.
書き出しボタンをクリックし,保存する場所/ファイル名を指定します,zipファイルにまとめて保存されます.

最初にDialBB-NCを使うときや,DialBBのインストールをし直した後には,OpenAIのAPIキーの登録が必要です.OpenAIのAPIキーの登録は以下のようにします.
設定ボタンを押しますと設定画面が出ます.
OPENAI_API_KEYの右側に別途入手したOpenAIのAPIキーを入力し,OKボタンを押します.保存しましたという表示が出るので再度OKボタンを押します.OpenAIのAPIキーの入手方法は別途「OpenAI API キー」などで検索して調べてください(少額ですが有料です).
入力したAPIキーは暗号化して保存されますが,DialBBのプログラムがあれば復号できるので,個人用PC以外では保存しないようにしてください.消去する場合には,OPENAI_API_KEYに他の文字列をセットするか,DialBBをアンインストールしてください.
対話開始ボタンを押すと対話ができます.ユーザ入力フィールドに発話を入力して対話をしてください.

Webサーバとしてアプリケーションを動かし,他のプログラムと連携させたりできます.
起動ボタンをクリックします.アプリケーションサーバが起動します.
ChromeやEdgeなどのブラウザを開き,アドレスバーにhttp://localhost:8080/を打ち込んでEnterを押します.以下のようなチャット画面が表示されます.

start dialogueボタンを押すと会話が開始されます.
再度最初から会話を始めたい場合はブラウザのリロードボタンを押してください.
http://localhost:8080/testにアクセスするとシンプルな画面が出ます.(対話のログのコピペがしやすいです)
メインGUIでstopボタンを押すとアプリケーションサーバが停止します.
ブラウザからアクセスしても画面が出ない場合や対話がうまくいかない場合は,ログ表示ボタンを押し,ログを見て近くのエンジニアかDialBB開発者に相談してください.
ログはホームフォルダ(ホームディレクトリ)の中の.dialbb_nc_logsフォルダの中に書きだされます.
ホームフォルダは,Windowsの場合,C:\Users\<ユーザ名>です.
ログは日付毎にフォルダにまとまっています.
ログファイルは<アプリケーションが起動した時間>.txtです.
dialbb-setupフォルダの中にある,uninstallというアイコンをダブルクリックするとDialBBがアンインストールできます.
コンフィギュレーションボタンを押すと,以下の画面が表示されます.

以下が各編集項目の説明です.
| 編集項目 | 説明 |
|---|---|
| 固有表現抽出を行いますか? | 固有表現抽出(後述)を行うかどうかを選択します.(上級用) |
| 言語理解を行いますか? | 言語理解(後述)を行うかどうかを選択します.(上級用) |
| モデル | 利用するChatGPTのモデルを選択します.その他を押すと,プルダウンにないモデルを追加できます. |
| 状況 | GPTのプロンプトに書く状況を入力します,1行ごとに状況を記述します. |
| ペルソナ | GPTのプロンプトに書くシステムのペルソナを入力します,1行ごとにペルソナを記述します. |
以下の説明では少し図が古いですが,大きくは変わりません.
シナリオ編集ボタンを押すと,シナリオエディタが表示されます.
シナリオは,システムノードとユーザノードがリンクで接続されたものです.システムノードではシステム発話を記述し,ユーザノードでは,遷移の条件を記述します.priorityの値が高い順に遷移の条件を調べていき,条件が満たされれば,その次のシステムノードに遷移します.どのユーザノードの遷移の条件も満たされない場合,同じシステムノードに戻って,システム発話が生成されます.
システムノードは複数のユーザにリンクが出て行き,ユーザノードからは一つだけのノードにリンクが出て行きます.(toが出口,fromが入口です)
システム発話や遷移の条件の記述については,後で説明します.

背景で右クリック し,システムノード追加かユーザノード追加を選択するとシステムノードかユーザノードが新規追加されます.

ノードの上で右クリック し,削除を選択するとそのノードが削除されます.

ノードの上で右クリック し,編集を選択すると,ノードの編集画面が表示されます.

ノードの編集の仕方は後述します.
ノードのtoを左クリック し,他ノードのfromへドラッグして接続します.
削除はfromをつまんで離すか,リンク上で右クリックして削除を選択します.

変更を戻すときにはコントロールキーを押しながらzを押してください.
上部のSaveボタンをクリックすると保存します.保存しないでエディタサーバを停止した場合はデータが失われます.
システムノードを右クリックすると以下のような入力ダイアログが表示されますので,中身を書き換えてSaveボタンを押します.Closeボタンを押すと保存せずに閉じます.
typeは以下のどれかです.
| type | 説明 |
|---|---|
| initial | 対話の最初のシステム発話を記述します.シナリオの中で,typeがinitialであるシステムノードは一つだけ存在しなくてはなりません. |
| final | このノードに来たら,システム発話を生成して対話を終了します.typeがfinalであるシステムノードはいくつあっても構いません. |
| error | 内部エラーが起きたときにこのノードに移行し,システム発話を生成して終了します.別のノードとつながっていてはいけません. |
| other | その他のシステムノードです. |
utteranceには,システム発話を書きます.システム発話の中に以下のようなものを書けます.
$<インストラクション>$
ChatGPTにインストラクションを与えて発話を生成させます.このとき,コンフィギュレーションで指定したsituationとpersonaが用いられます.
例: $感想を言う発話を20字以内で生成してください.$ところで,最近の体調はいかがですか?
$$$<プロンプトテンプレート>$$$
ChatGPTにプロンプトを与えて発話を生成させます.プロンプトはプロンプトテンプレートから作られます.プロンプトテンプレートは改行を含んでも構いません.以下が例です.
xxxxxxxxxx$$$# 状況{situation}# あなたのペルソナ{persona}# 現在までの対話{dialogue_history}# タスクそれまでの会話につづけて,対話を終わらせる発話を50文字以内で生成してください.$$$
{と}で囲まれている部分はプレースホルダです.
利用できるプレースホルダ
{dialogue_history}
その時点までの対話(最新のユーザ発話を含む)で置き換えられます.
{situation}
コンフィギュレーションで指定した「状況」で置き換えられます.
{persona}
コンフィギュレーションで指定した「あなたのペルソナ」で置き換えられます.
{current_time}
対話の行われている時点の年月日,曜日,時分秒を表す文字列で置き換えられます.
#<言語理解のスロット名> (上級用)
直前のユーザ発話の言語理解で得られたスロットの値で置き換えられます.{#好きなラーメン}なら,好きなラーメンスロットの値で置き換えられます.
例:{#好きなラーメン}がお好きなんですね!
スロットが空の場合,空文字列になります.スロットが空でないときだけ,このノードに来るように,ユーザノードで設定する必要があります.
言語理解については後で説明します.
#<NE_固有表現のクラス>(上級用)
固有表現抽出の結果で置き換えられます.{#NE_人名}なら,直前のユーザ発話の固有表現抽出の結果得られた人名クラスの固有表現が用いられます.
例:こんにちは,{#NE_人名}さん
固有表現が抽出できなかった場合,空文字列になります.スロットが空でないときだけ,このノードに来るように,ユーザノードで設定する必要があります.
固有表現抽出については後で説明します.
ユーザノードを右クリックすると以下のような入力ダイアログが表示されますので,中身を書き換えてSaveボタンを押します.Closeボタンを押すと保存せずに閉じます.
優先度はこのユーザノードの優先度を表す整数です.一つのシステムノードからつながっているユーザノードのうち,priority numberの高い順に条件がチェックされます.この数字は,シナリオを保存する度にリセットされ,大きいものから順に100, 90, 80, ...に変更されます.
ユーザ発話タイプと遷移の条件にはこのユーザノードの条件を書きます.両方が満たされたとき,このユーザノードの次のシステムノードに移行します.
ユーザ発話タイプは言語理解で得られるユーザ発話のタイプを書きます.コンフィギュレーションで,言語理解を行うことを選択している場合,および,言語理解で得られたユーザ発話のタイプが,ここに書いてあるものにマッチした場合,条件が満たされます.ここが空の場合は,必ず条件が満たされたとみなします.
遷移の条件には,ユーザ発話以外のタイプに関する条件を書きます.条件が複数ある場合は,";"でつなぎます.条件には以下のようなものが書けます.
$インストラクション$
ChatGPTにインストラクションを与えて条件判定をさせます.このとき,コンフィギュレーションで指定したsituationとpersonaが用いられます.
例: $ユーザが会話に飽きたかどうかを判断してください.$
$$$<プロンプトテンプレート>$$$
ChatGPTにプロンプトを与えて条件判定をさせます.プロンプトはプロンプトテンプレートから作られます.プロンプトテンプレートは改行を含んでも構いません.以下が例です.
xxxxxxxxxx$$$# 状況{situation}# あなたのペルソナ{persona}# 現在までの対話{dialogue_history}# タスクユーザが理由を言ったかどうか判断し,yesかnoで答えてください.$$$
{と}で囲まれている部分はプレースホルダです.システムノードと同じものを使うことができます.
#<言語理解のスロット名> == "<文字列>"/ #<言語理解のスロット名> != "" (上級用)
直前のユーザ発話の言語理解で得られたスロットの値が文字列に一致するかどうか(==)または一致しないかどうか(!=)を判定します.
例:#好きなラーメン=="豚骨ラーメン"(上級用)
スロットが空の場合,空文字列になります.例えば好きなラーメンスロットの値が空であれば,条件,#好きなラーメン==""は満たされます.
#<NE_固有表現のクラス> == "<文字列>"/ #<NE_固有表現のクラス> != "" (上級用)
直前のユーザ発話の固有表現抽出で得られた固有表現の値が文字列に一致するかどうか(==)または一致しないかどうか(!=)を判定します.
例:#NE_人名!=""
固有表現が抽出できなかった場合,空文字列になります.例えばPersonクラスの固有表現が抽出できなかった場合,条件,#NE_Person!=""は満たされません.
TT > <ターン数>
対話開始からのユーザ発話の回数が<ターン数>を超えた場合に条件が満たされます.
例:TT>10
TS > <ターン数>
その状態(システムノード)でのユーザ発話の回数が<ターン数>を超えた場合に条件が満たされます.
例:TS>5
遷移時のアクションは進んだ使い方の時のみ利用するのでここでは説明しません.
言語理解とは,発話タイプに分類し,必要な情報を取り出すことです.必要な情報のことをスロットと言います.例えば,気象情報を検索する対話システムならば,タイプは「天気を聞く」「気温を聞く」などで,スロットは,「地名」や「日付」などになります. この「地名」や「日付」をスロット名,実際に抽出される地名や日付の値をスロット値と呼びます.このタイプやスロット値をシナリオのユーザノードで遷移の条件として使うことができます.
対話システムに言語理解を行わせるには,言語理解知識が必要です.言語理解知識には以下のような情報を記述します.
どのような発話がどのタイプなのか?
どのようなスロットがあるのか?
スロット値の例
発話とそれから得られるスロットの例
さらに,各スロットの同義語も記述することができます.
同じ単語が別のスロットになることもあります.例えば,券売機の対話システムで「東京から新大阪までの乗車券」と言えば,乗車駅=東京,降車駅=新大阪,券種別=乗車券となりますが,乗車駅スロットと降車駅スロットは両方とも駅名です.
言語理解知識を編集するには,Edit Application画面でNLU knowledgeを選択します.Excelが起動して言語理解知識を読み込むので,編集して保存してください.
言語理解用知識のExcelファイルは,utterancesシートと,slotsシートからなります.
以下がutterancesシートの例です.
| flag | type | utterance | slots |
|---|---|---|---|
| Y | 肯定 | はい | |
| Y | 特定のラーメンが好き | 好きなのは味噌ラーメン | 好きなラーメン=味噌ラーメン |
| Y | ある地方の特定のラーメンが好き | 博多の豚骨ラーメンって美味しいですよね | 地方=博多,好きなラーメン=豚骨ラーメン |
flag列は使いません.
type列には発話のタイプを書きます.
utterance列は発話例です.
slotsには,<スロット名>=<スロット値>, ... ,<スロット名>=<スロット値>の形で発話に含まれるスロットを書きます.カンマは全角でも読点でも構いません.
以下はslotsシートの例です.
| flag | slot name | entity | synonyms |
|---|---|---|---|
| Y | 好きなラーメン | 豚骨ラーメン | とんこつラーメン,豚骨スープのラーメン,豚骨 |
| Y | 好きなラーメン | 味噌バターラーメン | |
| Y | 地方 | 富山 |
flag列は使いません.
slot name列にはスロット名を書きます.
entity列にはスロット値になり得るものの例を書きます.
synonyms列には,スロット値の同義語をカンマまたは読点で並べて書きます.同義語がスロット値になった場合,entity列のものに置き換えられます.
固有表現とは,固有名詞+αと思って構いません.発話テキストから固有表現を抽出することを固有表現抽出と言います.固有表現はクラスに分かれています.例えば,人名,地名,組織名,商品名,時間,数量などが,クラスとして使われます.言語理解のスロットと似ていますが,言語理解のスロットは,タイプと結びついているのに対して,
対話システムに固有表現抽出を行わせるには,固有表現抽出知識が必要です.固有表現抽出知識には以下のような情報を記述します.
どのようなクラスの固有表現があるのか?
各クラスの固有表現の例
発話とそれから得られる固有表現の例
一つの発話から同じクラスの固有表現が複数得られることもあります.例えば,「太郎と次郎はラーメンが好き」ならば,「太郎」も「次郎」も人名クラスの固有表現です.
固有表現抽出知識を編集するには,Edit Application画面でNER knowledgeを選択します.Excelが起動するので,編集して保存してください.
固有表現抽出知識のExcelファイルは,utterancesシートと,classesシートからなります.
以下がutterancesシートの例です.
| flag | utterance | entities |
|---|---|---|
| Y | 札幌の味噌ラーメンが好きです | 地名=札幌 |
| Y | 田中です | 人名=田中 |
| Y | 太郎は東京に住んでます | 人名=太郎,地名=東京 |
flag列は使いません.
utterance列は発話例です.
entitiesには,<固有表現クラス名>=<固有表現>, ... ,<固有表現クラス名>=<固有表現>の形で発話に含まれるスロットを書きます.カンマは全角でも読点でも構いません.
以下はclassesシートの例です.固有表現のクラス毎に1行記述します.
| flag | class | explanation | examples |
|---|---|---|---|
| Y | 人名 | 人の名前 | 田中,山田,太郎,花子,ジョン |
| Y | 地名 | 場所の名前 | 札幌,東京,大阪,日本,アメリカ,北海道 |
flag列は使いません.
class列には固有表現のクラスを書きます.
explanation列には固有表現の説明を書きます.
examples列には,そのクラスの固有表現の例をカンマまたは読点で並べて書きます.
起動コマンドの引数[ja/en]で指定します.
dialbb-nc [ja] …日本語,省略時は日本語がデフォルトです.
dialbb-nc en …英語