使用 LangChain 和 Milvus 构建测试知识库

news/2025/2/27 8:00:20

LangChain 是一个强大的框架,可以与向量数据库(如 Milvus)无缝集成,用于构建基于检索的增强生成(RAG)系统。在测试工程师的场景中,可以将测试资产(如需求文档、测试用例、缺陷报告等)存储在 Milvus 中,然后通过 LangChain 提供的检索功能快速查询和生成相关内容。


功能目标

  1. 存储测试资产:将需求文档、测试用例和缺陷记录等内容转换为向量表示并存储到 Milvus。
  2. 检索测试资产:根据用户输入的查询,快速检索相关内容。
  3. 集成生成模型:结合检索结果,生成测试用例或分析缺陷原因。

架构流程

  1. 文档预处理:

    • 清理和分割文档。
    • 将段落或内容片段转化为易于向量化的文本。
  2. 向量化:

    • 使用嵌入模型(如 OpenAI 的 text-embedding-ada-002 或 Hugging Face 模型)将文本转化为向量。
  3. 存储:

    • 将向量及其元数据存储到 Milvus 向量数据库。
  4. 检索与生成:

    • 根据用户查询,通过向量相似性搜索检索相关内容。
    • 将检索结果与生成模型结合,生成响应。

示例代码:

1. 安装必要的依赖

首先确保安装了以下依赖库:

pip install langchain pymilvus openai sentence-transformers

2. 启动 Milvus

可以通过 Docker 快速启动 Milvus:

docker run -d --name milvus -p 19530:19530 -p 9091:9091 milvusdb/milvus:v2.2.9
2.1 Docker容器化部署(推荐)
  1. 环境准备

    • 启用Windows子系统Linux(WSL)和虚拟机平台:
      bash
      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
      dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
      重启后安装Docker Desktop并启用WSL 2后端。
    • 验证Docker安装:
      bash
      docker --version
      docker-compose --version
  2. 获取并运行Milvus容器

    • 拉取官方镜像:
      bash
      docker pull milvusdb/milvus:latest
    • 启动容器(映射端口19530和19121):
      bash
      docker run -d --name milvus -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest
      服务启动后,通过浏览器访问http://localhost:19121验证。
  3. 持久化存储(可选)

    • 挂载本地目录或使用Docker卷保存数据,避免容器删除后数据丢失。

2.2 预编译包部署(适合开发者)
  1. 下载二进制包

    • 从GitHub仓库matrixji/milvuswindows-test-版本中选择对应版本(如windows-test-v8)。
    • 或直接下载预编译的zip包(含milvus.exeminio.exeetcd.exe)。
  2. 启动服务

    • 解压zip包后依次运行:
      bash
      run_minio.bat 启动MinIO存储服务
      run_etcd.bat 启动etcd元数据服务
      run_milvus.bat 启动Milvus核心服务
  3. 测试连接

    • 使用Python客户端验证:
      python
      from pymilvus import connections
      connections.connect(host=‘localhost’, port=‘19530’)

2.3 图形化界面(Attu)
  1. 安装Attu

    • 下载Attu客户端(如attu-2.4.6-windows-x86_64.zip)并解压。
    • 启动Attu:
      bash
      .\attu.exe
  2. 连接Milvus

    • 在Attu界面输入Milvus服务地址http://localhost:19530完成连接。

注意事项

  • 资源分配:Docker Desktop中可调整CPU/内存限制以满足性能需求。
  • 防火墙设置:确保端口19530(API)和19121(Web)未被拦截。
  • 版本兼容性:若使用旧版Milvus,需注意依赖库(如pymilvus)的兼容性。

3. 示例代码实现

(1) 初始化 Milvus
python">from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection

# 连接到 Milvus
connections.connect("default", host="localhost", port="19530")

# 定义 Milvus 的 schema
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536),  # 维度与嵌入模型匹配
    FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=1000)
]
schema = CollectionSchema(fields, "测试知识库存储需求")

# 创建 Collection
collection_name = "test_knowledge_base"
collection = Collection(name=collection_name, schema=schema)

(2) 嵌入模型初始化

使用 Hugging Face 的嵌入模型将文本转化为向量。

python">from langchain.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 初始化 Hugging Face 嵌入模型
embedding_model = HuggingFaceEmbeddings(model_name="bert-base-chinese")

# 文本分割器,确保文本块适合向量化
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)

(3) 插入数据到 Milvus

将测试资产(文档、用例、缺陷记录)清洗后分割为小块,并存储到 Milvus 中。

python">def insert_data_to_milvus(collection, texts):
    """
    将文本转换为向量并存储到 Milvus
    :param collection: Milvus Collection
    :param texts: 文本列表
    """
    # 分割文本为小块
    chunks = text_splitter.split_text(texts)
    
    # 生成嵌入向量
    embeddings = embedding_model.embed_documents(chunks)

    # 插入到 Milvus
    collection.insert([embeddings, chunks])

# 示例:插入需求文档
test_document = """
用户可以通过系统完成账户注册。
注册时需要填写用户名、密码和邮箱,并完成邮箱验证。
如果邮箱已被注册,系统会提示“邮箱已被使用”。
注册完成后,用户可以登录账户。
"""
insert_data_to_milvus(collection, test_document)

(4) 检索数据

根据用户的查询,通过向量相似性搜索检索相关内容。

python">from langchain.vectorstores import Milvus
from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA

# 初始化 Milvus 向量存储
vector_store = Milvus(
    collection_name=collection_name,
    connection_args={"host": "localhost", "port": "19530"},
    embedding_function=embedding_model.embed_query
)

# 检索相关内容
def retrieve_test_knowledge(query):
    """
    检索相关的测试资产
    :param query: 用户查询
    :return: 检索结果
    """
    # 检索相关内容
    results = vector_store.similarity_search(query, k=3)
    for i, result in enumerate(results, 1):
        print(f"结果 {i}: {result.page_content}")

# 示例:检索与“邮箱验证”的相关内容
retrieve_test_knowledge("邮箱验证")

(5) 集成生成模型

结合生成模型(如 OpenAI GPT)与检索结果,生成测试工程师需要的内容。

python">from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

# 初始化生成模型
llm = ChatOpenAI(openai_api_key="your-openai-api-key", temperature=0)

# 构建 RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vector_store.as_retriever(),
    return_source_documents=True
)

# 用户查询
query = "如何设计邮箱验证的测试用例?"
response = qa_chain.run(query)
print("生成的测试用例建议:")
print(response)

4. 参考链接

以下是一些可以参考的资源和文档:

  1. LangChain 官方文档
    • LangChain Documentation
  2. Milvus 官方文档
    • Milvus Documentation
  3. OpenAI 嵌入模型
    • OpenAI Embedding Models
  4. 向量数据库概览
    • 向量数据库介绍

提高落地实践的建议

  1. 数据清洗

    • 在插入数据到 Milvus 前,对测试文档和用例进行清洗和分块,确保内容质量。
    • 使用正则表达式过滤掉无关信息(如模板注释、页眉页脚等)。
  2. 优化嵌入模型

    • 根据具体测试领域,选择更适合的嵌入模型(如 Hugging Face 的领域特定模型)。
    • 对嵌入模型进行微调,增强对测试资产的理解。
  3. 检索增强

    • 设置检索的 k 值(返回的结果数量),根据实际需求调整。
    • 使用 RAG(Retrieval-Augmented Generation)技术,将用户查询的上下文与检索结果结合,提高生成模型的准确性。
  4. 多格式支持

    • 扩展对 docxpdf 等格式的解析,结合 PyPDF2python-docx 等库处理文档数据。

总结

通过 LangChain 和 Milvus,测试工程师可以快速构建一个高效的测试知识库,支持测试资产的存储、检索和生成。本文提供了从环境搭建到代码实现的完整流程,以及提高系统落地实践效果的建议。结合 LangChain 的检索能力和 Milvus 的向量存储性能,这套方案将显著提升测试工作的效率与准确性。


http://www.niftyadmin.cn/n/5869762.html

相关文章

现在集成大模型的IDE,哪种开发效率最高

目录 1. Visual Studio Code GitHub Copilot 2. JetBrains IDE(IntelliJ/PyCharm等) Copilot/Codeium 3. Cursor 4. 云IDE(GitHub Codespaces / Replit) 5. Amazon CodeWhisperer 效率对比与选择建议 未来趋势 1. Visual …

蓝桥杯 五子棋对弈

五子棋对弈 问题描述 “在五子棋的对弈中,友谊的小船说翻就翻?” 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着"友谊第一,比赛第二"的宗旨&#xff…

阿里云ack的创建与实战应用案例

阿里云ack的创建与应用案例 创建前开通ack相关服务:开始创建简单的魔方游戏,熟悉sv与clb自动注册创建部署一个nginx 服务示例:走不同域名访问不同svc资源:为什么需要 Ingress ?创建第一个域名的 Deployment和Service。…

蓝桥杯---快速排序(leetcode第159题)最小的k个元素(剑指offer原题)

文章目录 1.题目概述2.思路分析3.代码详解 1.题目概述 这个题目只是被包装了一下,本质上依然是使用的我们的快速排序算法,为什么这样说呢?因为仔细阅读题目你就会发现,这个需要我们去找到最小的前K个元素,并且进行返回…

Jmeter聚合报告导出log文档,Jmeter聚合报告导出到CSV

Jmeter聚合报告导出log文档 在Filename中输入 EKS_perf_log\\${type}_log\\${__P(UNIQUEID,${__time(YMDHMS)})}\all-graph-results-log.csv 可以得到执行的log,文件夹包含时间戳 Jmeter聚合报告导出到CSV 点击Save Table Data,保存到CSV文件中

视频推拉流EasyDSS直播点播平台授权激活码无效,报错400的原因是什么?

在当今数字化浪潮中,视频推拉流 EasyDSS 视频直播点播平台宛如一颗璀璨的明珠,汇聚了视频直播、点播、转码、精细管理、录像、高效检索以及时移回看等一系列强大功能于一身,全方位构建起音视频服务生态。它既能助力音视频采集,精准…

【由技及道】模块化战争与和平-论项目结构的哲学思辨【人工智智障AI2077的开发日志】

需求分析:碳基生物的架构困境 主人の抽象指令 “主人说要写个软件,就像说’给我建个城市’一样轻松呢(程序性微笑)” “一个软件?那就是…一个能无限扩展的企业级开发框架,要支持单体/分布式灵活切换&…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 4

第04章_逻辑架构 1. 逻辑架构剖析 首先MySQL是典型的C/S架构,即Client/Server架构,服务器端程序使用的mysqld。 不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本&…