最近、AI Agent をいじっていて、Microsoft Agent Framework の「宣言型 Agent」を試してみましたが、かなり実用的だと感じました。特にチーム協業に向いています。
以下は完全なコードです。そのまま参考にできます。
using Azure.AI.OpenAI;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using System.ClientModel;
var arr = File.ReadAllLines("C:/gpt/azure_gpt5.4_mini.txt");
var endpoint = arr[1];
var deploymentName = arr[0];
var credential = new ApiKeyCredential(arr[2]);
IChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint),
credential)
.GetChatClient(deploymentName)
.AsIChatClient();
var text =
"""
kind: Prompt
name: CustomerSupportAgent
description: 多言語カスタマーサポートアシスタント
instructions: |
あなたはプロのカスタマーサポートアシスタントです。
あなたの任務は:
1. ユーザーの言語で質問に回答する
2. 分かりやすく、丁寧で、専門的な返信を提供する
3. 問題の種類(注文/返金/技術/その他)を判定する
4. ユーザーの感情(ポジティブ/ニュートラル/ネガティブ)を判定する
注意:
- 回答は簡潔にする
- ネガティブな感情の場合は、より落ち着かせる口調にする
- 情報を作り出さない
model:
options:
temperature: 0.3
topP: 0.9
outputSchema:
properties:
language:
type: string
description: ユーザーが使用している言語
required: true
category:
type: string
description: 問題の分類(order/refund/technical/other)
required: true
sentiment:
type: string
description: 感情(positive/neutral/negative)
required: true
answer:
type: string
description: カスタマーサポートの返信内容
required: true
""";
var agentFactory = new ChatClientPromptAgentFactory(chatClient);
var agent = await agentFactory.CreateFromYamlAsync(text);
Console.WriteLine(await agent!.RunAsync("中国語で、なぜ私の注文した商品がまだ届いていないのか答えてください。"));
await foreach (var update in agent!.RunStreamingAsync("日本語で答えてください。私の返品はいつ処理されますか。"))
{
Console.Write(update);
}
csproj ファイルは以下です。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" Version="2.9.0-beta.1" />
<PackageReference Include="Azure.Identity" Version="1.19.0" />
<PackageReference Include="Microsoft.Agents.AI.Declarative" Version="1.0.0-rc4" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.0.0-rc4" />
</ItemGroup>
</Project>
まず効果を見たほうが直感的です。私は簡単な多言語カスタマーサポートアシスタントを作りました。入力するのは一文だけで、例えば「中国語で、なぜ私の注文した商品がまだ届いていないのか答えてください。」です。
返ってくるのは単なるテキストではなく、言語、問題の種類(注文)、感情、そして専門的なカスタマーサポートの返答といった構造化された結果です。
別の文に変えて、「日本語で答えてください。私の返品はいつ処理されますか。」とすると、
日本語でストリーミング出力され、生成しながら表示されます。会話画面を作るのにとても向いています。
重要なのは、この Agent の能力は大量の業務コードを書いて実現しているのではなく、YAML の一段の定義で作られていることです。役割、動作ルール、モデルパラメータ、さらには出力形式まで、すべて「宣言」されています。
見て分かるように、コード自体はかなり薄く、核心ロジックはあの YAML の中にあります。
これが宣言型 Agent の最も面白いところでもあります。
Prompt をコードに固定して書く必要がなくなり、Agent の「人格、ルール、出力」をすべて設定化できます。口調を変えたい、ルールを変えたい、フィールドを追加したい場合も、YAML を直接修正すればよく、コードを変更してリリースする必要はありません。
簡単に言えば、「Prompt を書く」という作業をエンジニアリングコードから切り離し、チームで共同管理できる設定ファイルにした、ということです。
AI アプリケーションを作っているなら、この方法は本当に試してみる価値があります。
(Translated by GPT)
元のリンク:https://mp.weixin.qq.com/s/UvWPlVAPoNLmqhAg-3PPAg?token=1435541481&lang=zh_CN&wt.mc_id=MVP_325642