揭开ChatGPT面纱(4):单轮及多轮文本生成任务实践(completions接口)

本文主要是介绍揭开ChatGPT面纱(4):单轮及多轮文本生成任务实践(completions接口),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、completions接口解析
    • 1.参数说明
    • 2.prompt
  • 三、实践
    • 1.单次对话
    • 2.多轮对话

openai版本==1.6.1
本系列博客源码仓库:gitlab,本博客对应文件夹04


在前面的博客中介绍过了OpenAI一共有11个接口,其中completions接口常用于文本生成类任务。下面来对completions接口的参数、使用进行一些介绍。

一、completions接口解析

1.参数说明

  • completions接口可以传入很多个参数,但这里只介绍常用的几个参数:

model: 要使用的模型的ID。参数中列出了多个预定义的模型常量。
prompt: 一个提供给OpenAI模型的提示,可以是字符串、字符串列表、整数列表或整数数组列表。
max_tokens: 生成的回答可以包含的最大token数。
n: 每个提示生成的回答数量。
temperature: 采样时使用的温度值,影响输出的随机性。取值从0~1.0值越大随机性越强。

在这里插入图片描述

2.prompt

在OpenAI的上下文中,prompt 是指用户输入以激发语言模型(如DALL-E、GPT-3等)产生特定输出的文本。这个概念在与OpenAI的API交互时非常重要,因为它直接影响到模型的响应和生成的内容。可以这样理解,prompt就是用户提供给大语言模型的指令。因此提供准确清晰的prompt对于大语言模型生成准确的回答至关重要。

下面通过几个小案例来演示如何使用completions接口完成文本生成相关的任务。

三、实践

1.单次对话

  • 在这个案例中,我们让OpenAI扮演一个律师的角色,然后向它提出法律问题咨询。
from openai import OpenAI
import json
import httpx# 读取配置,在上传gitlab时配置文件ignore了
with open('../config/openai.json') as config_file:config = json.load(config_file)client = OpenAI(base_url=config['base_url'],api_key=config['key'],http_client=httpx.Client(base_url=config['base_url'],follow_redirects=True,),
)# 指定模型
MODEL = "gpt-3.5-turbo"# 指定预定义prompt,用于提示模型生成满足要求的文本
prompt = '请你站在一个律师的角度分析用户的提问,并给出专业的回答,以下是用户的提问:'# 实现具体的问答方法
def get_case(question):completions = client.completions.create(model=MODEL,prompt=prompt + question,  # 将用户的提问与预定义的prompt前缀拼接起来传入n=1)output = completions.choices[0].message['content']return output# 调用方法,通过终端输入的方式进行提问
user_input = input("请输入法律咨询问题:")
answer = get_case(user_input)
print(f"\n咨询结果:{answer}")
  • 然后,我向它提出了问题:我最近收到了一张交通罚单,但我确信我当时并没有超速。我应该如何提出异议?

在这里插入图片描述

它确实站在律师的角度上给了比较详细的回答。

2.多轮对话

在上一个案例中,我们只能向OpenAI提出一个问题,无法继续进行补充提问。在这一个案例中,我们尝试通过不断拼接prompt的方式来进行多轮对话。

from openai import OpenAI
import json
import httpx# 读取配置,在上传gitlab时配置文件ignore了
with open('../config/openai.json') as config_file:config = json.load(config_file)client = OpenAI(base_url=config['base_url'],api_key=config['key'],http_client=httpx.Client(base_url=config['base_url'],follow_redirects=True,),
)# 指定模型
MODEL = "gpt-3.5-turbo"# 指定预定义prompt,用于提示模型生成满足要求的文本
prompt = '请你站在一个律师的角度分析用户的提问,并给出专业的回答,以下是问答过程:\n'# 实现单次问答的方法
def get_case(question):completions = client.completions.create(model=MODEL,prompt=question,n=1)output = completions.choices[0].message['content']return output# 调用方法,通过终端输入的方式进行提问,不断拼接prompt来让OpenAI模型记住上下文
print('您好,我是一个AI法律咨询机器人,现在开始您的提问吧,您可以通过输入【exit】来结束对话:')
while True:user_input = input("Q:")if user_input.lower() == 'exit':print('bye~')breakprompt = prompt + user_input + '\n'answer = get_case(prompt)prompt = prompt + 'A:' + answer + '\n'print(f"A:{answer}")
  • 问答过程:
D:\setup\tensorflow\envs\openaidemo\python.exe "D:/0 project/openaidemo/04/multi_turn.py"
您好,我是一个AI法律咨询机器人,现在开始您的提问吧,您可以通过输入【exit】来结束对话:
Q:我最近在工作时受伤了,但我的雇主拒绝承认这是工伤。我需要提供什么证据来申请工伤赔偿?
A:作为律师,首先我会建议您尽快收集和保留与受伤事件相关的所有证据。这些证据可能包括但不限于:1. **医疗记录和诊断报告:** 您应该尽快就医并确保医疗记录详尽记录了您受伤的情况、诊断结果以及治疗过程。医生的诊断对于证明受伤是否与工作相关至关重要。2. **证人证言:** 如果有其他人目击了受伤事件,他们的证言可能对您的案件有帮助。确保尽可能多地收集证人的联系方式,并在必要时寻求他们的证言或证词。3. **工作记录:** 如果您的工作需要您执行某些危险或重体力劳动,您可以提供相关的工作记录来证明受伤可能与工作相关。4. **通知雇主的证据:** 如果您已经向雇主报告了受伤事件,您可能需要提供相关的书面通知或通讯记录作为证据。5. **安全记录和监控录像:** 如果您受伤的地点有安全摄像头或监控设备,相关的录像可能作为证据来证明受伤的情况。6. **就业合同和政策文件:** 您的就业合同或公司政策文件可能包含有关工伤赔偿的条款和程序。确保您理解并遵守这些规定。7. **其他相关证据:** 任何其他与受伤事件相关的证据,如照片、报告或其他文件,也应该被收集和保留。根据您提供的证据,律师可以帮助您评估您的案件并提供相关的法律建议。在提起工伤赔偿申请之前,确保您有足够的证据来支持您的主张是至关重要的。
Q:录音可以吗
A:当然,录音也可以作为证据之一,特别是如果录音能够清晰地表明了受伤事件的发生以及与雇主之间的相关对话或交流。录音可以提供额外的支持,有助于证明您的受伤事件以及雇主对此事件的态度或反应。然而,在录音之前,请确保您了解您所在地区的法律规定,以确保您的录音行为合法,并且不违反任何相关的法律。此外,与律师讨论您计划录音的细节和用途也是一个明智的做法,因为他们可以为您提供针对性的建议,以确保您的权益得到充分保护。
Q:家人可以作为证人吗
A:是的,家人可以作为证人,特别是如果他们目击了您受伤事件的发生或者与您就受伤事件进行了相关的讨论或交流。他们可以提供关于事件经过的描述、您受伤后的情况以及您可能遇到的困难的证言。然而,需要注意的是,家人的证言可能会被视为有偏见的,因为他们与您有亲属关系。在使用家人作为证人时,很可能需要额外的证据来支持他们的证言,以增加其可信度。同时,确保您的律师了解您计划提供的证人,并为您提供相关的建议和指导。
Q:exit
bye~Process finished with exit code 0

可以看到,模型明显记住了上下文。

这篇关于揭开ChatGPT面纱(4):单轮及多轮文本生成任务实践(completions接口)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925819

相关文章

【AI知识】Stable diffusion常用提示词分享

模型(Model) majicmixRealistic_v7 majicmixRealistic(麦橘写实)是融合了多种展现日常生活人物形象的写实风格模型,人物的外观更加接近现实生活,对于光影、皮肤、人物动态均有较好的表现,非常适合出美女图片。 LoRA (1)add_detail 用于增强/减少细节,同时保持整体风格,它适用于所有类型的基础模型(包括动画和写实模型)/风格LoRA

Spring自动装配:解析原理与实践

在Spring框架中,自动装配是一种强大的特性,它能够根据一定的规则自动地将bean装配到Spring容器中,从而简化了配置和开发过程。本文将深入探讨Spring自动装配的原理和实践,帮助程序员更好地理解和应用这一重要特性。 1. 什么是自动装配? 在传统的Spring开发中,我们需要在XML配置文件或Java配置类中显式地定义bean的依赖关系和装配规则。而自动装配则是一种更加方便的方式,它

浙大×移动云,携手点亮AI新时代

近年来,中国移动依托强大的算网资源优势,围绕大模型训练、推理和应用三大场景,打造了一站式智算产品体系。该体系旨在为客户提供覆盖资源、平台、应用的AI全链路服务。目前,一站式智算产品体系已在浙江大学智算中心和许昌中原智算中心等落地实践,助力企业和科研人员快速开发,加速AI创新进程。 浙江大学信息技术中心主任、教授、博士生导师陈文智先生,在2024中国移动算力网络大会上,分享了浙江大学与

AI智能化逐渐趋于成熟后,预测今后最吃香的开发职业

AI智能化正在成熟的路途中,这中间会有波折,但终有一天会来的,我相信等到了这一天,我们的开发效率和代码质量,将会大大不同,而我们的团队与个人,也会面临着很棒的体验。 那么在AI智能化真正趋于成熟后,最吃香的开发职业将会是哪个呢?一起来看一下吧。 目录 1 开发日常代码工作有哪些? 2 代码开发的过程 3 那么AI可以帮助我们做哪些事情呢? 3.1 听需求阶段 3.2 技术

spring boot 文件上传接口设计

多文件上传,参数是album for (MultipartFile file : album) {temp_photoName=file.getOriginalFilename();System.out.println("upload pic:"+temp_photoName);File photo = new File(path, temp_photoName);if (!photo.e

危化工厂安全监管新篇章:智能化视频监控方案的探索与实践

一、背景需求分析 危化品因其特殊的物理和化学性质,一旦发生事故,往往会造成严重的人员伤亡和财产损失。传统的监管手段往往依赖于人工巡查和定期检测,然而这种方式不仅效率低下,而且难以全面覆盖和实时监控。因此,借助现代信息技术,特别是视频智能监控技术,构建一套高效、智能的危化工厂视频监管方案,成为了解决这一问题的关键。 此外,社会对安全生产的关注度不断提升,也对危化品生产行业的安全监管提出了更高的要

mysql简单存储过程范例之遍历数据库生成视图

范例: BEGIN-- 定义参数declare done int(10);declare p_feeCode varchar(50);declare abc varchar(50);declare sqlstr varchar(500);-- 定义游标declare feeCodeCursor cursor for select TABLE_NAME FROM INFOR

文本溢出部分显示为省略号的不同方式

HTML代码: <div><p class="p1">CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。</p><p class="p2">CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、

Vue中自动生成路由配置文件覆盖路由配置

Vue中自动生成路由配置文件覆盖路由配置 设计思路 读取@/views下所有index.vue如果当前文件下有包含相同路径则认为是它的子路由。但也不能就这样写死,要创建page.(ts|js)配置文件也可以更改当前的配置,Page.(ts|js)比重大于自动生成的路由配置。 踩坑点 坑点1 这里的'@/views'不能使用变量传入。 (require as any).context('

理论+实践,带你了解分布式训练

随着语言模型参数量和所需训练数据量的急速增长,单个机器上有限的资源已无法满足大语言模型训练的要求。需要设计分布式训练(Distributed Training)系统来解决海量的计算和内存资源要求问题。 在分布式训练系统环境下需要将一个模型训练任务拆分成多个子任务,并将子任务分发给多个计算设备,从而解决资源瓶颈。但是如何才能利用包括数万计算加速芯片的集群,训练模型参数量千亿甚至是万亿的大规模语