言語の生成Language Generation

適用対象: SDK v4APPLIES TO: SDK v4

言語生成 (LG) を使用すると、開発者は、コードやリソース ファイルから埋め込み文字列を抽出し、それらを LG のランタイムとファイル形式を通して管理することができます。Language Generation (LG) allows developers to extract embedded strings from their code and resource files and manage them through a LG runtime and file format. 開発者は LG を使用すると、フレーズに対して複数のバリエーションを定義し、コンテキストに基づいて単純な式を実行して会話メモリを参照することにより、より自然な会話エクスペリエンスを作成できます。With LG, developers can create a more natural conversation experience by defining multiple variations on a phrase, executing simple expressions based on context, and referring to conversational memory.

開発者は、以下のために LG を使用できます。LG can be used by developers to:

  • ボットの一貫性のある個性と音声のトーンを実現するachieve a coherent personality, tone of voice for their bot
  • ビジネス ロジックをプレゼンテーションから分離するseparate business logic from presentation
  • ボットの任意の返信に、バリエーションや、高度な合成に基づく解決策を含めるinclude variations and sophisticated composition based resolution for any of their bot's replies
  • 発話や表示の適応を作成するconstruct speak .vs. display adaptations
  • カード、推奨されるアクション、添付ファイルを作成するconstruct cards, suggested actions and attachments

LG の中核となっているのは、テンプレートの展開とエンティティの置換です。At the core of LG lies template expansion and entity substitution. 展開については、one-of バリエーションを提供するだけでなく、条件付きでのテンプレートの展開も可能です。You can provide one-of variation for expansion as well as conditionally expand a template. LG からの出力は、単純なテキスト文字列にすることも、複数行の応答や複雑なオブジェクト ペイロードにすることもできます。後者は、アクティビティを作成するために LG の上の階層で使用されます。The output from LG can be a simple text string, multi-line response, or a complex object payload that a layer above LG will use to construct an activity.

次に、簡単な案内の LG テンプレートを示します。The following is a simple greeting LG template. あいさつのすべてで、変数 ${user.name} を使用してメモリ内のユーザー名を参照していることに注目してください。Notice that all of the greetings reference the user's name in memory with the variable ${user.name}.

# greetingTemplate
- Hello ${user.name}, how are you?
- Good morning ${user.name}.It's nice to see you again.
- Good day ${user.name}. What can I do for you today?

動作中の LGLG in action

ボットの開発時には、さまざまな方法で LG を使用できます。You can use LG in a variety of ways when developing bots. 開始するには、ユーザーに対するボットの応答と共に言語生成サブシステムを使用する、考えられるすべてのシナリオを網羅した .lg ファイルを 1 つ以上作成します。To start, create one or more .lg file(s) to cover all possible scenarios where you would use the language generation sub-system with your bot's replies to a user.

必ず言語生成ライブラリ Microsoft.Bot.Builder.LanguageGeneration を含めます。Make sure you include the language Generation library Microsoft.Bot.Builder.LanguageGeneration. 次に、以下を追加して、.lg ファイル内のテンプレートを解析し、読み込みます。Then parse and load templates in your .lg file by adding the following:

    _templates = Templates.ParseFile(fullPath);

テンプレートの展開が必要な場合は、Evaluate を使用して、適切なテンプレート名を渡します。When you need template expansion, use Evaluate and pass in the relevant template name.

    var lgOutput = _templates.Evaluate(<TemplateName>);

テンプレートで、解決や展開のために特定のプロパティを渡す必要がある場合は、Evaluate の呼び出し時にそれらを渡すことができます。If your template needs specific properties to be passed for resolution/expansion, you can pass them when calling Evaluate.

    var lgOutput = _templates.Evaluate("WordGameReply", new { GameName = "MarcoPolo" } );

多言語生成と言語フォールバック ポリシーMultilingual generation and language fallback policy

ボットのターゲットが、複数の話される言語や表示言語であることもあります。Your bot might target more than one spoken or display language. TemplateEngine の別個のインスタンスを、ターゲット言語ごとに 1 つ管理できます。You can manage separate instances of the TemplateEngine, one per target language. 複数の言語をボットに追加する (言語フォールバックとも呼ばれます) 方法の例については、C# または JavaScript の言語フォールバックのサンプルを含むマルチターン プロンプトを参照してください。For an example of how to add multiple languages, also known as language fallback, to your bot, see the multi-turn prompt with language fallback sample in C# or JavaScript.

展開 APIExpand API

テンプレートの考えられるすべての展開を取得する場合は、ExpandTemplate を使用できます。To get all possible expansions of a template, you can use ExpandTemplate.

    var results = lgTemplates.ExpandTemplate("WordGameReply", { GameName = "MarcoPolo" } )

たとえば、次の内容の LG があるとします。For example, given this LG content:

# Greeting
- Hi
- Hello

#TimeOfDay
- Morning
- Evening

# FinalGreeting
- ${Greeting()} ${TimeOfDay()}

# TimeOfDayWithCondition
- IF: ${time == 'morning'}
    - ${Greeting()} Morning
- ELSEIF: ${time == 'evening'}
    - ${Greeting()} Evening
- ELSE:
    - ${Greeting()} Afternoon

ExpandTemplate("FinalGreeting") の呼び出しにより、4 つの評価結果が得られます。The call ExpandTemplate("FinalGreeting") results in four evaluations:

  • Hi MorningHi Morning
  • Hi EveningHi Evening
  • Hello MorningHello Morning
  • Hello EveningHello Evening

スコープを指定した ExpandTemplate("TimeOfDayWithCondition", new { time = "evening" }) の呼び出しでは、2 つの展開結果が得られます。The call ExpandTemplate("TimeOfDayWithCondition", new { time = "evening" }) with scope, results in two expansions:

  • Hi EveningHi Evening
  • Hello EveningHello Evening

その他のリソースAdditional resources