Pinecone向量数据库插入查询异常:查询无匹配结果排查
Pinecone查询无匹配结果问题排查
原始JSON数据
[{ "name": "Pocketbase", "description": "包含Realtime database相关描述文本", "product_url": "https://pocketbase.io", "github_url": "https://github.com/pocketbase/pocketbase", "more_details": "包含Realtime database特性、使用场景等文本", "open_source": true, "expand": { "type": [{}] } }]
存入Pinecone前的文本转换代码
const tagList = data.expand.type.map(t => t.name); let textTempalte = `软件名称: ${data.name} 描述: ${data.description} 适用场景: ${tagList.join(',')} 是否开源: ${data.open_source ? "是" : "否"}`; if (data.more_detail.length > 0) { textTempalte = textTempalte.concat(`\n更多细节: ${tech.more_detail}`); } if (data.product_url.length > 0) { textTempalte = textTempalte.concat(`\n产品主页: ${tech.product_url}`); } if (data.github_url.length > 0) { textTempalte = textTempalte.concat(`\nGithub链接: ${tech.github_url}`); }
嵌入生成与Pinecone查询代码
// 生成嵌入向量 const oaiResponse = await openai.createEmbedding({ model: "text-embedding-ada-002", input: "realtime database", }); const vector: QueryRequest = { topK: 10, vector: oaiResponse.data.data[0].embedding, includeMetadata: true, namespace: 'Default Project', }; const resp = await index.query({ queryRequest: vector, }); console.log(resp.mactches.length); // 输出0
问题
我用text-embedding-ada-002生成嵌入向量并存入Pinecone索引,但查询包含“Realtime database”的文本时,返回匹配结果数为0(该内容实际存在于原始数据的description和more_details字段中)。请问哪里操作出错了?
错误排查与修复
- 字段名不匹配
原始JSON中是more_details,但代码中判断的是data.more_detail(少了s),导致more_details里的内容永远不会被加入到嵌入文本中,自然无法被检索到。 - 变量引用错误
拼接文本时用了tech.more_detail、tech.product_url、tech.github_url,但实际应该用data变量,导致这些字段内容无法正确加入嵌入文本。 - 拼写错误
textTempalte应为textTemplate,虽不影响运行但属于不良编码习惯;resp.mactches应为resp.matches,这会导致你读取的是不存在的属性,实际可能有匹配结果但未正确获取。
- 标签列表无效
原始expand.type是[{}],map(t => t.name)会得到空数组,拼接后为空白,虽不会直接导致无匹配,但会影响向量质量。
修复后的文本转换代码:
const tagList = data.expand.type.map(t => t.name).filter(Boolean); // 过滤空值 let textTemplate = `软件名称: ${data.name} 描述: ${data.description} 适用场景: ${tagList.join(',') || '无'} 是否开源: ${data.open_source ? "是" : "否"}`; if (data.more_details?.length > 0) { textTemplate += `\n更多细节: ${data.more_details}`; } if (data.product_url?.length > 0) { textTemplate += `\n产品主页: ${data.product_url}`; } if (data.github_url?.length > 0) { textTemplate += `\nGithub链接: ${data.github_url}`; }
额外确认项:
- 存入Pinecone时需使用修复后的
textTemplate生成嵌入向量,且存入的namespace需与查询时的'Default Project'一致; - 需确保原始数据的
description和more_details确实包含“Realtime database”相关内容,而非示例中的占位文本。
内容的提问来源于stack exchange,提问作者Ratnadeep Bhattacharyya
相关产品推荐
相关产品推荐

