from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableLambda
def montar_contexto(resultados: List[Tuple[Document, float]]) -> str:
partes = []
for i, (doc, score) in enumerate(resultados, start=1):
source = doc.metadata.get("source", "desconhecido")
page = doc.metadata.get("page", "desconhecida")
trecho = doc.page_content.strip()
partes.append(
f"[{i}] source={source} | page={page} | score={score:.4f}\n{trecho}"
)
return "\n\n".join(partes)
def montar_fontes(resultados: List[Tuple[Document, float]]):
fontes = []
for i, (doc, score) in enumerate(resultados, start=1):
fontes.append(
{
"id": i,
"source": doc.metadata.get("source", "desconhecido"),
"page": doc.metadata.get("page", "desconhecida"),
"score": round(float(score), 4),
}
)
return fontes
def recuperar_contexto_e_fontes(entrada: dict) -> dict:
pergunta = entrada["question"]
k = int(entrada.get("k", 4))
resultados = vectorstore.similarity_search_with_relevance_scores(pergunta, k=k)
return {
"question": pergunta,
"context": montar_contexto(resultados),
"fontes": montar_fontes(resultados),
}0 views