# Para cada Tool registrada no sistema (depende da proposta do cliente) criamos uma Tool do Vertex AI
fortoolintools:
vertex_tools.append(
Tool(
@ -34,6 +35,14 @@ class LLMService:
returnvertex_tools
"""
Fluxoprincipaldegeraçãoderesposta.
Parâmetros:
-message:mensagemdousuário
-tools:listadeferramentasdisponíveis
-history:históricodaconversa(memória)
"""
asyncdefgenerate_response(
self,
message:str,
@ -43,6 +52,9 @@ class LLMService:
vertex_tools=self.build_vertex_tools(tools)# Convertendo tools para formato do Vertex
# Inicia uma sessão de chat com:
# - histórico (se existir)
# - ferramentas disponíveis
chat=self.model.start_chat(
history=historyor[],
tools=vertex_tools
@ -50,8 +62,13 @@ class LLMService:
response=chat.send_message(message)
# Pegamos a primeira resposta candidata do modelo (a com maior coerência com o assunto)
# Estrutura interna:
# response.candidates -> lista de possíveis respostas
# content.parts -> partes da resposta
part=response.candidates[0].content.parts[0]
# Verificação se o modelo decidiu chamar alguma função, se decidiu, retornará o nome da função que ele quer executar e o argumento que ele extraiu da mensagem do usuário.
ifpart.function_call:
return{
"response":None,
@ -61,6 +78,7 @@ class LLMService:
}
}
# Caso não ocorra a chamada de uma função, significa que o modelo respondeu diretamente em texto