メインコンテンツまでスキップ

会話の文脈を取得する方法

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: 日本
01234
-5-4-3-2-1