Knowledge
O módulo Knowledge fornece um cliente simples para consultar as bases de conhecimento internas da Tech4.ai. Ele encapsula a chamada HTTP para o endpoint interno e retorna um objeto tipado com a resposta, incluindo a resposta gerada pelo LLM e os trechos (chunks) mais relevantes.
📋 Método Principal
query(query, knowledge_base_id, top_k=3, rerank=False, extra_context=None)
Realiza a consulta à base de conhecimento e retorna QueryResponse.
Parâmetros:
query(str): Consulta em linguagem naturalknowledge_base_id(UUID | str): ID da base de conhecimento a ser consultadatop_k(int): Quantidade de resultados a retornar (padrão: 3)
Retorno (QueryResponse):
query_id(UUID | None)status(RetrieveStatus):OKouLOW_SCOREchunks(RetrieveResults):chunk_search_results(List[ChunkSearchResult])score_threshold(float)
answer(str): Resposta gerada pelo LLM (pode ser vazia quandoLOW_SCORE)
📥 Exemplo de Entrada e Saída
Entrada
{
"query": "O que é Sql"
}
Saída (exemplo real, resumida)
{
"query_id": "0c82f6e3-f990-4b65-87ff-e9302c25e58d",
"status": "ok",
"chunks": {
"chunk_search_results": [
{
"id": "5a398b62-0dd5-5e2a-95cf-bd1ac4891014",
"document_id": "f8888748-cb70-4909-bd1f-2fa5e5ea6629",
"score": 0.5716894524282553,
"text": "# Integração da linguagem SQL com as aplicações (parte 3)\n\n## SQL Estendida\n- Extensão da SQL criada para incluir estruturas procedurais à linguagem ...",
"metadata": {
"chunk_order": 9,
"document_type": "pdf",
"page_number": 10,
"semantic_rank": null,
"full_text_rank": null,
"associated_query": "O que é Sql"
}
},
{
"id": "d2535bbd-dae4-5935-8ab5-93a31cb498b0",
"document_id": "8914b5c0-f107-4977-8a11-3ac8b61e4ff5",
"score": 0.5637222528457642,
"text": "# Integração da linguagem SQL com as aplicações (parte 3)\n\n- SQL Estendida ...",
"metadata": {
"chunk_order": 9,
"document_type": "pdf",
"page_number": 10,
"semantic_rank": null,
"full_text_rank": null,
"associated_query": "O que é Sql"
}
},
{
"id": "2208f7fc-bf13-5a76-b719-50b790c72c3f",
"document_id": "65d8d169-5e1c-475a-b5a4-6c26e82a79aa",
"score": 0.5490762264087075,
"text": "# Comandos SQL\n- begin (begin transaction) ...",
"metadata": {
"chunk_order": 3,
"document_type": "pdf",
"page_number": 4,
"semantic_rank": null,
"full_text_rank": null,
"associated_query": "O que é Sql"
}
}
],
"score_threshold": 0.45
},
"answer": "Com base no contexto fornecido, 'SQL' pode se referir a: SQL Estendida (PL/SQL, PL/pgSQL, Transact-SQL) ... também menciona comandos de transação como begin, commit, rollback ..."
}
📝 Exemplo Prático
Consultar base de conhecimento com formatação de resposta
def consultar_base_de_conhecimento(consulta: str):
"""
Consulta a base de conhecimento através da API de conhecimento
"""
try:
query_span = action_span.span("consulta na base", {"query": consulta})
response = knowledge.query(
query=consulta,
knowledge_base_id=secrets["KNOWLEDGE_BASE_ID"],
)
query_span.end({"response": response.model_dump()})
action_span.event("response", {"status": response.status, "ans": response.answer})
# Compare sempre com o Enum, não com string
if response.status != RetrieveStatus.OK or not response.answer:
return ResponseToUser(
message="Não encontrei informações específicas sobre sua consulta.",
status=ResponseStatus.SUCCESS, # SUCCESS para fluxo normal sem resposta específica
)
message = response.answer
if response.chunks.chunk_search_results:
sources_count = len(response.chunks.chunk_search_results)
message += f"\n\n*Baseado em {sources_count} fonte(s) da base de conhecimento.*"
return ResponseToUser(message=message, status=ResponseStatus.SUCCESS)
except Exception as e:
action_span.event("error", {"error": str(e)})
return ResponseToUser(
message=(
"Peço desculpas, estamos enfrentando problemas técnicos no momento. "
"Tente novamente em alguns instantes."
),
status=ResponseStatus.ERROR,
metadata={
"error_type": "knowledge_api_error",
"error_message": str(e),
},
)
💡 Dicas de Uso
Melhores Práticas
- Enum de status: compare com
RetrieveStatus.OKem vez de strings top_k: ajuste para balancear precisão e cobertura (3–5 costuma funcionar bem)
📊 Estruturas de Dados
Enums e Classes Principais
RetrieveStatus(Enum):OK,LOW_SCOREChunkMetadata: metadados do trecho (ordem, tipo de documento, página, ranks, query associada)ChunkSearchResult:id,document_id,score,text,metadataRetrieveResults:chunk_search_results(lista deChunkSearchResult),score_thresholdRetrieveResponse:query_id,status,chunksQueryResponse(extendsRetrieveResponse):answer