【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对
自动化问答生成:使用GPT-3.5将文档转化为问答对
- 正文
- 步骤1:准备工作
- 步骤2:编写Python脚本
- 总结
当我们需要将大段文档转化为问答对时,OpenAI的GPT-3.5模型提供了一个强大的工具。这个教程将向您展示如何编写一个Python脚本,利用GPT-3.5的能力,将文档转化为一问一答的问答对。这个流程几乎无需人工介入,能够自动获取问题并生成答案。我们将使用GPT-3.5-16k,以便处理大量文本。
本文参考卡神文章:https://mp.weixin.qq.com/s/1hcufhPJ7P1cXEsAZ7MdRA
同时也参考fastGPT的知识库问答对生成方式。
正文
直接开始流程
步骤1:准备工作
首先,您需要安装 Python 和 requests 库(确保已经安装),并在 OpenAI 官网上获取 apiKey 密钥,用来请求 gpt 接口(还需要科学上网工具)。
步骤2:编写Python脚本
下面是我已经验证过的 Python 示例,用于将文档转化为问答对。我们假设您的文档保存在一个名为 input_file.txt 的文本文件中。
注:只需修改 api_key 即可,让 input_file.txt 和 python 处在同一文件夹内。
"""目标:将大段文档通过gpt3.5识别变成一问一答的问答对。流程:1.gpt自动获取合适的问题;2.gpt自动根据问题和文档生成问答对。优点:几乎无需人工介入,自动获取问题,自动根据问题生成问答对。缺点:受限于大模型输入长度限制,可能无法一次性输入全部文档。建议:使用gpt3.5-16k可以一次输入大量文本,文档最好不超过5000字。FAQ:1.Q:gpt两个步骤是否可以合并成一个请求让gpt返回,可以节省约一半的时间和tokens?A:拆成两次主要是因为问题可能需要人工微调修改后再去生成答案,这样可以提高知识库质量,当然也可以全部自动处理。2.Q:大模型有字数限制无法大文档一次输入?A:目前这个没有好的解决办法,只能通过预先拆分大文档为多个文档片段后分批执行。
"""
import datetime
import time
import requestsurl = 'https://api.openai.com/v1/chat/completions'# 替换为您自己的API密钥
api_key = 'sk-xxxxxxxxx'model = "gpt-3.5-turbo-16k"prompt1 = '''
#01 你是一个问答对数据集处理专家。#02 你的任务是根据我给出的内容,生成适合作为问答对数据集的问题。#03 问题要尽量短,不要太长。#04 一句话中只能有一个问题。#05 生成的问题必须宏观、价值,不要生成特别细节的问题。#06 生成问题示例:"""权益型基金的特点有哪些方面?介绍一下产品经理。"""#07 以下是我给出的内容:"""{{此处替换成你的内容}}"""
'''prompt2 = '''
#01 你是一个问答对数据集处理专家。#02 你的任务是根据我的问题和我给出的内容,生成对应的问答对。#03 答案要全面,多使用我的信息,内容要更丰富。#04 你必须根据我的问答对示例格式来生成:"""{"content": "基金分类有哪些", "summary": "根据不同标准,可以将证券投资基金划分为不同的种类:(1)根据基金单位是否可增加或赎回,可分为开放式基金和封闭式基金。开放式基金不上市交易(这要看情况),通过银行、券商、基金公司申购和赎回,基金规模不固定;封闭式基金有固定的存续期,一般在证券交易场所上市交易,投资者通过二级市场买卖基金单位。(2)根据组织形态的不同,可分为公司型基金和契约型基金。基金通过发行基金股份成立投资基金公司的形式设立,通常称为公司型基金;由基金管理人、基金托管人和投资人三方通过基金契约设立,通常称为契约型基金。我国的证券投资基金均为契约型基金。(3)根据投资风险与收益的不同,可分为成长型、收入型和平衡型基金。(4)根据投资对象的不同,可分为股票基金、债券基金、货币基金和混合型基金四大类。"}{"content": "基金是什么", "summary": "基金,英文是fund,广义是指为了某种目的而设立的具有一定数量的资金。主要包括公积金、信托投资基金、保险基金、退休基金,各种基金会的基金。从会计角度透析,基金是一个狭义的概念,意指具有特定目的和用途的资金。我们提到的基金主要是指证券投资基金。"}#05 我的问题如下:"""{{此处替换成你上一步生成的问题}}"""#06 我的内容如下:"""{{此处替换成你的内容}}"""
'''def generate_question(text_content, more=False):headers = {"Authorization": f"Bearer {api_key}","Content-Type": "application/json",}content = "生成适合作为问答对的问题"if more:content = "尽可能多生成适合作为问答对的问题"prompt = prompt1.replace("{{此处替换成你的内容}}", text_content)data = {"model": model,"messages": [{"role": "system", "content": prompt},{"role": "user", "content": content}]}start_time = time.time()response = requests.post(url, headers=headers, json=data, verify=False)print("耗时", time.time() - start_time)if response.status_code == 200:return response.json()["choices"][0]["message"]['content']else:print(f"Error: {response.status_code}")print(response.content)return Nonedef generate_qa(text_content, question_text=None):headers = {"Authorization": f"Bearer {api_key}","Content-Type": "application/json",}prompt = prompt2.replace("{{此处替换成你上一步生成的问题}}", question_text).replace("{{此处替换成你的内容}}", text_content)data = {"model": model,"messages": [{"role": "system", "content": prompt},{"role": "user", "content": "拼成问答对"}]}start_time = time.time()response = requests.post(url, headers=headers, json=data, verify=False)print("耗时", time.time() - start_time)if response.status_code == 200:return response.json()["choices"][0]["message"]['content']else:print(f"Error: {response.status_code}")print(response.content)return Nonedef write_to_file(content):timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")file_name = f"new_file_{timestamp}.txt"with open(file_name, "w") as file:file.write(content)print("File 'new_file.txt' has been created and written.")def read_file(file_name):try:with open(file_name, "r") as file:content = file.read()return contentexcept FileNotFoundError:print(f"File '{file_name}' not found.")def main():text_content = read_file("input_file.txt")print('text_content\n', text_content)question_text = generate_question(text_content=text_content, more=True)print('question_text\n', question_text)qa_text = generate_qa(text_content=text_content, question_text=question_text)print('qa_text\n', qa_text)write_to_file(qa_text)main()
步骤3:运行脚本
运行上述Python脚本,它将自动从文档中提取问题,并生成与之对应的答案(输出到 new_file_{timestamp}.txt 文件)。这个脚本也会在控制台上显示提取的问题和生成的答案。
总结
通过这个教程,你可以自动将大段文档转化为一问一答的问答对,无需人工干预。你可以对脚本文件再进行调试和改进,以适应你自己的项目。这个方法可以在处理大量文本时非常有用,特别是使用 GPT-3.5-16k 模型,它具有更大的输入长度限制,但是大文档仍然需要先做一些分段处理。后面我还会提供更多 AI 产品教程,欢迎点赞收藏!
相关文章:
【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对
自动化问答生成:使用GPT-3.5将文档转化为问答对 正文步骤1:准备工作步骤2:编写Python脚本 总结 当我们需要将大段文档转化为问答对时,OpenAI的GPT-3.5模型提供了一个强大的工具。这个教程将向您展示如何编写一个Python脚本&#x…...
普通平衡树 Splay
Splay 简介 Splay(伸展树),又叫做分裂树,是一种自调整形式的二叉查找树,满足二叉查找树的性质:一个节点左子树的所有节点的权值,均小于这个节点的权值。且其右子树所有节点的权值,均…...
复旦-华盛顿EMBA:走近亿咖通科技,探寻汽车智能化的科创“密码”
6月20日,应复旦大学-华盛顿大学EMBA项目18班校友周靖的邀请,项目校友参访了科创企业ECARX亿咖通科技。作为该公司资深副总裁、中国首席财务官,周靖带领大家通过产品演示、实车驾驶和交流对话探寻汽车智能化的科创“密码”,近距离感…...
学习心得07:C#
之前也没有看过C#的书,C#的程序倒是搞了一些。好在项目不大,我又会套路。 C#很象是JAVA。好像就是JAVA出来之后,微软抄的。好东西就要学习,这不丢脸。 我倒是想,有没有办法把JAVA和C#进行映射,然后直接编译…...
importlib的使用、9个视图子类、视图集、drf之路由、drf之请求响应回顾、GenericViewSet相关流程图
一 drf之请求响应回顾 # 1 drf请求-请求对象:data,query_params,其他跟之前一样,FILES-默认:支持三种编码-局部配置:视图类中-from rest_framework.parsers import JSONParser, FormParser, MultiPartPars…...
国际站阿里云服务器远程桌面密码错误怎么办?苹果手机如何远程登录?
阿里云服务器是云计算领域的一种重要服务,它可以帮助用户在云端部署和管理自己的应用程序和网站。但是,有时候用户可能会遇到远程桌面密码错误的问题,导致无法登录到服务器。本文将介绍一些解决办法,以及如何使用苹果手机远程登录…...
CRMEB多端多语言系统文件上传0Day代审历程
Git仓库: https://github.com/crmeb/CRMEB简介: 两天攻防中,某政局子公司官网后台采用的CRMEB开源商城CMS,挺奇葩,别问怎么总让我碰到这种东西,我也不知道,主打的就是一个魔幻、抽象。最后通过…...
孙哥Spring源码第18集
第18集 refresh()-invokeBeanFactoryPostProcessor-二-ConfigurationClassPostProcessor的处理逻辑 【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】 1、为什么PropertySource先处理? 因为Conponent A在处理的过程中 要把…...
【STM32】文件系统FATFS与Flash的初步使用
文件系统简介 简介可以不看,直接看移植步骤 文件系统是介于应用层和底层间的模糊层。底层提供API,比如说使用SDIO或者SPI等读写一个字节。文件系统把这些API组合包装起来,并且提供一些列函数,我们可以使用这些函数进行更进一步的…...
Android Glide in RecyclerView,only load visible item when page return,Kotlin
Android Glide in RecyclerView,only load visible item when page return,Kotlin base on this article: Android Glide preload RecyclerView切入后台不可见再切换可见只加载当前视野可见区域item图片,Kotlin_zhangphil的博客…...
【SCI征稿】3个月左右录用!计算机信息技术等领域均可,如机器学习、遥感技术、人工智能、物联网、人工神经网络、数据挖掘、图像处理
计算机技术类SCIE&EI 【期刊简介】IF:1.0-2.0,JCR4区,中科院4区 【检索情况】SCIE&EI 双检,正刊 【参考周期】期刊部系统内提交,录用周期3个月左右,走完期刊部流程上线 【征稿领域】计算机信息…...
Golang 中的 crypto/ecdh 包详解
什么是 ECDH 算法? ECDH(Elliptic Curve Diffie-Hellman)算法是一种基于椭圆曲线的密钥交换协议,用于安全地协商共享密钥(Secret Key),步骤如下: 1. 选择椭圆曲线:ECDH…...
系统学习live555
文章目录 系统学习live555系统学习LIVE555的步骤:1.了解基本概念:2.**查看官方文档:**3.**下载和编译库:**4.**阅读示例代码:**5.**了解库结构:**6.**创建简单项目:**7.**阅读更多文档ÿ…...
Linux下的系统编程——进程的执行与回收(八)
前言: 前面我们对进程已经有了一个初步的了解与认识,现在让我们学习一下进程中一些函数的具体使用,比如exec可以执行一些指定的程序,wait / waitpid可以回收子进程,什么是孤儿进程,什么是僵尸进程…...
第十九章 ObjectScript - 执行例程
文章目录 第十九章 ObjectScript - 执行例程执行例程New 命令 第十九章 ObjectScript - 执行例程 执行例程 执行例程时,使用DO命令,如下所示: do ^routinename要执行一个过程、函数或子程序(不访问其返回值),可以使用以下命令: do label^ro…...
Podman安装与使用
1.Podman简介 Podman是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行OCI容器。 Podman的主要功能包括: 创建和管理容器:Podman可以创建、启动、停止和删除容器,以及管理容器的生命周期。容器镜像管理࿱…...
C++ 嵌套循环
一个循环内可以嵌套另一个循环。C 允许至少 256 个嵌套层次。 语法 C 中 嵌套 for 循环 语句的语法: for ( init; condition; increment ) {for ( init; condition; increment ){statement(s);}statement(s); // 可以放置更多的语句 }C 中 嵌套 while 循环 语句的…...
锁( ReentrantLock,Synchronized)
1.lock和synchronized 语法层面 synchronized 是关键字,源码在 jvm 中,用 c 语言实现; Lock 是接口,源码由 jdk 提供,用 java 语言实现; 使用 synchronized 时,退出同步代码块锁会自动释放&…...
主频计算-架构真题(二十三)
某文件系统采用多级索引结构,若磁块大小为4K字节,每个块号需占4个字节,那么采用二级索引结构时的文件最大长度可占用()个物理块。 1、1024 2、1024*1024 3、2048*2048 4、4096*4096 答案:B 解析&…...
docker安装redis实操记录
1.Docker拉取镜像 docker pull redis2.Docker挂载配置文件 创建挂载文件夹 mkdir -p /home/redis/data下载默认配置文件 redis.conf 3.启动redis 容器 docker run --restartalways --log-opt max-size100m --log-opt max-file2 -p 6379:6379 --name redis -v /home/redi…...
ANSYS接触分析实战:从法兰连接案例看MPC绑定与标准接触设置技巧
ANSYS接触分析实战:法兰连接中的MPC绑定与标准接触配置全解析 在机械工程领域,法兰连接作为管道系统中最常见的连接方式之一,其可靠性直接影响整个系统的安全运行。传统设计方法往往依赖经验公式和安全系数,难以准确预测复杂工况下…...
告别VSCode与VS:在CLion中构建LVGL模拟器的完整实践(Windows 10)
1. 为什么选择CLion开发LVGL模拟器 作为一个长期在嵌入式领域摸爬滚打的开发者,我深知开发环境统一的重要性。LVGL作为轻量级嵌入式GUI库,官方推荐了VSCode和Visual Studio作为主要开发工具,但这并不意味着我们不能在CLion中实现同样的功能。…...
从零到部署:手把手教你用Django+OpenCV搭建一个能识别交通标志的“智能眼”(附完整源码)
实战指南:用DjangoOpenCV构建高精度交通标志识别系统 1. 环境配置与项目初始化 在开始构建交通标志识别系统前,需要准备完善的开发环境。以下是经过验证的配置方案: 核心工具栈选择: Python 3.9(推荐3.10.6版本&#x…...
揭秘APP签名信息:如何快速获取MD5、SHA1和SHA256值
1. 为什么需要获取APP签名信息? 当你下载一个APP时,有没有想过如何确认它真的是官方发布的版本?或者作为开发者,如何确保自己打包的APK没有被篡改?这些问题的答案都藏在APP的签名信息里。签名信息就像APP的"身份证…...
FreeRTOS定时器那些坑:调试3天发现的优先级配置与内存泄漏问题
FreeRTOS定时器实战避坑指南:从优先级陷阱到内存泄漏的深度解析 凌晨三点的调试灯依然亮着,逻辑分析仪屏幕上跳动的波形似乎在嘲弄我的无知——这已经是连续第三天被FreeRTOS定时器"教做人"了。从优先级配置失误导致系统卡死,到内存…...
自动驾驶中的路径规划实战:手把手教你用Python复现RRT与RRT*算法(含动态演示)
自动驾驶路径规划实战:Python实现RRT与RRT*算法全解析 从理论到实践的路径规划探索 在自动驾驶技术快速发展的今天,路径规划作为核心算法之一,直接决定了车辆能否安全高效地完成行驶任务。想象一下,当你驾驶车辆进入一个复杂的停车…...
TrafficMonitor插件完全指南:打造终极个性化Windows监控中心
TrafficMonitor插件完全指南:打造终极个性化Windows监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins TrafficMonitor作为Windows系统监控工具,通过…...
被裁员后,我用这个 AI 助手每天只工作 2 小时|OpenClaw 实战
😭 被裁员后,我用这个 AI 助手每天只工作 2 小时“真正的自由,不是想做什么就做什么,而是不想做什么就可以不做什么”01 一个普通打工人的至暗时刻 上个月,公司裁员 30%。 我所在的部门,5 个人走了 3 个。 …...
电源键按下去后发生了什么?用Wireshark+日志分析揭秘操作系统启动的隐藏细节
电源键背后的技术探秘:用Wireshark与日志分析揭开系统启动的黑盒 当你按下电源键的那一刻,整台计算机仿佛被注入了生命。但在这个看似简单的动作背后,隐藏着一场精密编排的技术交响乐。作为运维工程师或开发者,理解这个过程不仅有…...
DanKoe 视频笔记:写作技能:掌握写作,驾驭未来十年
概述 在本节课中,我们将要学习为什么写作是未来十年最重要的元技能,以及如何通过一个清晰的六步框架和一套实用的写作方法,开启你的个人写作事业。我们将探讨写作如何放大你的其他技能,并为你提供一套从零开始构建影响力的具体行…...
