测试答疑助手:从需求文档到设计文档、测试用例的完整测试过程

简介: 本文介绍了如何使用LangChain构建一个基于本地文档和数据的测试答疑助手。该助手能回答自然语言问题,涉及数据统计、查找和组合。实践过程包括:设置API Token,导入LangChain相关库,使用MarkdownHeaderTextSplitter处理不同文档,将文本转换为向量并存储在Chroma向量数据库中。之后,通过查询数据库找到最相关的文本片段,结合大模型(如ChatOpenAI)生成回答。示例展示了询问用户注册用例中特定数据的统计情况,得到了包含表格的详细回答。

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

本文将基于 LangChain 实现一个 mini 的实战案例。这次实战主要完成的任务,就是设计一个测试答疑助手,这个测试答疑助手的主要功能为基于本地的文档和数据,回答给出的自然语言问题,比如一些数据的统计,查找、组合。

示例使用数据

  • 测试用例文档
  • 设计文档
  • 需求文档

实践演练

实战设计思路

image.png

安装依赖

安装依赖 chromadb,chromadb是一个简单快捷的向量数据库,为了减少对embedding模型的请求次数,设置数据保存的物理位置,这样多次运行代码也不会重复请求模型转换向量:

pip install chromadb
  • embedding:相当于一个“桥梁” —— 翻译:把图片,文字,视频以及音频全部转换为数字,并且包含了数据的信息,使得大模型都能”懂“,能利用这些数字去做训练和推理。
  • 向量:向量本身是一组数字,但是在几何上,向量的各个数字组成了多维的数组空间,向量的每个维度代表该空间的·一个不同的特征或者属性。
  • 向量数据库:专门用于存储和管理向量数据的数据库,能对向量数据进行高效的操作。

代码实现

  1. 通过环境变量设置API Token,以及相关依赖的导入:
# 一些LangChain的依赖导入  
from langchain.chat_models import ChatOpenAI  
from langchain.embeddings import OpenAIEmbeddings  
from langchain.text_splitter import MarkdownHeaderTextSplitter  
from langchain.vectorstores import Chroma  
# 加载openai 的 API Tokenfrom utils.data_load import get_auth  
# 通过环境变量设置API Token,因为代码中的部分模型调用实例无法直接传递参数,需要通过环境变量设置的方式将token传递给自动构建的OpenAI请求  
import os  
os.environ['OPENAI_API_KEY'] = 'open_ai_token'
os.environ['OPENAI_API_BASE'] = 'open_ai_url'

2.处理源文档,将其切片处理:


# 定义一个函数,用于加载本地文件中的文本  
def load_text_from_file(path: str) -> str:  
    return open(path, encoding='utf-8').read()  
#  根据测试用例文档中的结构,定义一个MarkdownHeaderTextSplitter实例,用于将markdown文档切分为文本片段,方便后续embedding处理和向量数据库的构建  
testcase_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=[("##", "模块名称"), ("###", "用例名称")])  
docs = testcase_splitter.split_text(load_text_from_file(path="docs/测试用例.md"))  
# 同样处理设计文档,因为设计文档中的结构与测试用例文档不一致,所以要新定义一个MarkdownHeaderTextSplitter实例  
design_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=[("##", "功能名称"), ("###", "模块名称")])  
docs += design_splitter.split_text(load_text_from_file(path="docs/设计文档.md"))  
# 同理,处理需求文档  
prd_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=[("###", "功能名称")])  
docs += prd_splitter.split_text(load_text_from_file(path="docs/需求文档.md"))  
# 将切分后的文本片段输出,可以查看切分结果,和里面附带的数据信息  
for doc in docs:  
    print(doc)

3.如果数据存在,则加载使用,如果不存在,则写入:


persist_directory = 'chroma'
# 读取数据
if os.path.isdir(persist_directory):  
    vectordb = Chroma(persist_directory=persist_directory, embedding_function=OpenAIEmbeddings())  
else:  
    # 将切分后的数据,通过OpenAIEmbeddings实例,转换为向量数据,
    # 并保存到向量数据库中,持久化到本地指定目录下  
    vectordb = Chroma.from_documents(  
        documents=docs,  
        embedding=OpenAIEmbeddings(),  
        persist_directory=persist_directory  
    )

4.将向量数据库中检索到的文本片段以及提示词组成为 prompt,向大模型获取返回信息:

# 设定最终提出的问题  
question = "问题:请统计出用户注册用例中,用到的所有用户名、密码、电子邮箱数据,并将它们列成一个表格"  
# 从向量数据库中找到相似度最高的k条文本片段数据  
answer_docs = vectordb.similarity_search(query=question, k=4)  
# ChatGPT3.5大模型调用实例  
llm = ChatOpenAI(temperature=0.0)  
# 将向量数据库中检索到的文本片段组装成字符串,作为输入的数据源  
resource_doc = "".join([chunk.page_content for chunk in answer_docs])  
# 将数据源字符串和问题组装成最终请求大模型的字符串  
final_llm_text = f"{resource_doc} {question}"  
# 通过大模型获取字符串的回答信息  
response = llm.call_as_llm(message=final_llm_text)  
print(f"回答结果:\n{response}")

运行结果示例

image.png

相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
4天前
|
安全 测试技术 网络架构
【专栏】编写网络设备割接方案的七个步骤,包括明确割接目标、收集信息、制定计划、设计流程、风险评估、准备测试环境和编写文档。
【4月更文挑战第28天】本文介绍了编写网络设备割接方案的七个步骤,包括明确割接目标、收集信息、制定计划、设计流程、风险评估、准备测试环境和编写文档。通过实际案例分析,展示了如何成功完成割接,确保业务连续性和稳定性。遵循这些步骤,可提高割接成功率,为公司的网络性能和安全提供保障。
|
4天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
4天前
|
测试技术
【测试】构建质量保证之路:编写测试用例的艺术
【测试】构建质量保证之路:编写测试用例的艺术
|
4天前
|
测试技术
如何管理测试用例?测试用例有什么管理工具?YesDev
该文档介绍了测试用例和测试用例库的管理。测试用例是描述软件测试方案的详细步骤,包括测试目标、环境、输入、步骤和预期结果。测试用例库用于组织和管理这些用例,强调简洁性、完整性和可维护性。管理者可以创建、删除、重命名用例库,搜索和管理用例,以及通过层级目录结构来组织用例。此外,还支持通过Excel导入和导出测试用例,以及使用脑图查看用例关系。后台管理允许配置全局别名,如用例状态、优先级和执行结果。
|
4天前
|
架构师 安全 Java
【测试开发】答疑篇 · 什么是软件测试
【测试开发】答疑篇 · 什么是软件测试
6 0
|
4天前
|
前端开发 测试技术 数据安全/隐私保护
软件测试 —— 测试用例设计报告
软件测试 —— 测试用例设计报告
17 1
|
4天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成
【5月更文挑战第4天】随着人工智能(AI)技术的飞速发展,其在软件测试领域的应用也日益广泛。特别是在自动化测试过程中,AI技术能够显著提高测试用例的生成效率和质量。本文将探讨AI在自动化测试用例生成中的应用原理、优势以及面临的挑战,并展示通过AI技术优化测试流程的实际案例。
60 8
|
4天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成技术
【4月更文挑战第29天】随着人工智能技术的不断发展,其在软件测试领域的应用也越来越广泛。本文主要探讨了AI驱动的测试用例生成技术在自动化测试中的应用,以及其对提高测试效率和质量的影响。通过对现有技术的深入分析和实例演示,我们展示了AI如何通过学习和理解软件行为来自动生成有效的测试用例,从而减少人工编写测试用例的工作量,提高测试覆盖率,降低错误检测的成本。
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率:智能化测试用例生成策略
【4月更文挑战第28天】 随着软件开发的复杂性不断增加,传统的软件测试方法面临巨大挑战。为了提高测试覆盖率并确保软件质量,需要投入大量的时间和资源去设计、执行和维护测试用例。本文探讨了一种基于人工智能(AI)技术的智能化测试用例生成策略,该策略能够自动识别关键的测试路径,动态调整测试用例,并优化测试集合。通过引入智能化工具和算法,显著提升了软件测试过程的效率和有效性。
|
4天前
|
测试技术
【测试】优化软件测试:有效测试用例设计的关键
【测试】优化软件测试:有效测试用例设计的关键

热门文章

最新文章

http://www.vxiaotou.com