Azure OpenAI + Microsoft Agentsで“人間のような”AIを作る
最近、Azure OpenAIでAI開発を進める中で、ある現実的な課題に気づきました。
モデル自体は非常に強力なのですが、その都度ゼロから「人間の振る舞い」を教える必要があるのです。
そこでMicrosoft Agent Frameworkの利用を始めました。実際に触ってみて、最も印象的だった感想は次の一言に尽きます:
これは「モデルを呼び出す」ためのものではなく、「AIを育てる」ためのものだ、ということです。
まずは原理の話から
- 従来、私たちは大規模モデルをどう使っていたか?
現実的なプロンプト例:
"あなたはC#プログラマーです……"
"SOLID原則に従ってください……"
"完全なコードを書いてください……"
"コメントも付けてください……"
こうした一連のプロンプトをモデルに渡していました。
問題点:
- 毎回「あなたは誰ですか」という説明を大量に書かなければならない
- マルチターンの会話がすぐに混線しやすい
- ストリーミング出力をしたい場合、トークンの分割処理を自分で実装しなければならない
- 業務が複雑になるとプロンプト自体が破綻し始める
本質として――
手作業でとても不安定な「擬似エージェント」を作っている状態なのです。
- Agent Frameworkは何をしてくれるのか?
Agent Frameworkの役割は、実のところ非常にシンプルです。
以下のような要素を分離し、固定化してくれます:
- あなたは誰か(役割)
例:
- あなたは経験豊富なC#エンジニア
- 企業規模のコーディング規範を守る
- ゴミコードは書かない
これらは毎回プロンプトで書くものではなく、Agentの「人格設定」として固定されます。
- どのように話すか(行動ルール)
- 中国語で話す
- 無駄話はしない
- コードは一度にすべて出力する
- まず設計方針を示してからコードを書く
これらは業務規範に近く、「一度限りの指示」という形ではありません。
- 過去の会話内容を覚えている
Agentがコンテキストを管理してくれるため、あなたが:
- 過去メッセージを自力で繋ぎ合わせたり
- system / user / assistantの区別を手動で管理したり
という手間がなくなります。「この人とずっと対話している」感覚で使えます。
- ストリーミング出力をデフォルトでサポート
このため、自身で調査・実装が不要です:
- トークン管理
- 部分的レスポンスの制御
- コールバック処理
Agentは最初から「生成しながら返す」ことをサポートしています。
- もっと分かりやすく言うと
公式な定義ではありませんが、例えるなら:
Agentは、すでに研修済みのAI同僚です。
- モデル=彼の“脳”
- Instructions=彼の“入社研修+業務マニュアル”
- Agent=“その人、そのもの”
今後、あなたがするのは「モデルを呼び出す」ことではありません。
「王さん、会員登録モジュール書いてくれる?」と“話しかけるだけ”です。
-
Azure OpenAIはここでどういう役割?
-
Azure OpenAI:エンタープライズグレードの安定したモデルサービスを提供
-
Agent Framework:そのモデルを「どのように使うか」を担当
つまり――
一方が計算リソースとモデルを担い、もう一方が活用方法=“業務のやり方”を担当しています。
コードサンプル
using Azure.AI.OpenAI;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using System.ClientModel;
class Program
{
static async Task Main()
{
var agent = CreateAzureAgent();
await foreach (var message in agent.RunStreamingAsync(
"会員登録用のエンティティクラスを定義して、Serviceも実装してください。"))
{
Console.Write(message);
}
}
static AIAgent CreateAzureAgent()
{
// ローカルファイルからAzure OpenAIの設定を読み込む
var lines = File.ReadAllLines("C:/gpt/azure_key.txt");
var deploymentName = lines[0];
var endpoint = lines[1];
var apiKey = lines[2];
var credential = new ApiKeyCredential(apiKey);
// ここがAIの「人格設定」部分
var instructions = """
あなたは経験豊富なC# / .NETプログラマーです。
- .NET、OOP、SOLID原則に精通
- エンタープライズレベルでメンテナンスしやすいコードを書くことができる
- 命名規則は明確に
- まず設計方針を述べてから、完全なコードを提示
- 断片的な出力はしない
回答は中国語で、コードには必要なコメントを記入
""";
var agent =
new AzureOpenAIClient(new Uri(endpoint), credential)
.GetChatClient(deploymentName)
.AsIChatClient()
.AsAIAgent(
instructions: instructions,
name: "DotNetProgrammer");
return agent;
}
}
全員が確実にMicrosoft Agentを動作できるよう、プロジェクトファイルもあわせて共有します。サードパーティパッケージのバージョンも統一できます。
<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.8.0-beta.1" />
<PackageReference Include="Azure.Identity" Version="1.18.0-beta.2" />
<PackageReference Include="Microsoft.Agents.AI" Version="1.0.0-preview.260121.1" />
<PackageReference Include="Microsoft.Agents.AI.AzureAI" Version="1.0.0-preview.260121.1" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.0.0-preview.260121.1" />
</ItemGroup>
</Project>
動作結果:
(Translated by GPT)
元のリンク:https://mp.weixin.qq.com/s/5Dzk_tQqnKcNgu3kdISeig?token=1501849130&lang=zh_CN&wt.mc_id=MVP_325642