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

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
### LangChainMilvus DeepSeek 的集成 #### 集成概述 为了实现高效的数据处理智能化工作流,LangChainMilvus DeepSeek 可以紧密合作形成强大的解决方案。通过这种组合,可以创建一个完整的“检索-决策-执行”闭环系统[^1]。 #### 技术栈介绍 - **LangChain**: 自动化流程编排工具,能够连接不同组件并定义复杂的工作流逻辑。 - **Milvus**: 向量相似度搜索引擎,擅长处理大规模高维数据集的快速查询任务。 - **DeepSeek**: 提供先进的自然语言理解生成能力,特别适合垂直领域的定制化应用开发。 #### 实现方案 下面是一个简单的Python脚本示例,展示了如何利用这三个技术来构建一个基于文档的知识问答机器人: ```python from langchain import LLMChain, PromptTemplate import chromadb # 或者其他向量数据库客户端库 from deepseek import DocumentQA # 初始化 Milvus 客户端实例 client = chromadb.Client() # 创建或加载现有的集合 (Collection) collection_name = 'knowledge_base' if not client.has_collection(collection_name): collection = client.create_collection(name=collection_name) # 加载预训练好的 DeepSeek 文档 QA 模型 qa_model = DocumentQA.from_pretrained('deepseek/document_qa') def add_documents(documents): """将新文档加入到 Milvus 中""" embeddings = qa_model.encode([doc.text for doc in documents]) ids = [str(i) for i in range(len(embeddings))] metadatas = [{'source': d.source} for d in documents] collection.add( vectors=list(zip(ids, embeddings)), metadata=metadatas, ) def query_similar_docs(query_text, top_k=5): """根据输入问题查找最相关的几个文档片段""" embedding = qa_model.encode([query_text])[0] results = collection.query( queries=[embedding], limit=top_k, ) similar_doc_ids = results['ids'][0] scores = results['distances'][0] return list(zip(similar_doc_ids, scores)) # 使用 LangChain 构建对话链路 template = """ 作为一位专家,请帮助解答以下问题: {question} 以下是可能有用的参考资料: {context} """ prompt = PromptTemplate(template=template, input_variables=["question", "context"]) llm_chain = LLMChain(prompt=prompt) def answer_question(question): docs_with_scores = query_similar_docs(question) context = "\n".join([ f"- [{score:.2f}] {id}" for id, score in docs_with_scores[:3] ]) response = llm_chain.run({ "question": question, "context": context, }) print(response.strip()) # 测试函数 add_documents(...) # 添加一些初始文档用于测试 answer_question("什么是机器学习?") # 尝试提问一个问题 ``` 此代码段实现了从文档存储、语义匹配到最后生成答案的一整套流程。其中`chromadb`代表了与Milvus交互的具体方式;而`DocumentQA`则是来自DeepSeek的一个实用类,它封装了许多高级功能以便于开发者调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python测试之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值