Esse é um ponto secundário, mas vale a pena mencionar. Um dos benefícios de um agente é a "autocorreção": para uma tarefa curta, um modelo de linguagem grande (LLM) pode chamar uma ferramenta que falha. Há uma boa chance de que um bom LLM seja capaz de ler uma mensagem de erro ou um rastreamento de pilha e descobrir o que precisa ser alterado nas chamadas de ferramentas subsequentes.
A maioria das estruturas implementa isso, mas você também pode implementar apenas isso sem precisar implementar os outros 11 elementos. Aqui está um exemplo:
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),
})
# 在这里循环,或者做任何其他事情来尝试恢复
Talvez você queira implementar um errorCounter para chamadas de ferramentas específicas, limitar o número de tentativas de uma única ferramenta a cerca de 3 ou usar qualquer outra lógica que se adeque ao seu caso de uso.
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
}
}
Quando um determinado limite de erro contínuo é atingido, pode ser um bom momento para Relatório para a Humanidade por meio de decisões de modelagem ou assumindo deterministicamente o fluxo de controle.
Prós:
- autocuraUm modelo de linguagem grande pode ler as mensagens de erro e descobrir o que precisa ser alterado nas chamadas subsequentes para a ferramenta.
- durabilidade: mesmo que a invocação de uma ferramenta falhe, a inteligência pode continuar a ser executada
Tenho certeza de que, se você usar esse método em excesso, suas inteligências podem ficar fora de controle e repetir os mesmos erros várias vezes.
Neste ponto.Elemento 8 - Assuma o controle do seu fluxo de controle responder cantando Elemento 3 - Assuma o controle de seus builds contextuais é útil: você não precisa apenas colocar a mensagem de erro original de volta, mas pode refatorar completamente sua representação, remover eventos anteriores da janela de contexto ou adotar qualquer abordagem determinística que considere adequada para colocar o corpo inteligente de volta nos trilhos.
Mas a principal maneira de evitar que os erros saiam do controle é adotar Elemento 10 - Inteligência pequena e focada .