Skip to content

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 をフィルタリングすることを推奨します

関連情報