揭开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

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源