LangChain 是一个强大的框架,可以与向量数据库(如 Milvus)无缝集成,用于构建基于检索的增强生成(RAG)系统。在测试工程师的场景中,可以将测试资产(如需求文档、测试用例、缺陷报告等)存储在 Milvus 中,然后通过 LangChain 提供的检索功能快速查询和生成相关内容。
文档预处理:
向量化:
text-embedding-ada-002
或 Hugging Face 模型)将文本转化为向量。存储:
检索与生成:
首先确保安装了以下依赖库:
pip install langchain pymilvus openai sentence-transformers
可以通过 Docker 快速启动 Milvus:
docker run -d --name milvus -p 19530:19530 -p 9091:9091 milvusdb/milvus:v2.2.9
环境准备
获取并运行Milvus容器
http://localhost:19121
验证。持久化存储(可选)
下载二进制包
matrixji/milvus
的windows-test-
版本中选择对应版本(如windows-test-v8
)。milvus.exe
、minio.exe
、etcd.exe
)。启动服务
测试连接
安装Attu
attu-2.4.6-windows-x86_64.zip
)并解压。连接Milvus
http://localhost:19530
完成连接。注意事项
pymilvus
)的兼容性。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)
使用 Hugging Face 的嵌入模型将文本转化为向量。
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)
将测试资产(文档、用例、缺陷记录)清洗后分割为小块,并存储到 Milvus 中。
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)
根据用户的查询,通过向量相似性搜索检索相关内容。
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("邮箱验证")
结合生成模型(如 OpenAI GPT)与检索结果,生成测试工程师需要的内容。
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)
以下是一些可以参考的资源和文档:
数据清洗:
优化嵌入模型:
检索增强:
k
值(返回的结果数量),根据实际需求调整。多格式支持:
docx
、pdf
等格式的解析,结合 PyPDF2
和 python-docx
等库处理文档数据。通过 LangChain 和 Milvus,测试工程师可以快速构建一个高效的测试知识库,支持测试资产的存储、检索和生成。本文提供了从环境搭建到代码实现的完整流程,以及提高系统落地实践效果的建议。结合 LangChain 的检索能力和 Milvus 的向量存储性能,这套方案将显著提升测试工作的效率与准确性。