diff --git a/src/app/api/search/ai/route.ts b/src/app/api/search/ai/route.ts index 5097063..c0391ce 100644 --- a/src/app/api/search/ai/route.ts +++ b/src/app/api/search/ai/route.ts @@ -9,13 +9,15 @@ if (!N8N_WEBHOOK_URL) { throw new Error('N8N_AI_SEARCH_WEBHOOK environment variable is not set') } -// n8n 返回的简化搜索结果 Schema -const N8NSearchResultSchema = z.array( - z.object({ - id: z.string(), - similarity: z.number(), - }) -) +// n8n 返回的搜索结果 Schema(统一格式) +const N8NSearchResponseSchema = z.object({ + results: z.array( + z.object({ + id: z.string(), + similarity: z.number(), + }) + ), +}) export async function POST(request: Request) { try { @@ -50,20 +52,9 @@ export async function POST(request: Request) { // n8n 返回数据 const n8nData = await n8nResponse.json() - // 兼容多种返回格式 - let n8nResults: Array<{ id: string; similarity: number }> - if (Array.isArray(n8nData)) { - // 数组格式: [{ id: "...", similarity: 0.59 }] - n8nResults = N8NSearchResultSchema.parse(n8nData) - } else if (n8nData.id && typeof n8nData.similarity === 'number') { - // 单个对象格式: { id: "...", similarity: 0.59 } - n8nResults = [n8nData as { id: string; similarity: number }] - } else if (n8nData.data && Array.isArray(n8nData.data)) { - // 包装在 data 字段: { data: [{ id: "...", similarity: 0.59 }] } - n8nResults = N8NSearchResultSchema.parse(n8nData.data) - } else { - throw new Error('Invalid n8n response format') - } + // 解析 n8n 响应(只支持 {results: [{id, similarity}, ...]} 格式) + const parsed = N8NSearchResponseSchema.parse(n8nData) + const n8nResults = parsed.results if (n8nResults.length === 0) { return NextResponse.json({ projects: [], pagination: { total: 0, page: 1, limit: validatedQuery.limit || 20 } }) @@ -75,9 +66,6 @@ export async function POST(request: Request) { // 从数据库批量获取完整项目数据 const projects = await getProjectsByIds(projectIds) - // 创建 similarity 映射表(ID -> similarity) - const similarityMap = new Map(n8nResults.map((r) => [r.id, r.similarity])) - // 将 similarity 合并到项目数据中,并按 n8n 返回的顺序排序 const results: AISearchResultItem[] = n8nResults .map((n8nItem) => { diff --git a/src/components/search/AISearchResults.tsx b/src/components/search/AISearchResults.tsx index d8c39a3..fbf7640 100644 --- a/src/components/search/AISearchResults.tsx +++ b/src/components/search/AISearchResults.tsx @@ -33,44 +33,24 @@ export function AISearchResults({ results, locale, translations }: AISearchResul } return ( -