0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第六篇:宣言型 Agent

0
Posted at

最近、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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?