当前位置: 首页 > article >正文

测试工程师指南:基于需求文档构建本地安全知识库的完整实战

需求文档是测试工程师日常工作的核心工具,如何快速检索需求文档中的关键信息(文本、表格、图片等),并将其转化为可供 AI 查询的知识库,是提升工作效率的重要手段。本文将通过对 需求文档(docx 格式) 的处理,详细讲解如何构建一个 安全的本地知识库,并通过代码实现具体操作,确保每一步都可落地。


一、本地知识库的安全性与连接方案

在构建本地知识库时,安全性是首要考虑的因素,尤其是对于需求文档这样的敏感数据。以下是本地知识库的安全性与连接方案:

  1. 数据隐私:本地知识库完全在本地设备运行,避免将敏感文档上传到云端,确保数据隐私。
  2. 持久化存储:通过 Chroma 的持久化功能,将向量数据库以 SQLite 文件形式保存在本地磁盘。
  3. 访问控制:通过操作系统的权限管理(如文件夹加密、用户权限设置),限制知识库的访问。
  4. 脱离网络运行:知识库和向量计算完全在本地运行,无需联网即可完成所有操作。

以下所有代码均基于本地运行,适配 Windows、Mac 和 Linux 环境。


二、需求文档处理与向量化的完整流程图

针对需求文档(docx 格式),我们需要将文档中的 文本、表格、图片 等内容提取并向量化。以下是完整流程图:

+-------------------------------------------+
|     需求文档加载                           |
|     使用 python-docx 提取 docx 文件内容    |
|     支持文本、表格、图片                   |
+-------------------------------------------+↓
+-------------------------------------------+
|     数据清洗                               |
|     移除空行、无效字符,提取关键信息       |
+-------------------------------------------+↓
+-------------------------------------------+
|     文本分割                               |
|     将文本分割为小段(500字左右)          |
|     表格转化为结构化文本                   |
+-------------------------------------------+↓
+-------------------------------------------+
|     文本向量化                             |
|     使用中文预训练模型生成向量             |
+-------------------------------------------+↓
+-------------------------------------------+
|     图片向量化                             |
|     使用 OpenAI CLIP 模型生成图片向量      |
+-------------------------------------------+↓
+-------------------------------------------+
|     存储到向量数据库                      |
|     使用 Chroma 将向量和原始数据存储       |
+-------------------------------------------+↓
+-------------------------------------------+
|     本地知识库检索                        |
|     根据用户输入,检索最相关的文档片段     |
+-------------------------------------------+

三、处理需求文档的完整实例(docx 格式)

1. 环境准备

安装以下 Python 库:

pip install python-docx chromadb sentence-transformers PIL

2. 加载需求文档

使用 python-docx 提取 docx 文件中的内容(包括文本与表格)。对于图片,则使用 PIL 进行处理。

以下是提取需求文档的代码:

from docx import Document
from PIL import Image
from io import BytesIO
import os# 提取文本和表格
def extract_text_and_tables(docx_path):document = Document(docx_path)texts = []tables = []# 提取段落文本for paragraph in document.paragraphs:if paragraph.text.strip():  # 去掉空行texts.append(paragraph.text.strip())# 提取表格内容for table in document.tables:table_data = []for row in table.rows:row_data = [cell.text.strip() for cell in row.cells]table_data.append(row_data)tables.append(table_data)return texts, tables# 提取图片
def extract_images(docx_path, output_folder):document = Document(docx_path)os.makedirs(output_folder, exist_ok=True)image_paths = []for rel in document.part.rels.values():if "image" in rel.target_ref:image_data = rel.target_part.blobimage = Image.open(BytesIO(image_data))image_path = os.path.join(output_folder, f"image_{len(image_paths)+1}.png")image.save(image_path)image_paths.append(image_path)return image_paths# 示例:提取需求文档内容
docx_path = "requirement_document.docx"
output_folder = "extracted_images"texts, tables = extract_text_and_tables(docx_path)
image_paths = extract_images(docx_path, output_folder)print(f"提取文本段落:{len(texts)} 段")
print(f"提取表格:{len(tables)} 个")
print(f"提取图片:{len(image_paths)} 张")

3. 数据清洗与分割

数据清洗

对提取的文本和表格进行清洗,移除无效字符和空白内容:

import re# 清洗文本
def clean_text(text):text = re.sub(r"\s+", " ", text)  # 移除多余空白text = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9,。!?;:]", "", text)  # 移除特殊字符return textcleaned_texts = [clean_text(text) for text in texts]# 转换表格为结构化文本
def table_to_text(table):return "\n".join([" | ".join(row) for row in table])cleaned_tables = [table_to_text(table) for table in tables]print("清洗完成!")
文本分割

将文本和表格分割为适合向量化的小段(每段 500 字左右):

from langchain.text_splitter import CharacterTextSplitter# 分割文本
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
documents = text_splitter.split_text("\n".join(cleaned_texts + cleaned_tables))print(f"分割为 {len(documents)} 个片段")

4. 文本与图片向量化

文本向量化

使用 sentence-transformers 的中文模型生成文本向量:

from sentence_transformers import SentenceTransformer# 加载中文预训练模型
model = SentenceTransformer("damo/nlp_corom_sentence-embedding_chinese-base")# 向量化文本片段
text_embeddings = model.encode(documents)print(f"生成了 {len(text_embeddings)} 个文本向量")
图片向量化

使用 OpenAI 的 CLIP 模型生成图片向量:

pip install open_clip_torch
import open_clip
import torch
from PIL import Image# 加载 CLIP 模型
model, preprocess = open_clip.create_model_and_transforms('ViT-B-32', pretrained='openai')
tokenizer = open_clip.get_tokenizer('ViT-B-32')# 向量化图片
image_embeddings = []
for image_path in image_paths:image = preprocess(Image.open(image_path)).unsqueeze(0)  # 预处理图片with torch.no_grad():image_embedding = model.encode_image(image)image_embeddings.append(image_embedding.numpy())print(f"生成了 {len(image_embeddings)} 个图片向量")

5. 存储到 Chroma 向量数据库

将文本与图片的向量及原始数据存储到 Chroma 中:

import chromadb# 初始化数据库
client = chromadb.PersistentClient(path="./chroma_knowledge_base")# 创建集合
collection = client.get_or_create_collection(name="requirement_docs")# 存储文本向量
collection.add(documents=documents,  # 原始文本embeddings=text_embeddings,  # 文本向量ids=[f"text_{i}" for i in range(len(documents))]
)# 存储图片向量
collection.add(documents=image_paths,  # 图片路径embeddings=image_embeddings,  # 图片向量ids=[f"image_{i}" for i in range(len(image_paths))]
)print("成功存储文本与图片向量")

6. 本地知识库检索

根据用户输入的问题,检索相关文本或图片:

# 用户输入问题
query = "登录界面的设计要求是什么?"
query_embedding = model.encode([query])# 检索最相关的结果
results = collection.query(query_embeddings=query_embedding,n_results=5
)# 打印检索结果
for i, doc in enumerate(results["documents"][0]):print(f"相关结果 {i+1}{doc}")

四、小结

本文介绍了如何针对需求文档(docx 格式)构建本地知识库的完整流程,包括 文本、表格、图片的提取与向量化,并结合 Chroma 数据库实现了安全的本地存储与检索。以下是本地知识库的关键特点:

  1. 完全本地化:所有处理和存储均在本地设备完成,无需联网,确保数据隐私。
  2. 支持多模态数据:同时支持文本和图片的检索,满足复杂文档的需求。
  3. 落地性强:代码清晰可用,测试工程师可以直接应用于日常工作中。

通过这种方式,测试工程师可以快速构建起属于自己的安全本地知识库,大幅提升工作效率!

相关文章:

测试工程师指南:基于需求文档构建本地安全知识库的完整实战

需求文档是测试工程师日常工作的核心工具,如何快速检索需求文档中的关键信息(文本、表格、图片等),并将其转化为可供 AI 查询的知识库,是提升工作效率的重要手段。本文将通过对 需求文档(docx 格式&#xf…...

IP关联的定义和避免方法

大家好!今天我们来聊一聊一个在运营多个网络账号时会遇到的重要问题——IP关联。对于那些正在运营多个账号或者进行多窗口任务的朋友们,这无疑是一个你必须关注的问题。IP关联,简单来说,就是多个账号在使用相同IP地址的情况下进行…...

浅述WinForm 和 WPF 的前景

在.NET 开发领域,WinForm 和 WPF 都是用于创建桌面应用程序的技术框架,但它们在很多方面存在差异,对于开发者来说,也常常会思考哪个更有前途。 一、WinForm 1. 成熟/稳定度: WinForms 是较早的桌面应用程序框架&am…...

CSS3学习教程,从入门到精通,CSS3 属性语法知识点及案例代码(4)

CSS3 属性语法知识点及案例代码 一、CSS3 文本属性 1. 颜色相关属性 color:设置文本颜色。text-shadow:设置文本阴影。 2. 字体相关属性 font-family:设置字体系列。font-size:设置字体大小。font-weight:设置字体…...

MyBatis SqlSession 是如何创建的? 它与 SqlSessionFactory 有什么关系?

SqlSession 是 MyBatis 中与数据库交互的核心接口,它提供了执行 SQL 语句、管理事务、获取 Mapper 接口代理对象等关键功能。 SqlSession 实例 不是直接通过 new 关键字创建的,而是通过 SqlSessionFactory 工厂来创建的。 SqlSessionFactory 负责创建 Sq…...

【操作系统安全】任务4:Windows 系统网络安全实践里常用 DOS 命令

目录 一、引言 二、网络信息收集类命令 2.1 ipconfig 命令 2.1.1 功能概述 2.1.2 实例与代码 2.2 ping 命令 2.2.1 功能概述 2.2.2 实例与代码 2.3 tracert 命令 2.3.1 功能概述 2.3.2 实例与代码 三、网络连接与端口管理类命令 3.1 netstat 命令 3.1.1 功能概述…...

Vue 概念、历史、发展和Vue简介

一、Vue概念 官方定义: 渐进式JavaScript 框架,易学易用,性能出色,适用场景丰富的 Web 前端框架。 Vue.js 是一个流行的前端JavaScript框架,由尤雨溪(Evan You)开发并维护。 它最初于2014年发…...

【从零开始学习计算机科学】信息安全(二)物理安全

【从零开始学习计算机科学】信息安全(二)物理安全 物理安全物理安全的涵义物理安全威胁常见物理安全问题物理安全需求规划物理安全需求设备安全防盗和防毁机房门禁系统机房入侵检测和报警系统防电磁泄漏防窃听设备管理设备维护设备的处置和重复利用设备的转移电源安全电源调整…...

LeetCode hot 100—验证二叉搜索树

题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 示例 1&#…...

【商城实战(39)】Spring Boot 携手微服务,商城架构焕新篇

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配&#xf…...

MongoDB 可观测性最佳实践

MongoDB 介绍 MongoDB 是一个高性能、开源的 NoSQL 数据库,它采用灵活的文档数据模型,非常适合处理大规模的分布式数据。MongoDB 的文档存储方式使得数据结构可以随需求变化而变化,提供了极高的灵活性。它支持丰富的查询语言,允许…...

论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

LoRA 论文 传统全面微调&#xff0c;对每个任务学习的参数与原始模型相同&#xff1a; m a x Φ ∑ ( x , y ) ∈ Z ∑ t 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(…...

UE5中 Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动和分工·

1. GameMode 与 GameState 关系描述 GameMode&#xff1a;定义游戏规则和逻辑&#xff0c;控制游戏的开始、进行和结束。GameState&#xff1a;存储和同步全局游戏状态&#xff0c;如得分、时间、胜利条件等。 联动方式 GameMode初始化GameState&#xff1a;GameMode在游戏…...

Redis的IO多路复用机制:高效的网络通信设计

在高并发、高性能的应用中&#xff0c;如何有效地管理和处理大量的客户端请求是一个至关重要的问题。Redis作为一个高性能的内存数据存储系统&#xff0c;面对大量并发客户端请求时&#xff0c;需要具备良好的网络通信能力。在Redis的设计中&#xff0c;IO多路复用机制是其核心…...

Ubuntu24.04 启动后突然进入tty,无法进入图形界面

问题描述 昨晚在编译 Android AOSP 14 后&#xff0c;进入了登录页面&#xff0c;但出现了无法输入密码的情况&#xff0c;且无法正常关机&#xff0c;只能强制重启。重启后&#xff0c;系统只能进入 TTY 页面&#xff0c;无法进入图形界面。 问题排查 经过初步排查&#x…...

搭建主从服务器

任务需求 客户端通过访问 www.nihao.com 后&#xff0c;能够通过 dns 域名解析&#xff0c;访问到 nginx 服务中由 nfs 共享的首页文件&#xff0c;内容为&#xff1a;Very good, you have successfully set up the system. 各个主机能够实现时间同步&#xff0c;并且都开启防…...

jenkins 配置邮件问题整理

版本&#xff1a;Jenkins 2.492.1 插件&#xff1a; A.jenkins自带的&#xff0c; B.安装功能强大的插件 配置流程&#xff1a; 1. jenkins->系统配置->Jenkins Location 此处的”系统管理员邮件地址“&#xff0c;是配置之后发件人的email。 2.配置系统自带的邮件A…...

Scala语言的计算机基础

Scala语言的计算机基础 计算机科学是一门极具挑战性和创造力的学科&#xff0c;其中编程语言是连接人类与计算机的桥梁。Scala&#xff08;特指可扩展语言&#xff09;作为一种现代编程语言&#xff0c;其设计初衷是为了简化软件开发过程&#xff0c;并结合了面向对象和函数式…...

定义模型生成数据表

1. 数据库配置 js import { Sequelize, DataTypes } from sequelize; // 创建一个 Sequelize 实例&#xff0c;连接到 SQLite 数据库。 export const sequelize new Sequelize(test, sa, "123456", { host: localhost, dialect: sqlite, storage: ./blog.db })…...

JVM中常量池和运行时常量池、字符串常量池三者之间的关系

文章目录 前言常量池&#xff08;Constant Pool&#xff09;运行时常量池&#xff08;Runtime Constant Pool&#xff09;字符串常量池&#xff08;String Literal Pool&#xff09;运行时常量池和字符串常量池位置变化方法区与永久代和元空间的关系三者之间的关系常量池与运行…...

KV 缓存简介

以下是关于 KV缓存&#xff08;Key-Value Cache&#xff09; 的简介&#xff0c;涵盖其定义、原理、作用及优化意义&#xff1a; 1. 什么是KV缓存&#xff1f; KV缓存 是Transformer架构&#xff08;如GPT、LLaMA等大模型&#xff09;在自回归生成任务&#xff08;如文本生成&…...

Mysql篇——SQL优化

本篇将带领各位了解一些常见的sql优化方法&#xff0c;学到就是赚到&#xff0c;一起跟着练习吧~ SQL优化 准备工作 准备的话我们肯定是需要一张表的&#xff0c;什么表都可以&#xff0c;这里先给出我的表结构&#xff08;表名&#xff1a;userinfo&#xff09; 通过sql查看…...

算法基础 -- ARM 体系架构设计专家的算法提升目标

算法提升目标:ARM 体系架构设计专家 1. 位运算优化 相关 ARM 知识点&#xff1a;SIMD、NEON、SVE、低功耗优化、加密计算、数据压缩 推荐题目&#xff1a; 136. 只出现一次的数字&#xff08;异或运算&#xff09;190. 颠倒二进制位&#xff08;位反转&#xff0c;ARM rbit…...

不同开发语言对字符串的操作

一、字符串的访问 Objective-C: 使用 characterAtIndex: 方法访问字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 访问第一个字符 H NSLog("%C", character); // 输出: H NSString 内部存储的是 UTF-16 编…...

Oracle Linux Server 7.9安装fail2ban

yum search oracle-epel-release yum install oracle-epel-release-el7 search fail2ban yum install fail2ban nano /etc/fail2ban/jail.d/00-firewalld.conf # defalut这里是设定全局设置&#xff0c;如果下面的监控没有设置就以全局设置的值设置。 [DEFAULT] # 用于指定哪…...

FPGA|Verilog-SPI驱动

最近准备蓝桥杯FPGA的竞赛&#xff0c;因为感觉官方出的IIC的驱动代码思路非常好&#xff0c;写的内容非常有逻辑并且规范。也想学习一下SPI的协议&#xff0c;所以准备自己照着写一下。直到我打开他们给出的SPI底层驱动&#xff0c;我整个人傻眼了&#xff0c;我只能说&#x…...

Windows11 新机开荒(二)电脑优化设置

目录 前言&#xff1a; 一、注册微软账号绑定权益 二、此电脑 桌面图标 三、系统分盘及默认存储位置更改 3.1 系统分盘 3.2 默认存储位置更改 四、精简任务栏 总结&#xff1a; 前言&#xff1a; 本文承接上一篇 新机开荒&#xff08;一&#xff09; 上一篇文章地址&…...

关于deepseek R1模型分布式推理效率分析

1、引言 DeepSeek R1 采用了混合专家&#xff08;Mixture of Experts&#xff0c;MoE&#xff09;架构&#xff0c;包含多个专家子网络&#xff0c;并通过一个门控机制动态地激活最相关的专家来处理特定的任务 。DeepSeek R1 总共有 6710 亿个参数&#xff0c;但在每个前向传播…...

揭秘大数据 | 9、大数据从何而来?

在科技发展史上&#xff0c;恐怕没有任何一种新生事物深入人心的速度堪比大数据。 如果把2012年作为数据量爆发性增长的第一年&#xff0c;那么短短数年&#xff0c;大数据就红遍街头巷尾——从工业界到商业界、学术界&#xff0c;所有的行业都经受了大数据的洗礼。从技术的迭…...

使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题

目录 1、问题描述 2、用Dependency Walker工具打开qr.dll库&#xff0c;查看库与库的依赖关系以及接口调用情况&#xff0c;定位问题 3、使用Beyond Compare工具比较一下正常的msvcr100d.dll和问题msvcr100d.dll的差异 4、最后 C软件异常排查从入门到精通系列教程&#xff…...