QA Pairs生成开源项目:大模型应用评测实践

QA Pairs生成开源项目:大模型应用评测实践

开源工具qagen帮你轻松生成中文文档QA对,解决LLM应用评测难题!

核心内容:
项目功能:支持多LLM提供商,具备智能文档处理和中文优化
质量保障:多维度验证机制确保生成QA对的质量
使用方式:提供多种灵活配置和调用方法,满足不同场景需求

在评测LLM应用的时候,需要准备一些问答对(QA Pairs)然后才可以使用一些query改写等的实践丰富评测的QA Pairs,才能更加有效的评测LLM应用。这QA Pairs的准备往往会难住很多人,这是因为作为一个测试工程师怎么从已经知道的文档中抽象出问答对是一个很难说清楚的工作,这里面很多技能并能仅仅靠测试领域的知识就可以完成的,往往需要更多的业务知识、表达能力、理解能力等等。

为了解决这个问题,开发了https://github.com/crisschan/qa-gen-cn,该项目能够完成帮助测试工程师迈出LLM应用测试的第一步,基于给定的一些知识生成问答对。一个强大的中文文档问答对(QA pairs)自动生成和验证工具,支持多种LLM提供商,具备完善的质量验证机制。qagen拥有如下的一些特点:
🤖多LLM支持: 支持Ollama(本地)和OpenAI(云端)模型
📄智能文档处理: 自动分块、中文优化处理
✅多维度验证: 语义相似度、关键词匹配、长度控制、唯一性检测
📊详细统计: 生成质量报告和数据分析
🎯中文优化: 专门针对中文内容优化
🔧灵活配置: 丰富的参数配置选项

pip install qagen

基础使用

方法一:使用完整脚本(推荐)

运行完整的生成和验证流程python examples/generateandvalidate_qa.py

方法二:使用简化脚本

仅生成QA pairs,不进行验证python examples/generatorandnovalidateqa.py

方法三:编程方式使用

from qagencn import generateqapairs# 基础使用qapairs = generateqapairs(    docpath="yourdocument.txt",    llmprovider="ollama",    llm_model="llama3.1:8b")

配置参数详解

LLM配置

Ollama配置llmconfig = {    "llmprovider": "ollama",    "llmmodel": "llama3.1:8b",  # 或其他可用模型    "showchunks": True,  # 显示文档分块过程    "chunksize": 500,   # 文档块大小    "chunkoverlap": 50  # 块重叠大小}

验证配置

validationconfig = {    # 语义相似度验证    "similaritythreshold": 0.3,  # 相似度阈值(0-1)    "similarity_model": "paraphrase-multilingual-MiniLM-L12-v2",}

高级使用示例

from qagencn.generator import QAGeneratorfrom qagencn.llmfactory import LLMFactoryfrom qagencn.validator import QAPairValidatorfrom qagencn.utils import loaddocument# 1. 初始化LLMllm = LLMFactory.createllm(    provider='ollama',     model='llama3.1:8b',    temperature=0.7)# 2. 创建生成器generator = QAGenerator(llm=llm, showchunks=True)# 3. 生成QA pairsqapairs = generator.generatefromdocument(    docpath="yourdocument.txt",    chunksize=3000,    chunkoverlap=100)# 4. 配置验证器validator = QAPairValidator({    "similaritythreshold": 0.4,    'similaritymodel':'paraphrase-multilingual-MiniLM-L12-v2'})# 5. 验证QA pairsdoccontent = " ".join([doc.pagecontent for doc in loaddocument("yourdocument.txt")])validatedpairs = validator.validate(qapairs, doccontent)print(f"生成 {len(qapairs)} 个QA pairs,验证通过 {len(validatedpairs)} 个")

输出结果

运行完成后,会在 output 目录生成以下文件:

output/├── qagenerationresult.json  # 完整结果(包含配置、统计等)├── qa_pairs.json             # 纯QA pairs数据└── statistics.txt            # 统计报告

输出格式示例

QA Pairs JSON格式

[  {    "question": "什么是人工智能?",    "answer": "人工智能是计算机科学的一个分支,旨在创建能够模拟人类智能的机器。"  },  {    "question": "机器学习和深度学习的关系是什么?",    "answer": "机器学习是人工智能的分支,深度学习是机器学习的子集,使用神经网络进行学习。"  }]

统计报告示例

=== QA Pairs 生成和验证统计报告 ===文档路径: examples/1.txtLLM配置: {'provider': 'ollama', 'model': 'llama3.1:8b'}统计信息:- 总生成数量: 25- 验证通过数量: 18- 验证通过率: 72.00%- 平均问题长度: 23.4 字符- 平均答案长度: 156.7 字符验证配置:- keywordtopn: 15

验证机制详解

语义相似度验证
原理: 使用多语言语义模型计算问题、答案与原文的相似度
作用: 确保生成的QA pairs与原文内容相关
配置:similaritythreshold(0-1,越高越严格),similaritymodel

关键词匹配验证
原理: 提取原文关键词,验证问题和答案是否包含相关关键词
作用: 保证QA pairs涵盖文档核心内容
配置:keywordtopn(提取关键词数量)

长度验证
原理: 检查问题和答案的长度是否在合理范围内
作用: 避免过短或过长的QA pairs
配置:questionminlength,questionmaxlength,answerminlength,answermaxlength

唯一性验证
原理: 使用聚类算法检测重复的QA pairs
作用: 确保生成结果的多样性
配置:similaritymodel,uniquenesscheckenabled,uniquenessdistance_threshold(聚类距离阈值),越小越好(更严格去重),但需要根据你的具体需求来平衡数量和质量。
0.0: 理论上不允许任何重复,但实际中很少使用
1.0: 允许所有内容,相当于关闭去重功能
建议范围: 0.05-0.3 之间,根据具体需求调整

5特别注意

Validation 1,2,3,4 validation是互斥的,只能选择一个验证 验证优先级:1>2>3>4,在self.config中配置了:
1 similaritythreshold和similaritymodel,后面其他验证的配置可以不配置,如果配置了也不起作用。
2 questionminlength和questionmaxlength,answerminlength和answermaxlength,后面其他验证的配置可以不配置,如果配置了也不起作用。
3 keywordtopn,后面其他验证的配置可以不配置,如果配置了也不起作用。
4 similaritymodel、uniquenessdistancethreshold和uniquenesscheck_enabled,其他验证的配置可以不配置,如果配置了也不起作用。

[](javascript:void (0);)

开源大模型开源大模型是什么意思开源大模型有哪些

© 版权声明
THE END
喜欢就支持一下吧
点赞202 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片