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

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek