5分钟学会LLM开发系列教程(六)LangChain集成Milvus向量数据库

milvus

  • 下载 docker-compose,本地启动 milvus 服务
sh 复制代码
# Download the configuration file
$ wget https://github.com/milvus-io/milvus/releases/download/v2.5.6/milvus-standalone-docker-compose.yml -O docker-compose.yml

# Start Milvus
$ sudo docker compose up -d

attu 可视化界面

github.com/zilliztech/...

sh 复制代码
docker run -p 8000:3000 -e MILVUS_URL={milvus server IP}:19530 zilliz/attu:v2.5

集合的状态

集合的基本属性包括名称、创建时间和状态,状态分为未加载、已加载和已释放。 副本用于提高可靠性、查询性能和负载均衡,默认情况下只有一个副本。 集合需要加载到内存中才能创建和使用索引,因为Milvus采用内存计算架构。 索引类似于书的目录,帮助快速查找数据,自动选择最适合的索引类型。 度量类型有余弦相似度、欧几里德距离、内积和汉明距离,用于计算向量相似性。

  • 必须先加载load集合到内存中才能使用

    • 采用了内存计算的加载
    • 数据存在磁盘上
    • 但是搜索和索引I需要要内存中进行
    • 加载操作就是把集台数据从磁盘读取内存
  • 集合的生命周期

    • 已创建但未加载 :数据在磁盘中、不可以进行搜索操作不占用内存资源
    • 已加载数据在内存中、可以进行所有的操作占用内存资源
    • 已释放集合数据从内存中释放回到未加载的状态释放内存资源

索引

向量搜索

  1. 支持向量搜索,通过输入向量或实体ID进行搜索,结果按匹配程度排序。
  2. 搜索参数包括TopK(返回最相似的条数)、一致性模式、字段过滤和分组功能。
  • 一致性包括
    1. 强一致性(Strong Consistency)

      • 机制:通过同步复制(所有副本写入完成才返回成功)和分布式事务保证数据的强一致性。
      • 特点:确保任何写入操作完成后,后续读取都能立即获取最新数据,但可能增加延迟。
      • 适用场景:金融、实时推荐等对数据准确性要求极高的场景。
    2. 有界一致性(Bounded Staleness)【一般选择】

      • 机制:允许数据在一定时间或版本范围内存在短暂不一致,但保证最终一致。
      • 特点:通过设置"可容忍的陈旧时间/版本数"平衡性能与一致性。例如,允许数据最多落后 5 秒。
      • 适用场景:高并发写入但允许短暂延迟的场景,如社交媒体的动态推送。
    3. 会话一致性(Session Consistency)

      • 机制:确保同一会话(客户端连接)内的操作能读取到自身写入的最新数据,跨会话可能不一致。
      • 特点:适用于需要用户级一致性的场景,如用户个人数据的实时更新。
    4. 最终一致性(Eventually Consistent)

      • 机制:不保证写入后立即可读,依赖异步复制逐步同步数据。
      • 特点:延迟低但可能读取到旧数据,适合大规模数据分析等对实时性要求不高的场景。
  1. 向量搜索的参数设置包括Level(搜索级别)和Radius(搜索半径),影响搜索的精细程度和结果数量。
  • Level 越小,速度越快,但是损失相似搜索质量
  1. Range filter(范围过滤器)用于进一步筛选搜索结果,结合Radius使用可以查找特定范围内的结果

LangChain 封装 Milvus

  1. LangChain 封装的 milvus 还不够完善,建议增删改,用原生的 Milvus 的api。想要检索查询,集成到 chain中,可以用封装的
js 复制代码
import { MilvusClient } from '@zilliz/milvus2-sdk-node';

this.milvusClient = new MilvusClient({
      address: 'localhost:19530',
      timeout: 5000,
    });
    

  /**
   * 向量插入
   */
  async insert() {
    await this.milvusClient.useDatabase({ db_name: 'test' });
    const data = [
      {
        name: '今天天气真好,大太阳',
        name_vector: await this.embeddingsModel.embedQuery(
          '今天天气真好,大太阳',
        ),
      },
    ];
    const res = await this.milvusClient.insert({
      collection_name: 'art',
      fields_data: data,
    });
    console.log('=>(study.milvus.service.ts 146) res', res);

    // 落库
    // await this.milvusClient.flush({
    //   collection_names: ['art'],
    // });
  }

  /**
   * 插入数据后的搜索
   */
  async searchAfterInsert() {
    await this.milvusClient.useDatabase({ db_name: 'test' });
    const result = await this.milvusClient.search({
      collection_name: 'art',
      // db_name: this.db_name,
      vector: await this.embeddingsModel.embedQuery('你怎样'),
      limit: 2,
      anns_field: 'name_vector',
      output_fields: ['name', 'id'],
    });
    console.log('=>(study.milvus.service.ts 124) result', result);
  }
  • langchain 封装的 milvus
js 复制代码
import { Milvus } from '@langchain/community/vectorstores/milvus';

 /**
   * 使用LangChain Milvus搜索
   */
  async searchWithLangchainMilvus() {
    const vectorStore = new Milvus(this.embeddingsModel, {
      collectionName: 'art',
      vectorField: 'name_vector',
      textField: 'name',
      clientConfig: {
        address: 'localhost:19530',
        timeout: 5000,
        database: 'test',
      },
      indexCreateOptions: {
        index_type: 'IVF_HNSW',
        metric_type: 'COSINE',
      },
    });

    const res = await vectorStore.similaritySearchWithScore('你怎么样', 2);
    console.log('=>(study.milvus.service.ts 190) res', res);
  }

ps:如果大家有疑惑的地方,可以私信咨询我哦~旨在帮助前端er入门生产级别的AI编程

相关推荐
穗余4 小时前
NodeJS全栈开发面试题讲解——P2Express / Nest 后端开发
前端·node.js
橘子味的冰淇淋~4 小时前
npm run build 报错:Some chunks are larger than 500 KB after minification
前端·npm·node.js
黑黑的脸蛋6 小时前
Cursor 集成 Stagewise 插件调试UI
前端·ai编程
穗余6 小时前
NodeJS全栈开发面试题讲解——P7 DevOps 与部署和跨域等
前端·面试·node.js
LAJEUNESSE6 小时前
尝试GitHub Copilot Agent完成完整的项目
ai编程
贩卖纯净水.6 小时前
邂逅Webpack和打包过程
前端·webpack·node.js
胡桃夹夹子8 小时前
【前端优化】使用speed-measure-webpack-plugin分析前端运行、打包耗时,优化项目
前端·webpack·node.js
穗余8 小时前
NodeJS全栈开发面试题讲解——P1Node.js 基础与核心机制
node.js
red润11 小时前
放弃 tsc 使用 tsx 构建Node 环境下 TypeScript + ESM 开发环境搭建指南
前端·typescript·node.js
熊猫钓鱼>_>11 小时前
通义灵码深度实战测评:从零构建智能家居控制中枢,体验AI编程新范式
智能家居·ai编程