You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flowise中基于API传入的变量使用不同向量存储/集合?

在Flowise中基于API变量切换向量存储/集合的可行方案

方案1:动态切换同一向量存储的集合(最简单)

如果只是切换同一向量存储(如Pinecone、Weaviate)下的不同集合,直接用模板变量绑定集合名即可:

  • 打开对应向量存储组件(比如Pinecone),将「集合名/索引名」字段的值从固定字符串改为模板变量,比如 {{input.collectionName}}
  • 调用Flowise API时,在请求体的input字段中传入collectionName参数,值为目标集合的名称
  • 示例API请求体:
{
  "question": "你的问题",
  "input": {
    "collectionName": "user-123-docs"
  }
}

方案2:用子流+自定义JS切换不同向量存储/逻辑

如果需要切换不同类型的向量存储(如Pinecone切换到Weaviate),可以用子流拆分逻辑,再通过自定义JS路由:

  1. 创建两个独立子流:
    • 子流1:配置向量存储A的检索流程(Embedding + 向量存储A + 检索组件)
    • 子流2:配置向量存储B的检索流程(Embedding + 向量存储B + 检索组件)
  2. 在主流中添加Custom Javascript组件,编写路由逻辑,根据API传入的变量调用对应子流:
// 假设API传入的变量是storageType,值为"pinecone"或"weaviate"
if (input.storageType === "pinecone") {
    // 替换为你的子流1的ID,可在子流的「设置」页面查看
    return await runSubflow("subflow-xxxx-xxxx", input);
} else if (input.storageType === "weaviate") {
    // 替换为你的子流2的ID
    return await runSubflow("subflow-yyyy-yyyy", input);
}
  1. 调用API时传入storageType参数,即可触发对应子流的检索逻辑

方案3:自定义组件实现全逻辑切换

如果需要更灵活的控制,可直接编写自定义组件实现向量存储的动态选择:

  1. 在Flowise中添加Custom Component,选择Javascript类型
  2. 编写代码,根据API传入的变量实例化对应向量存储并执行检索,示例代码:
// 引入对应向量存储的SDK,注意要确保Flowise的环境中已安装依赖
const { Pinecone } = require("@pinecone-database/pinecone");
const { WeaviateClient } = require("weaviate-ts-client");

module.exports = async function run(input) {
    // 从API传入的input中获取切换变量和必要参数
    const { storageType, collectionName, embedding } = input;
    
    if (storageType === "pinecone") {
        const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY });
        const index = pinecone.Index(collectionName);
        const results = await index.query({
            queryEmbedding: embedding,
            topK: 5,
            includeMetadata: true
        });
        // 格式化结果为Flowise后续组件可识别的格式
        return results.matches.map(match => ({
            pageContent: match.metadata.text || "",
            metadata: match.metadata
        }));
    } else if (storageType === "weaviate") {
        const client = WeaviateClient({
            scheme: "https",
            host: process.env.WEAVIATE_HOST,
            apiKey: process.env.WEAVIATE_API_KEY
        });
        const results = await client.graphql.get()
            .withClassName(collectionName)
            .withFields("text _additional { distance }")
            .withNearVector({ vector: embedding })
            .withLimit(5)
            .do();
        return results.data.Get[collectionName].map(item => ({
            pageContent: item.text || "",
            metadata: { distance: item._additional.distance }
        }));
    }
    // 默认返回空结果或抛出错误
    return [];
};
  1. 将该自定义组件与Embedding组件、LLM组件串联,API调用时传入storageType、collectionName等参数即可

注意事项

  • 若之前用If-Else组件失败,大概率是因为Flowise的If-Else组件无法正确传递向量存储实例的上下文,改用子流或自定义组件可避免这个问题
  • 使用自定义组件时,需确保Flowise所在环境已安装对应向量存储的SDK依赖(可通过npm install在Flowise项目目录下安装)

内容的提问来源于stack exchange,提问作者robbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:50:13