使用阿里云百炼embeddings+langchain+Milvus实现简单RAG

使用阿里云百炼embeddings+langchain+Milvus实现简单RAG

注意测试时,替换其中的key、文档等

import os
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.vectorstores import Milvus
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader


# 2. 初始化阿里云百炼 Embedding-v2 模型,默认1536维度,不可更改
embeddings = DashScopeEmbeddings(
    model="text-embedding-v2",  # 使用百炼的embedding v2模型
    dashscope_api_key=os.getenv("OPENAI_API_KEY")
)

# 3. 加载和分割文本
loader = TextLoader("idea快捷键.md",encoding='utf-8')  # 替换为你的文本文件路径
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=200,  # 每个chunk的字符数
    chunk_overlap=50  # chunk之间的重叠字符数
)
docs = text_splitter.split_documents(documents)

# 4. 连接到 Milvus 并存储向量
vector_db = Milvus.from_documents(
    documents=docs,
    embedding=embeddings,
    connection_args={
        "host": "192.168.80.152",  # Milvus服务器地址
        "port": "19530"       # Milvus端口
    },
    collection_name="example_collection",  # 集合名称
    drop_old=True  # 如果集合已存在则删除重建
)

# 5. 使用示例 - 相似性搜索
query = "查看指定的类结构图"
similar_docs = vector_db.similarity_search(query, k=3)  # 搜索最相似的3个文档

print("相似文档搜索结果:")
for i, doc in enumerate(similar_docs):
    print(f"\n结果 {i+1}:")
    print(doc.page_content)
    print(f"元数据: {doc.metadata}")

### 实现基于 MilvusRAG #### 数据准备与预处理 为了实现Milvus 中的 RAG,数据需先经过向量化并构建索引。这一步骤对于确保后续检索的质量至关重要[^2]。 ```python from sentence_transformers import SentenceTransformer import numpy as np model = SentenceTransformer('all-MiniLM-L6-v2') def embed_documents(documents): embeddings = model.encode(documents, convert_to_tensor=True) return embeddings.cpu().numpy() ``` #### 构建 Milvus 集合 创建集合用于存储文档嵌入,并设置相应的参数来优化搜索效率。 ```python from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection connections.connect("default", host="localhost", port="19530") fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384) ] schema = CollectionSchema(fields, "rag_example_collection") collection = Collection("rag_example", schema) index_params = { 'metric_type': 'L2', 'index_type': 'IVF_FLAT', 'params': {'nlist': 1024} } collection.create_index(field_name="embedding", index_params=index_params) ``` #### 插入数据到 Milvus 将之前计算好的嵌入插入至 Milvus 集合中以便于之后进行相似度匹配查找最接近输入查询的相关条目。 ```python ids = [i for i in range(len(embeddings))] mr = collection.insert([ids, embeddings.tolist()]) print(f"Inserted {len(mr.primary_keys)} records into Milvus.") ``` #### 查询机制设计 当接收到新的询问时,同样将其转换成相同维度下的特征表示形式并通过 Milvus 进行快速近似最近邻搜索找出 top-k 条记录作为上下文提供给下游的语言模型完成最终的回答生成任务。 ```python search_params = {"metric_type": "L2", "params": {"nprobe": 10}} results = collection.search( data=[query_embedding], anns_field="embedding", param=search_params, limit=5, expr=None ) for result in results: print(result.id, result.distance) ``` 通过上述方法可以在 Milvus 上成功搭建起一套完整的 RAG 流程框架,不过需要注意的是实际部署过程中还需针对具体应用场景调整各项配置以获得更优表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值