【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对

这篇具有很好参考价值的文章主要介绍了【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当我们需要将大段文档转化为问答对时,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 requests


url = '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 None


def 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 None


def 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 content
    except 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 产品教程,欢迎点赞收藏!文章来源地址https://www.toymoban.com/news/detail-695403.html

到了这里,关于【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB/ SIMULINK模型在环MIL测试工具,自动化模型测试工具,自动生成测试报告

    MATLAB/ SIMULINK模型在环MIL测试工具,自动化模型测试工具,自动生成测试报告。 软件纯自己编写,经过长时间测试,包教会。 使用简单,可以参考如下截图。 ID:972000 677200256038 悦潮风尚

    2024年02月16日
    浏览(52)
  • 【AltWalker】模型驱动:轻松实现自动化测试用例的自动生成和组织执行

    模型驱动的自动化测试(Model-Based Testing, 后文中我们将简称为MBT)是一种软件测试方法,它将系统的行为表示为一个或多个模型,然后从模型中自动生成和执行测试用例。这种方法的核心思想是将测试过程中的重点从手动编写测试用例转移到创建和维护描述系统行为的模型。

    2024年02月15日
    浏览(48)
  • 【AltWalker】模型驱动:轻松实现自动化测试用例的生成和组织执行

    模型驱动的自动化测试(Model-Based Testing, 后文中我们将简称为MBT)是一种软件测试方法,它将系统的行为表示为一个或多个模型,然后从模型中自动生成和执行测试用例。这种方法的核心思想是将测试过程中的重点从手动编写测试用例转移到创建和维护描述系统行为的模型。

    2024年02月15日
    浏览(73)
  • 【ChatGPT实战】6.使用ChatGPT自动化生成PPT

    如果需要使用ChatGPT生成PPT,我相信看了上一篇Excel教程的读者,就会想到也通过ChatGPT生成VBA代码,再通过运行VBA代码的方式来自动生成PPT。 理论上是可以的,但是当你实际操作的时候会发现很难实现。因为PPT包含的元素实在是太多了,每张幻灯片都有标题和正文、都有不同

    2024年02月08日
    浏览(45)
  • 如何使用自动化构造随机路由模型

    路由器测试中,为了最大程度还原现网路由情况,评估路由器在现网环境下稳定工作各项指标,需要对导入路由进行离散仿真,目前路由仿真可分为导入路由与生成路由两种方式,导入路由需要现网路由表导入,本文讨论重点为生成路由方式。 使用用户界面生成路由时,可根

    2024年02月16日
    浏览(38)
  • 【办公自动化】使用Python批量生成PPT版荣誉证书

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、Python处理PPT 二、批量生成PPT版荣誉证书  三、往期推荐           使用Python处

    2024年02月12日
    浏览(44)
  • 使用python测试框架完成自动化测试并生成报告-实例练习

    558 pytest -v -s PyTest.py --alluredir=./result/   在测试执行期间收集结果  559 allure serve ./result/   测试完成后查看实际报告, 在线看报告   

    2024年02月07日
    浏览(49)
  • 如何使用apifox打包测试用例生成测试套件自动化执行

    1、首先点击自动化测试--创建测试用例--新建分组(整理每个模块对应的测试用例),右键点击对应的分组新建测试用例,开始创建测试用例。 2、创建测试用例:输入对应的名称,以及用例执行的优先级(核心、高、中、低),添加对应的用例备注(说明)  3、编辑测试用

    2024年02月11日
    浏览(52)
  • 花2个月时间整理了3.5W字的自动化测试面试题(答案+学习路线)!为了找到好工作,拼了!

    从5月初开始找工作到现在,先后面试了阿里巴巴、字节跳动、网易、快手的测试开发岗。 大公司对于测试开发的要求相比来说高很多,要求掌握的知识点的广度和深度层次也比较高,遂整理了这两个月的面试题目文档供大家参考,同时也是为了方便以后自己需要的时候刷一

    2024年02月09日
    浏览(45)
  • 使用GPT-4生成训练数据微调GPT-3.5 RAG管道

    OpenAI在2023年8月22日宣布,现在可以对GPT-3.5 Turbo进行微调了。也就是说,我们可以自定义自己的模型了。然后LlamaIndex就发布了0.8.7版本,集成了微调OpenAI gpt-3.5 turbo的功能 也就是说,我们现在可以使用GPT-4生成训练数据,然后用更便宜的API(gpt-3.5 turbo)来进行微调,从而获得

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包