これは些細なことだが、言及する価値がある。エージェントの利点の一つは "自己修復 "です。短いタスクのために、大規模な言語モデル(LLM)は失敗したツールを呼び出すかもしれません。優れたLLMであれば、エラーメッセージやスタックトレースを読み、その後のツール呼び出しで何を変更する必要があるかを把握できる可能性が高い。
ほとんどのフレームワークはこれを実装しているが、他の11の要素を実装することなく、これだけを実装することもできる。以下に例を挙げる:
thread = {"events": [initial_message]}
while True:
next_step = await determine_next_step(thread_to_prompt(thread))
thread["events"].append({
"type": next_step.intent,
"data": next_step,
})
try:
result = await handle_next_step(thread, next_step) # 我们的 switch 语句
except Exception as e:
# 如果我们得到一个错误,我们可以将它添加到上下文窗口中再试一次
thread["events"].append({
"type": 'error',
"data": format_error(e),
})
# 在这里循环,或者做任何其他事情来尝试恢复
特定のツール呼び出しに対してerrorCounterを実装したり、1つのツールの試行回数を3回程度に制限したり、ユースケースに合った他のロジックを使用することもできる。
consecutive_errors = 0
while True:
# ... 现有代码 ...
try:
result = await handle_next_step(thread, next_step)
thread["events"].append({
"type": next_step.intent + '_result',
data: result,
})
# 成功!重置错误计数器
consecutive_errors = 0
except Exception as e:
consecutive_errors += 1
if consecutive_errors < 3:
# 进行循环并重试
thread["events"].append({
"type": 'error',
"data": format_error(e),
})
else:
# 中断循环,重置部分上下文窗口,上报给人类,或做任何你想做的事
break
}
}
ある連続エラーのしきい値に達したら、次のことをする良い機会かもしれない。 人類への報告 モデル化された決定によって、あるいは決定論的に制御の流れを引き継ぐことによって。
長所だ:
- 自己治癒大規模な言語モデルは、エラーメッセージを読み取り、その後のツール呼び出しで何を変更する必要があるかを見つけることができる。
- 耐久性ツールの呼び出しに失敗しても、インテリジェンスは実行し続けることができる。
この方法を使いすぎると、インテリジェンスがコントロールできなくなり、何度も同じミスを繰り返すことになりかねないからだ。
この時点ではね。要素8 - コントロール・フローをコントロールする 歌で応える 要素3 - コンテクスト・ビルドをコントロールする 元のエラーメッセージを戻すだけでなく、その表現を完全にリファクタリングしたり、コンテキスト・ウィンドウから以前のイベントを削除したり、スマート本体を軌道に乗せるために有効だと思われる決定論的アプローチを取ることができる。
しかし、ミスが手に負えなくなるのを防ぐ一番の方法は、次のことを採用することだ。 要素10「小さく、集中したインテリジェンス .