-
Notifications
You must be signed in to change notification settings - Fork 0
Description
全てで 6つのフェーズに分割して作業を実施
- Pahse 1: プロジェクトスキャフォールド
- Pahse 2: 基盤実装(config / mcp_client / prompts / agent / cli / main)
- Pahse 3: MVP – User Story 1 (リソースグループ一覧)
- Pahse 4: User Story 2 – ストレージアカウント一覧
- Pahse 5: User Story 3 – Log Analytics エラー要約
- Pahse 6: Polish & Cross-Cutting
概要
User Story 1〜3 (リソースグループ一覧 / ストレージアカウント一覧 / Log Analytics エラー要約) が一通り動く状態を前提に、
この Issue では以下の「仕上げ & 横断的な品質向上」を行います:
- Quickstart の充実と、実装とドキュメントの同期
- ログとエラーハンドリングの整理(ユーザー向けメッセージの統一)
- 権限不足やタイムアウトなどのエッジケーステストの追加
- 代表的な問い合わせに対する簡易パフォーマンステスト
- プロンプト・システムインストラクションの見直し(安全性・一貫性)
- Quickstart ベースのエンドツーエンド検証とドキュメント反映
目的:
本エージェントを「人に渡せる品質」に持っていき、AI Toolkit や Copilot coding agent から評価・トレースしやすい状態にすることです。
コンテキスト
- プロダクト仕様:
specs/001-azure-resource-guide-agent/spec.md - 仕様チェックリスト:
specs/001-azure-resource-guide-agent/checklists/requirements.md - 実装プラン:
specs/001-azure-resource-guide-agent/plan.md - データモデル:
specs/001-azure-resource-guide-agent/data-model.md - Quickstart:
specs/001-azure-resource-guide-agent/quickstart.md - タスク一覧:
specs/001-azure-resource-guide-agent/tasks.md
Phase 6 は、tasks.md の Phase 6: Polish & Cross-Cutting Concerns に対応します(T033〜T038)。
スコープ(対応する tasks)
この Issue の対象タスクは以下です(Phase 6 のみ):
- T033 [P] Add detailed usage and examples to
specs/001-azure-resource-guide-agent/quickstart.md - T034 Improve logging and error reporting across
src/azure_mcp_agent/agent.pyandsrc/azure_mcp_agent/cli.py - T035 [P] Add additional edge-case tests for permission errors and timeouts in
tests/azure_mcp_agent/test_agent_basic.py - T036 [P] Add basic performance checks for typical queries in
tests/azure_mcp_agent/test_log_analytics.py - T037 Refine prompts and safety constraints in
src/azure_mcp_agent/prompts.pybased on early feedback - T038 Run end-to-end validation using
specs/001-azure-resource-guide-agent/quickstart.mdand adjust docs as needed
前提条件
- Phase 1〜5(T001〜T032)が完了済み、または少なくとも User Story 1〜3 が動く状態になっていること。
- 既に
pytestベースのテストスイートが存在し、CI で実行できること。
スコープ外
- 新しいユーザーストーリー/機能の追加
- Azure MCP Server 側のツール追加・変更(クライアント側の扱いに限定)
- 本番向けの SLO/SLA 定義や監視基盤(Application Insights 等)との統合
やってほしい具体的なこと
1. Quickstart の充実 (T033)
ファイル: specs/001-azure-resource-guide-agent/quickstart.md
やること
- 現状の Quickstart を、実際の CLI 挙動に合わせて更新する:
- セットアップ手順(Python venv,
pip install -e ., 環境変数など) - Azure MCP Server の起動例 (
npx -y @azure/mcp@latest server start) - User Story 1〜3 それぞれの「サンプル問い合わせと期待される応答」の例
- 例:
このサブスクリプションのリソースグループ一覧を出して<RG名> のストレージアカウントを一覧して直近 1 時間のエラーを Log Analytics で確認して
- 例:
- セットアップ手順(Python venv,
- US1〜3 それぞれについて、少なくとも 1 つの「実際の出力例」(ダミーの RG 名 / ストレージ名 / エラー内容で OK)を載せる。
- README がある場合は、Quickstart へのリンクを追記し、「まずこれを読めば全体像が分かる」状態にする。
2. ログ & エラーハンドリングの改善 (T034)
ファイル: src/azure_mcp_agent/agent.py, src/azure_mcp_agent/cli.py
目的
- ユーザーに見せるメッセージは常に日本語で分かりやすく、
内部では Python のloggingモジュールを使って診断しやすいログを出す。
やること
loggingを使ったロガーを定義し、最低限以下をログ出力:- MCP ツール呼び出しの開始/終了(どのツールを使ったか、成功/失敗)
- 重要なエラー(権限不足、タイムアウト、Azure 側の一時障害など)
- ただしログには以下を含めない:
- 秘密情報(トークン、接続文字列、個人情報など)
- フルのスタックトレース(必要に応じて DEBUG レベルでのみ出す)
- ユーザー向けエラーメッセージは:
- 日本語で、「何が起きたか」「何をすればよいか」が分かる文章に統一
- 例: 「サブスクリプションにアクセスする権限が不足しているようです。管理者にロールを確認してもらってください。」
- CLI 側では、致命的な例外がそのままトレースバックとしてユーザーに流れないようにし、
一箇所でキャッチして日本語メッセージを表示する。
3. 権限エラー / タイムアウトなどの追加テスト (T035)
ファイル: tests/azure_mcp_agent/test_agent_basic.py
目的
- 仕様で挙げているエッジケース(権限不足 / リソース未存在 / Azure 側の一時障害など)を
pytest で自動検証できるようにする。
やること
- MCP クライアントをモックして、代表的な失敗パターンを再現:
- 権限不足(例外 or エラーコード)
- ネットワークタイムアウト
- リソース/リソースグループ未存在
- 各ユーザーストーリー(US1〜US3)向けに、少なくとも 1 ケースずつ「エラー系テスト」を追加:
- Agent レベルの戻り値が、仕様通りの日本語メッセージになっていることを確認。
- テスト名や docstring には、どのエッジケースを検証しているかを明記する。
4. 基本的なパフォーマンステストの追加 (T036)
ファイル: tests/azure_mcp_agent/test_log_analytics.py(必要なら追加ファイルでも可)
目的
- 「典型的な問い合わせ」で極端な性能劣化が起きていないことを、
簡易的なパフォーマンステストで検知できるようにする。
やること
- 対象:
- US1: リソースグループ一覧
- US2: ストレージアカウント一覧
- US3: Log Analytics エラー要約(モックベース)
- 方針:
- 実 Azure ではなく、MCP クライアントをモックして「大量のダミー結果」を返すことで、
エージェント側の整形・要約ロジックだけを計測する。 - 必要に応じて
pytest-benchmark等のプラグインを使い、「一定時間内に終わること」を検証してもよい。
- 実 Azure ではなく、MCP クライアントをモックして「大量のダミー結果」を返すことで、
- 最低限:
- 上記 3 ケースについて、「N 回繰り返し実行してもタイムアウトしない / 明らかに遅くならない」程度のチェックを行う。
5. プロンプト / システムインストラクションの見直し (T037)
ファイル: src/azure_mcp_agent/prompts.py
目的
- Agent Builder で定義したインストラクションを整理し、
全ユーザーストーリーで一貫した動作と安全性(読み取り専用 / 日本語応答)を確保する。
やること
- システムプロンプトに、以下を明文化:
- すべての Azure 操作は読み取り専用であること(CUD は行わない)
- 応答は日本語で行い、リソース名や ID は原文表記を維持すること
- Azure MCP Server のツールを積極的に利用し、「最新の状態」を確認すること
- リソース名やワークスペース名があいまいな場合は、ユーザーに確認・絞り込みを行うこと
- Log Analytics エラー要約では、3〜5 ステップのトラブルシュートガイドを返すこと
- ツール説明文(tool description)にも上記方針を反映し、
LLM にとって「どのツールをいつ使うべきか」が分かりやすい状態にする。 - 不要になったプロンプト断片や重複ルールがあれば整理・削除する。
6. Quickstart を使った E2E 検証 & ドキュメント反映 (T038)
ファイル: specs/001-azure-resource-guide-agent/quickstart.md 他
目的
- Quickstart に書かれた手順を実際に上から順に実行し、
エンドツーエンドの動作を確認しつつ、必要な修正をドキュメントに反映する。
やること
- ローカル環境で以下を実施:
- ブランチ
001-azure-resource-guide-agentをチェックアウト - venv 作成と依存インストール
- Azure MCP Server 起動
python -m azure_mcp_agentまたはpython src/azure_mcp_agent/main.pyを実行- Quickstart に書かれた 3 つの問い合わせ(US1〜3)を実行
- ブランチ
- 上記のどこかで詰まる / 手順が足りない / 挙動が Quickstart 記載と違う場合は、
- 可能であればコード側を修正
- それでも埋めきれない部分は Quickstart に注意書きとして追記
- 将来的に AI Toolkit の評価・トレースからも使えるよう、
「代表的な E2E シナリオ」を Quickstart に明示的に列挙しておく。
受け入れ条件 (Acceptance Criteria)
-
Quickstart が実装と同期している
- Quickstart の手順通りに実行すれば、US1〜3 の代表的な問い合わせがすべて成功する。
- 少なくとも 1 パターンずつ、US1〜3 の「問い合わせ例+出力例」が Quickstart に記載されている。
-
ログ & エラーハンドリングが整理されている
agent.py/cli.pyで Python のloggingを用いたログ出力が行われている。- ユーザーに見えるエラーはすべて日本語で、仕様に沿ったメッセージになっている(スタックトレースは表示されない)。
-
エッジケーステストが追加されている
tests/azure_mcp_agent/test_agent_basic.pyに、権限不足 / タイムアウト / リソース未存在などのテストが追加されている。- それらのテストが CI で緑になっている。
-
基本的なパフォーマンステストが存在する
tests/azure_mcp_agent/test_log_analytics.pyなどに、「典型的な問い合わせに対する簡易パフォーマンステスト」が追加されている。- 外部サービスへのネットワーク依存を避け、モックを使ったロジック単位の計測になっている。
-
プロンプトが仕様と一貫している
prompts.pyのシステムインストラクションとツール定義に、読み取り専用・日本語応答・あいまい入力の扱い・トラブルシュートガイドなどの仕様が反映されている。- US1〜3 のいずれにおいても、プロンプトの方針と実際の挙動が乖離していない。
-
E2E 検証が完了している
- Quickstart のシナリオを使ったエンドツーエンド検証(US1〜3)が少なくとも 1 回は行われ、その結果が Quickstart / コメント等に反映されている。
- 全テスト (
pytest) が成功し、追加したパフォーマンス・エッジケーステストも含めて緑の状態になっている。
Copilot coding agent への追加指示(任意)
この Issue を @copilot にアサインする場合、以下のようなコメントを追記するとスムーズです:
- Phase 1〜5 までのコードとテストを前提に、
tasks.mdの Phase 6 (T033〜T038) を完了してください。- まず Quickstart を実際の挙動に合わせて更新し (T033)、その後にロギング・テスト・プロンプト・E2E 検証 (T034〜T038) を行ってください。
- ログとエラーメッセージは「ユーザーフレンドリーな日本語」で統一し、スタックトレースや秘密情報は出さないようにしてください。
- パフォーマンステストやエッジケーステストでは、外部サービスへの依存を避けるために MCP クライアントをモックしてください。
- 最後に
pytestと Quickstart に書かれた E2E シナリオを実行し、この Issue の Acceptance Criteria をすべて満たしていることを確認してください。