会話の文脈を取得する方法
Asgard で AI チャットボットや対話型のフローを作るとき、メッセージの文脈を理解することが応答の質を左右します。過去のやり取りをもとに大規模言語モデル(LLM)に回答させる場合でも、記憶を持つ対話フローを作る場合でも、会話履歴にアクセスできることは欠かせません。
Asgard には利用者の会話内容を取得する方法が 2 つあります。prevMessage と history(start, end) です。どちらも会話を読み取れますが、使いどころと柔軟さが異なります。
このページでは prevMessage と history(start, end) の構文を追いながら、会話履歴を取得することがなぜ重要なのかを説明し、ワークフローの中でどう効いてくるかを例で示します。
prevMessage
Expression で Echo ボットを作るチュートリアルでは、式として prevMessage を使っています。ボットがひとつ前のメッセージを読み取り、それを Echo Message の出力内容にするという意味です。
- 用途: 「ひとつ前のメッセージ」の内容を取得します
- 構文が単純: 使いやすく、単一ターンの会話に向いています
- 構文の例:
prevMessage
- 向いている場面:
- Echo bot がひとつ前のメッセージを返す
- 単一のコマンドや 1 回のやり取りへの素早い応答
history(start, end)
AI チャットボットを作るチュートリアルでは、Prompt(プロンプト) の Template モードで history(0, -1) を使い、そのフローにおける過去のメッセージを最初のものから最新のものまで取得して、後続の処理ノードに会話の文脈をまとめて渡しています。AI に返信を生成させる、会話の筋を一貫させる、利用者の入力を記録して後で分析する、といった用途に使えます。
- 用途: 会話履歴の全体、または特定の範囲を取得します
- 構文が柔軟: 開始位置と終了位置を指定できます。複数ターンの会話や文脈を踏まえた推論に向いています
- 構文の例:
// 履歴の全体を取得
history(0, -1)
// 直近 3 件を取得
history(-3, -1)
// ひとつ前の発言を参照し、その感情を判定する
history(-1, -1)
| 引数 | 内容 |
|---|---|
0 | 最初のメッセージ(最も古いもの)から開始します |
-1 | 最後のメッセージ(最新のもの)までを指します |
つまり history(0, -1) は、現在の会話にあるすべての履歴メッセージ、最初から最後までの完全な記録を取得するという意味になります。
- 向いている場面:
- LLM チャットボットが文脈に基づいて回答を生成する場合
- 複数ターンのやり取り、記憶が必要なタスク、要約、分析など
使いどころの例
- LLM のプロンプトを書くとき、
history(0, -1)で会話全体をモデルに渡すと、AI は文脈を踏まえて応答できます。 - システムプロンプトと組み合わせると次の形になります。
You are a helpful assistant. Here is the conversation so far:
{{ history(0, -1) }}
- 直近の 1 件だけでよければ
prevMessageまたはhistory(-1)を使います
| Bot: hello! | User: 1 年は何か月ですか | Bot: 1 年は 12… | User: クラシック… | Bot: 日本 |
|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 |
| -5 | -4 | -3 | -2 | -1 |
