Local Ollamaを使用してSEOメタタイトルとメタディスクリプションを自動生成する方法
構造化されたSEOタイトルとメタディスクリプションを一括生成し、出力を検証し、人間によるレビューが必要な結果をフラグ付けする、ローカルなOllamaワークフローを構築します。
AutoGen ループのデバッグを行う前に知っておくべき重要なプラットフォーム変更があります。2026 年 9 月現在、公式 AutoGen リポジトリはメンテナンス モードになっています。新機能ではなくメンテナンス作業が行われる予定であり、Microsoft は新規プロジェクトには Microsoft Agent Framework の使用を推奨しています。公式 AutoGen リポジトリでは、Python 0.7.5 が現在の安定版として記載されていますが、Microsoft は 2026 年 8 月 25 日に更新された AutoGen から Agent Framework への移行ガイドを公開しました。ただし、既に本番環境で AutoGen を使用している場合は、以下のトラブルシューティング手法が引き続き役立ちます。公式 AutoGen リポジトリ、公式 AutoGen リリース、および Microsoft のAutoGen 移行ガイドを参照してください。
AutoGenエージェントが「無限ループに陥っている」ように見えるのは、通常、次の5つの理由のいずれかが原因です。実行に信頼できる終了条件がない、次のスピーカーポリシーが非生産的な参加者を選択し続ける、ツール呼び出しで目に見える進捗が得られない、エージェント間で作業が繰り返される、またはアプリケーションが古い状態を再開し続ける、のいずれかです。最も迅速な解決策は、すべてのプロンプトを書き直すことではありません。まず、実際に発生しているループを特定し、次にハードストップを追加し、最後に失敗している遷移を修正します。
| 症状 | 考えられる原因 | まず最初に確認すべきことは |
|---|---|---|
| 同じ2人のエージェントが無期限に交代する | ルーティングまたはハンドオフのピンポン | 話者選択、ハンドオフ対象、最大メッセージ数または最大ターン数の制限 |
| あるエージェントが、ほぼ同じ引数で同じツールを繰り返し呼び出す。 | ツールの結果は、進歩または失敗を証明するものではない。 | max_tool_iterationsツールの戻りスキーマと再試行ロジック |
| チームは、作業が目に見えて完了した後も話し合いを続ける。 | プロンプトでは完了が暗示されているだけです | 明示的な終了条件と決定論的な完了シグナル |
| 選定担当者が繰り返し間違った専門家を選んでしまう | エージェントの説明またはセレクターのプロンプトが曖昧です | 参加者の説明、候補者セット、allow_repeated_speaker |
| 新しいタスクは、前のタスクの動作を継承するようです。 | 州は意図的に保存された | 新しいタスクの前にチームまたはエージェントをリセットする必要があるかどうか |
| グラフワークフローはレビュー/書き換えを永遠に繰り返す | 終了条件は決して真にならない | サイクル終了述語と独立した安全終了条件 |
AutoGen AgentChat には、チーム間の境界を維持するために、組み込みの終了条件が用意されています。安定版ドキュメントには、、、、、、、、、、、、およびが含まれています。MaxMessageTermination公式のAutoGen終了ドキュメントを参照してください。TextMentionTerminationTokenUsageTerminationTimeoutTerminationHandoffTerminationSourceMatchTerminationExternalTerminationStopMessageTerminationTextMessageTerminationFunctionCallTerminationFunctionalTermination
ほとんどの運用ワークフローでは、意味的な完了条件と独立した安全上限値を使用します。重要な演算子は通常ORです。タスクが正常に完了するか、安全上限値に達したかのいずれかの時点で実行を停止したいからです。
from autogen_agentchat.conditions import (
MaxMessageTermination,
TextMentionTermination,
)
done = TextMentionTermination("TERMINATE")
safety_cap = MaxMessageTermination(max_messages=25)
termination = done | safety_cap
よくある間違いは、「完了したらTERMINATEと表示する」だけに頼ることです。これでは、動作の正確性はモデル化に委ねられてしまいます。もう一つの間違いは、&「どちらかで停止する」という意味で条件をANDとORで組み合わせることです。AutoGenはANDとORの両方の合成をサポートしているので、セマンティクスを慎重に選択してください。
ハードキャップは回路遮断器であって、ワークフローが正しいことの証明ではありません。実行が常にキャップに達して停止する場合、修正すべき論理的な問題が依然として存在します。
最も強力な終了シグナルは、アプリケーションが文章を解釈することなく認識できるものです。ワークフローに明確な成功イベントがある場合は、最も近い終了条件を使用してください。たとえば、特定のハンドオフは で検出できHandoffTermination、特定のツールの完了は で検出できFunctionCallTermination、カスタムロジックは で表現できますFunctionalTermination。
を使用する場合はTextMentionTermination("TERMINATE")、責任を明確にしてください。どのエージェントが完了を宣言できるのか、また、どのような検証済み条件の下で完了を宣言できるのかを明確にしてください。「満足するまで続ける」といった曖昧な指示をすべての参加者に与えるのは避けてください。「満足」には明確な境界がないため、そのような指示は際限のない批判と書き換えの行動を引き起こす可能性があります。
有用な完了契約は具体的である。「レビュー担当者は、ドラフトに必須の3つのセクションがすべて含まれ、未解決の障害が残っていない場合にのみ、TERMINATEを発行する。」さらに良いのは、可能であれば、レビュー担当者がアプリケーションがチェックできる構造化された状態を生成するようにすることである。
SelectorGroupChatは、共有された会話コンテキストから次の話者を選択するためにモデルを使用します。安定版のドキュメントでは、参加者の名前と説明は話者選択に使用されるため重要であると述べられています。デフォルトでは、利用可能なエージェントが1つしかない場合を除き、同じ話者が連続して選択されることはありませんが、この動作は変更されます。AutoGenは、より決定論的な制御が必要な場合にも提供します。公式のSelectorGroupChatallow_repeated_speaker=Trueドキュメントを参照してください。selector_funccandidate_func
同じ参加者が繰り返し選ばれる場合は、以下の項目を順番に確認してください。
allow_repeated_speakerオフにしてください。selector_funcワークフローが実際には会話を装った状態機械である場合に使用します。重要な違いは単純です。次の話者が真に意味判断を必要とする場合は、LLMベースの話者選択を使用します。次の話者がワークフローの状態によって決定される場合は、決定論的ルーティングを使用します。
現在の AgentChat には、パラメータAssistantAgentがありますmax_tool_iterations。安定版 API ドキュメントによると、デフォルト値は 1 です。値を増やすと、モデルがテキスト応答を返すか最大値に達するまで、エージェントは追加のツール呼び出しを連続して行うことができます。つまり、単一のエージェント実行はこの設定によって制限されますが、同じエージェントがチームによって再度選択され、同じ失敗したツールパターンをターン間で繰り返すことができます。公式のAssistantAgent API リファレンスを参照してください。
agent = AssistantAgent(
name="worker",
model_client=model_client,
tools=[lookup_tool],
max_tool_iterations=3,
)
同じツールと引数が繰り返し使用されている場合、反復回数の制限を減らすだけでは被害を最小限に抑えるだけで、根本的な解決にはなりません。通常、根本的な解決策はツールの契約内容にあります。モデルには、呼び出しが成功したか、永続的に失敗したか、一時的に失敗したか、あるいは新しい情報が生成されなかったかを判断するのに十分な情報が必要です。
次のような簡潔で明確な結果が望ましい:
{
"status": "no_new_data",
"query": "customer_123",
"retryable": false,
"reason": "record already checked",
"next_action": "return_to_planner"
}
これは「結果なし」のような一般的な文字列よりも有用です。なぜなら、モデルは同じ呼び出しを繰り返しても進展がないことを認識できるからです。副作用のあるツールの場合は、アプリケーションレベルで冪等性を追加し、繰り返し呼び出しによって同じチケット、支払い、メッセージ、またはデータベースの変更が繰り返し作成されないようにしてください。
安定版AssistantAgentリファレンスでは、複数のツール呼び出しが同時に実行される可能性があり、サポートされているモデルクライアントでは並列ツール呼び出しを無効にできることが指摘されています。また、複数のハンドオフが検出された場合、最初のハンドオフのみが実行されるため、そのような状況を避けるために並列ツール呼び出しを無効にすることを推奨しています。ワークフローで厳密に一度に1つのアクションのみの状態遷移を想定している場合、並列呼び出しによって結果として得られる状態の理解が難しくなる可能性があります。
ハンドオフループは通常、次のような流れになります。エージェントAはエージェントBの方が適任だと判断し、エージェントBは不完全なコンテキストを見てタスクを返送します。そして、どちらの選択も局所的には永遠に妥当なままです。問題は、どちらのモデルも「間違っている」ということではありません。ハンドオフポリシーには所有権と終端状態が欠けているのです。
引き継ぎごとに具体的な条件を設定し、対象が処理を進められない場合にどうするかを定めるルールを設けることで、この問題を解決できます。ユーザー対話型ワークフローの場合、HandoffTermination(target="user")制御がアプリケーションまたは担当者に戻るべきときにチームを停止するように設計されています。AutoGen のヒューマン・イン・ザ・ループに関するドキュメントでは、Swarm ワークフローではユーザー引き継ぎ後に意図的な再開動作が必要であることも説明されています。公式のヒューマン・イン・ザ・ループに関するドキュメントを参照してください。
優れた引き継ぎ契約には以下の内容が含まれます。
GraphFlow意図的な循環、条件分岐、ループ終了をサポートします。安定版APIでは、ループは最終的にループを終了する条件が存在する場合にのみ有効であり、ビルダーがグラフ構造を検証すると説明されています。また、実験的な機能としてマークされています。構造的に有効なループであっても、終了条件が論理的に到達不可能な場合は、実行時間が長くなりすぎる可能性があるため、ループの周囲に独立した終了条件またはターン制限を設けてください。詳細については、公式のAutoGenチームAPIリファレンスを参照してください。
これは特に「執筆者→レビュー担当者→執筆者」という設計において重要です。レビュー担当者に「完璧になるまで改善を続ける」よう指示した場合、終了条件が満たされない可能性があります。主観的な完璧さを、必須セクションの出現、検証チェックの合格、重大な欠陥の不存在、最大改訂回数の達成といった、より明確な評価基準に置き換えてください。
AgentChatのエージェントとチームはステートフルです。AutoGenの安定版ドキュメントによると、チームは実行間で会話のコンテキストを保持するため、関連するタスクを継続でき、reset()チームと参加者の状態をクリアする機能も備えています。この動作は継続に役立ちますが、無関係なタスクが古いコンテキスト、未完了の委任、または以前の前提条件を引き継ぐと、ループのように見えることがあります。
await team.reset()
result = await team.run(task=new_unrelated_task)
安定版エージェントAPIでは、呼び出し元に対し、会話履歴全体を手動で再生するのではなく、各呼び出しで新しいメッセージのみを渡すよう警告しています。エージェントが状態を保持している状態で履歴全体を再注入すると、コンテキストが重複し、反復的な動作が強化される可能性があります。
ループの再現が難しい場合は、各ターンについて、誰が行動したか、なぜその人が選ばれたか、どのような行動を試みたか、その後何が変わったか、という4つの質問に答えられるだけの情報を記録してください。AutoGenはトレースと可観測性をサポートしており、安定版トレースガイドではAgentChatチームのトレース方法を示しています。AutoGenの公式トレースドキュメントを参照してください。
最低限、ログに記録してください。
TaskResult.stop_reasonランニングが終了するとき。非常に効果的な診断方法の一つは、「同じアクション、同じ状態」の検出です。同じエージェントが同じツールを同等の引数で呼び出し、共有状態ハッシュが数ターンにわたって変化していない場合、実行を停止し、進行しないループとしてマークします。このチェックは、AutoGenに組み込まれた機能ではなく、アプリケーションロジック内に実装する必要がありますが、トークンやメッセージの制限では事後的にしか検出できない種類の障害を捕捉できます。
既存のAutoGen AgentChatアプリケーションの場合、保守的なベースラインは次のとおりです。
max_tool_iterationsエージェントが本当に複数の手順からなるツールシーケンスを必要とする場合を除き、小規模に保つ。ループを単にmax_messages25から100に増やすことで解決しないでください。それでは失敗時のコストが変わるだけで、ロジックは変わりません。終了条件が実際にチームに組み込まれているかどうかを確認する前に、より長いシステムプロンプトを追加しないでください。2人のエージェントが両方とも「最終レビュー」を担当しないようにしてください。次のモデル呼び出しで再試行するかどうかを決定する必要がある場合は、曖昧なツール文字列を返さないでください。また、最終的に停止する実行が正常であると想定しないでください。常に安全上限に達するワークフローは、依然として機能不全を起こしています。
既存の AutoGen アプリケーションを保守している場合は、これらの修正は適切であり、最新のドキュメントも引き続き利用可能です。ただし、新規システムまたは大規模なオーケストレーションの書き換えの場合は、保守モードの状態によって判断が変わります。Microsoft は現在、新規ユーザーを Microsoft Agent Framework に誘導しており、その移行ドキュメントでは、AutoGen のイベント駆動型のコアおよび高レベルチームから、型付きグラフベースのワークフローへの移行について説明しています。これは、AutoGen ループを直ちに移行する必要があるという意味ではありませんが、AutoGen 固有のオーケストレーション作業にかかるコストと、サポートされている後継システムへの移行コストを比較検討する必要があることを意味します。
したがって、最も短く確実なデバッグ手順は、実行範囲を限定し、繰り返される遷移を特定し、進行状況を可視化し、最後に終了処理を確定させることです。これら4つの要素が揃えば、ほとんどの「無限」AutoGenループは、再現して修正できる通常のワークフローバグになります。
構造化されたSEOタイトルとメタディスクリプションを一括生成し、出力を検証し、人間によるレビューが必要な結果をフラグ付けする、ローカルなOllamaワークフローを構築します。
Use this free modern real estate listing presentation PowerPoint blueprint to organize pricing, marketing, property prep, agent value, and seller next steps.
明確な労務費、材料費、計算式、利益率、除外項目、印刷可能な顧客合計金額を含む、印刷可能な建設工事見積書テンプレートをExcelで作成します。
Build stronger Luma Dream Machine video prompts with a practical cinematic lighting formula, reusable recipes, examples, and a fast troubleshooting checklist.
Build a minimalist tech startup investor pitch deck in PowerPoint with the right slide order, clear design rules, traction metrics, and investor-ready appendix.
Excelがコード、ID、分数を日付に変換しないようにするには、テキスト形式、アポストロフィ、インポート制御、および最新のMicrosoft 365オプションを使用してください。
サンプリング作業の削減、解像度とバッチサイズの制御、ノードの簡素化、キャッシュの使用、VRAMとアテンションの安全な調整により、ComfyUI SDXLのレンダリング速度を向上させます。
Build a practical rental property income and expense tracker in Excel with clear categories, formulas, monthly summaries, and tax-ready recordkeeping guidance.
Ollama、AnythingLLM、ローカル埋め込み、RAGを使用して、プライベートなローカルAI知識ベースを構築します。4つのステップからなるセットアップ、プライバシーチェック、テスト、バックアップについて学びましょう。
長文文書解析におけるコンテキストウィンドウエラーを修正するには、入力データのトリミング、ファイルの分割、検索機能の利用、そして最終的な回答が元の文書を網羅しているかどうかの検証を行う。