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编程

相关推荐
koooo~7 小时前
node.js中的fs与path模块
node.js
量子位10 小时前
拆箱开源版Coze:Agent核心三件套大公开,48小时揽下9K Star
agent·ai编程·coze
字节跳动终端技术11 小时前
豆包编程邀你来玩|一起来听「北大同学的 AI 玩学指南」
人工智能·ai编程·vibecoding
刘大猫.11 小时前
npm ERR! cb() never called!
前端·npm·node.js·npm install·npmm err·never called
极客密码12 小时前
Cursor再见,隔壁Augment赠送的免费一个月650额度会员我用上了!
aigc·ai编程·cursor
老周聊大模型12 小时前
LangChain已死?不,是时候重新思考AI工程范式了
人工智能·langchain·mcp
量子位13 小时前
AI幻觉成WAIC首个关键词,Hinton敲响警钟,讯飞星火X1升级展示治理新突破
ai编程
数据智能老司机14 小时前
基础图谱增强检索生成(GraphRAG)——智能代理式 RAG
langchain·llm·aigc
中等生17 小时前
ReAct: 减少 LLM 幻觉,提升准确度
llm·openai·ai编程
Java陈序员17 小时前
轻松处理证件照!又一款 AI 证件照制作工具!
openai·ai编程·aiops