Workflow agent({schema})がスキーマバリデーション失敗で無限ループする問題を修正
原文(日本語に翻訳)
Workflow の agent({schema}) サブエージェントが、スキーマバリデーション失敗を繰り返す際に5回の試行後に中断する代わりに無限ループしていた問題を修正しました。
原文(英語)
Fixed Workflow agent({schema}) subagents looping forever on repeated schema validation failures instead of aborting after 5 attempts
概要
ワークフロースクリプトの agent() 関数で schema オプションを使用した際、サブエージェントがスキーマバリデーションに繰り返し失敗すると、5回の試行後に中断すべきところを無限ループし続けるバグがありました。この修正により、5回の試行後に適切に中断し、null を返すようになりました。
基本的な使い方
スキーマ付きエージェントの使用
javascript
const RESULT_SCHEMA = {
type: "object",
properties: {
bugs: {
type: "array",
items: { type: "string" }
}
},
required: ["bugs"]
}
const result = await agent("バグを見つけてください", {
schema: RESULT_SCHEMA
})
// バリデーション失敗が5回続くと null を返す(以前は無限ループ)実践例
修正後の安全な動作
javascript
export const meta = {
name: 'bug-finder',
description: 'バグを検出するワークフロー',
}
const BUGS_SCHEMA = {
type: "object",
properties: {
bugs: { type: "array", items: { type: "string" } },
severity: { type: "string", enum: ["low", "medium", "high"] }
},
required: ["bugs", "severity"]
}
const result = await agent("コードのバグを分析してください", {
schema: BUGS_SCHEMA
})
if (result === null) {
// 修正後:5回の試行後に null が返される
log("エージェントがスキーマバリデーションに失敗しました")
} else {
log(`バグ ${result.bugs.length} 件を発見`)
}null のフィルタリング
複数のエージェントを並行実行する場合:
javascript
const results = await parallel(items.map(item => () =>
agent(`分析: ${item}`, { schema: SCHEMA })
))
// null (失敗したエージェント) をフィルタリング
const validResults = results.filter(Boolean)注意点
- スキーマバリデーション失敗が5回続くと
agent()はnullを返します nullを返した場合は、スキーマ定義かエージェントへの指示を見直してください- スキーマは明確で実現可能な構造を定義することが重要です
- 複雑なスキーマよりもシンプルなスキーマの方がバリデーション成功率が高くなります
- 結果の配列では
.filter(Boolean)でnullをフィルタリングすることを推奨します
関連情報
- Workflow スクリプトの
agent()関数のschemaオプション - Workflow ツール ドキュメント