为什么我没有看到我的 firestore 矢量嵌入搜索的任何返回结果?

问题描述 投票:0回答:1

我已经根据 firebase 文档制作了一个复合索引

 gcloud alpha firestore indexes composite create \
--project=[Insert Project Name Here]
--collection-group=elements --query-scope=COLLECTION \
--field-config=vector-config='{"dimension":"1536","flat": "{}"}',field-path=embedding

效果很好,我可以在

gcloud firestore indexes composite describe [Insert Index Name Here]

下清楚地看到它

然后我尝试使用 onCall 函数查询数据库。

export const vectorSearch = functions.https.onCall(async (data, context) => {
  const { query, quantity } = data;

  if (!query) {
    throw new functions.https.HttpsError('failed-precondition', 'query is required');
  }

  if (!quantity) {
    throw new functions.https.HttpsError('failed-precondition', 'quantity is required');
  }

  try {
    console.log(`Creating embedding for ${query}`)
    const embeddingResponse = await openai.embeddings.create({
      model: "text-embedding-3-small",
      input: query,
      encoding_format: "float",
    });

    const embedding = embeddingResponse.data[0].embedding;
    console.log(`Embedding:`, embedding)

    const vectorQuery: VectorQuery = firestore.collection('elements').findNearest('embedding', FieldValue.vector(embedding), {
      limit: quantity,
      distanceMeasure: 'COSINE'
    });

    const snapshot: VectorQuerySnapshot = await vectorQuery.get();
    console.log(`Snapshot:`, snapshot)

    const formattedData: any = {};
    snapshot.docs.forEach((doc) => {
      formattedData[doc.id] = doc.data();
    });

    return { docs: formattedData };
  } catch (error) {
    console.error('Error querying database:', error);
    throw new functions.https.HttpsError('internal', 'Error querying database');
  }
});

问题

当我调用此函数时,尽管相关集合下有文档,但我没有得到任何条目。我没有收到任何错误 - 只是响应中没有出现任何文档。不过,我应该看到我在

quantity
字段中指定的文档数量。这是为什么?

node.js google-cloud-firestore vector openai-api word-embedding
1个回答
0
投票

我将每个嵌入字段作为数组存储在我的 firestore 数据库中。

[0.1, 0.2, 0.3]

我应该将每个嵌入存储为

vector
的类型。

FieldValue.vector([0.1, 0.2, 0.3])

Firebase 忽略了不是向量的字段,因此搜索索引为空,因此没有返回任何文档。

© www.soinside.com 2019 - 2024. All rights reserved.