fix: degrade elder analysis when knowledge retrieval fails

This commit is contained in:
2026-07-05 02:33:26 -07:00
parent b586756226
commit 6ed7508983

View File

@@ -208,20 +208,23 @@ export async function generateElderAiAnalysis(
: { success: true as const, data: { results: [] } };
if (!knowledgeResults.success) {
await saveFailedAnalysis({
context,
await recordAuditLog({
actor: context.account,
organizationId: residentContext.context.organizationId,
elderId,
dataScopes: residentContext.context.dataScopes,
category: "retrieval_failed",
action: "ai.knowledge.retrieve",
targetType: "elder",
targetId: elderId,
result: "failure",
reason: getBriefErrorReason("retrieval_failed"),
});
return { success: false, reason: knowledgeResults.reason, status: knowledgeResults.status };
}
const dataScopes = knowledgeResults.data.results.length > 0
const knowledgeItems = knowledgeResults.success ? knowledgeResults.data.results : [];
const knowledgeUnavailableReason = knowledgeResults.success ? "" : getBriefErrorReason("retrieval_failed");
const dataScopes = knowledgeItems.length > 0
? [...residentContext.context.dataScopes, "knowledge" as const]
: residentContext.context.dataScopes;
const knowledgeCitations: AiCitation[] = knowledgeResults.data.results.map((item, index) => ({
const knowledgeCitations: AiCitation[] = knowledgeItems.map((item, index) => ({
id: `kb-${index + 1}`,
sourceType: "knowledge",
sourceId: item.chunkId,
@@ -238,10 +241,11 @@ export async function generateElderAiAnalysis(
"输出 JSON 字段overallRiskLevel(low|medium|high|critical|unknown), summary, keyFindings, recommendations, dataGaps, citations, confidence, modelSummary。",
"keyFindings[] 字段category, severity(info|warning|critical), evidence, citationIds。",
"recommendations[] 字段title, priority(low|normal|high|urgent), rationale, suggestedNextStep, citationIds。",
knowledgeUnavailableReason ? `知识库检索不可用:${knowledgeUnavailableReason}。请在 dataGaps 中包含“知识库检索不可用,分析未使用内部知识库”。` : "",
`modelSummary 固定为 {"provider":"openai-compatible","chatModel":"${runtimeConfig.config.chatModel}","embeddingModel":"${runtimeConfig.config.embeddingModel}"}。`,
`可用 citations${JSON.stringify(citations)}`,
`住民上下文:\n${residentContext.context.promptContext}`,
`知识库片段:\n${knowledgeResults.data.results.map((item, index) => `[kb-${index + 1}] ${item.title}\n${item.content}`).join("\n\n") || "无"}`,
`知识库片段:\n${knowledgeItems.map((item, index) => `[kb-${index + 1}] ${item.title}\n${item.content}`).join("\n\n") || "无"}`,
].join("\n\n");
let rawOutput: unknown;
@@ -275,7 +279,15 @@ export async function generateElderAiAnalysis(
return { success: false, reason: getBriefErrorReason("schema_validation_failed"), status: 502 };
}
const normalizedOutput = normalizeCitations(output, citations);
const normalizedOutput = normalizeCitations(
knowledgeUnavailableReason
? {
...output,
dataGaps: [...output.dataGaps, "知识库检索不可用,分析未使用内部知识库"],
}
: output,
citations,
);
const database = getDatabase();
const rows = await database
.insert(elderAiAnalyses)