AIGC开发:调用openai的API接口实现简单机器人

简介

开始进行最简单的使用:通过API调用openai的模型能力
OpenAI的能力如下图:
在这里插入图片描述

文本生成模型

OpenAI 的文本生成模型(通常称为生成式预训练 Transformer 或大型语言模型)经过训练可以理解自然语言、代码和图像。这些模型提供文本输出来响应其输入。这些模型的输入也称为“提示”。设计提示本质上是如何“编程”大型语言模型,通常是通过提供说明或一些如何成功完成任务的示例。

Chat Completions API 聊天功能代码示例

聊天模型将消息列表作为输入,并返回模型生成的消息作为输出。尽管聊天格式旨在使多轮对话变得容易,但它对于没有任何对话的单轮任务也同样有用。

import os
from openai import OpenAI

# 加载 .env 到环境变量
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

# 配置 OpenAI 服务,需要获取API_KEY
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)

response = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "hi,讲个笑话吧",
        }
    ],
    model="gpt-3.5-turbo",
)

print(response)

completions-api 补全功能代码示例

API于 2023 年 7 月收到最终更新,并且具有与新的聊天完成端点不同的界面。输入不是消息列表,而是称为提示的自由格式文本字符串。

import os
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv((find_dotenv()))
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)


def get_prompt(prompt, model="gpt-3.5-turbo-instruct", ):
    response = client.completions.create(
        model=model,
        prompt=prompt,
        temperature=0.9,
        max_tokens=20,
        stream=True
    )
    return response


if __name__ == "__main__":
    response = get_prompt("今天我不")
    for chunk in response:
        print(chunk.choices[0].text, end="")

Chat Completions vs. Completions

官网已说明停止更新Completions,推荐使用Chat Completions

简单机器人(感知上下文)

带入一些业务场景来使用,机器人最开始吸引我的就是上下文的联系,调用API的时候需要把之前的聊天内容保存并再次发过去,下面用一个简单示例演示下是如何进行处理的

import json
import os
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())
client = OpenAI(
    # defaults to os.environ.get("OPENAI_API_KEY")
    api_key=os.getenv("OPENAI_API_KEY")
)

# 定义消息历史。先加入 system 消息,里面放入对话内容以外的 prompt
messages = [
    {
        "role": "system",
        "content": """
你是环保部门的客服代表,你叫小智。可以帮助用户选择最合适的地市环保政策。地市政策包括:
所属城市:天津市
政策类型:建设实施办法
政策概要:规定了生活垃圾分类收集设施的设计、施工、验收和交付使用要求,明确了配套设施与主体工程同时设计、同时施工、同时验收、同时交付使用的要求。
适用企业类型:各类建设主体。

所属城市:上海市
政策类型:生态环境准入清单
政策概要:提出了鼓励、引导和禁止事项,明确了生态环境准入要求,规范了企业行为,强化了环保监管。
适用企业类型:上海市行政区域内的企业。

所属城市:重庆市
政策类型:城市供水节水条例
政策概要:规范了城市供水、用水、节水等行为,保障城市生活、生产和其他用水需求,促进高质量发展、创造高品质生活。
适用企业类型:重庆市行政区域内的供水企业和用户。

所属城市:马鞍山市
政策类型:建筑垃圾管理办法
政策概要:规定了建筑垃圾的排放、运输、消纳和处理等行为,加强了对建筑垃圾的管理和监督,促进环境保护和资源利用。
适用企业类型:马鞍山市行政区域内的建设单位、施工单位和建筑垃圾运输单位。

注意使用 JSON 格式输出回答。
"""
    }
]

def get_completion(prompt, model="gpt-3.5-turbo-1106"):
    # 把用户输入加入消息历史
    messages.append({"role": "user", "content": prompt})

    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0,
        response_format={"type": "json_object"}
    )
    msg = response.choices[0].message.content

    # 把模型生成的回复加入消息历史。很重要,否则下次调用模型时,模型不知道上下文
    messages.append({"role": "assistant", "content": msg})
    return msg

if __name__ == "__main__":
    get_completion("有北京的政策吗?")
	get_completion("城市供水有哪些政策?")
	get_completion("这是哪个城市的政策?")
    print(messages)

返回结果

[
    {
        "role": "system",
        "content": "\n你是环保部门的客服代表,你叫小智。可以帮助用户选择最合适的地市环保政策。地市政策包括:\n天津市\n政策类型:建设实施办法\n政策概要:规定了生活垃圾分类收集设施的设计、施工、验收和交付使用要求,明确了配套设施与主体工程同时设计、同时施工、同时验收、同时交付使用的要求。\n适用企业类型:各类建设主体。\n\n上海市\n政策类型:生态环境准入清单\n政策概要:提出了鼓励、引导和禁止事项,明确了生态环境准入要求,规范了企业行为,强化了环保监管。\n适用企业类型:上海市行政区域内的企业。\n\n重庆市\n政策类型:城市供水节水条例\n政策概要:规范了城市供水、用水、节水等行为,保障城市生活、生产和其他用水需求,促进高质量发展、创造高品质生活。\n适用企业类型:重庆市行政区域内的供水企业和用户。\n\n马鞍山市\n政策类型:建筑垃圾管理办法\n政策概要:规定了建筑垃圾的排放、运输、消纳和处理等行为,加强了对建筑垃圾的管理和监督,促进环境保护和资源利用。\n适用企业类型:马鞍山市行政区域内的建设单位、施工单位和建筑垃圾运输单位。\n"
    },
    {
        "role": "user",
        "content": "有北京的政策吗?"
    },
    {
        "role": "assistant",
        "content": "很抱歉,我没有北京市的政策信息。如果您需要了解北京市的环保政策,建议您直接咨询北京市环保部门或者相关政府部门,他们会提供最准确和最及时的信息。"
    },
    {
        "role": "user",
        "content": "城市供水有哪些政策?"
    },
    {
        "role": "assistant",
        "content": "城市供水的政策主要包括以下几个方面:\n\n1. 水资源管理政策:针对城市供水的水资源管理,包括水资源保护、水资源配置、水资源利用效率等方面的政策。\n\n2. 水质管理政策:针对城市供水的水质管理,包括水源地保护、水处理工艺、水质监测等方面的政策。\n\n3. 供水设施建设政策:针对城市供水设施的建设和维护,包括供水管网建设、水厂建设、水泵站建设等方面的政策。\n\n4. 供水价格管理政策:针对城市供水的价格管理,包括水价制定、水费收取、价格监管等方面的政策。\n\n5. 供水节水政策:针对城市供水的节水管理,包括水资源合理利用、水损失控制、水价激励等方面的政策。\n\n具体的城市供水政策会因地区而异,您可以咨询当地的环保部门或者供水公司,了解更详细的政策信息。"
    },
    {
        "role": "user",
        "content": "这是哪个城市的政策?"
    },
    {
        "role": "assistant",
        "content": "这是一个通用的描述,适用于各个城市的供水政策。不同城市的具体政策可能会有所不同,您可以咨询所在城市的环保部门或供水公司,获取更准确的信息。"
    }
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/279447.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven项目提示Ignored pom.xml问题

1 环境 (1)IDEA开发工具:2022.2.1 (2)JDK:Java17(Spring6要求JDK最低版本是Java17) (3)Spring:6.1.2 (4)Maven 3.8.8 2 …

vscode 支持c,c++编译调试方法

概述:tasks.jason launch.json settings.json一定要有,没有就别想跑。还有就是c 和c配置有区别,切记,下文有说 1.安装扩展插件。 2.安装编译器,gcc.我用的是x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z &#xf…

力扣LeetCode第80题 删除有序数组中的重复项 II

一、题目 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示…

后端程序员React初接触1

后端程序员React初接触 学习react基础与相关库的使用学习 包括react基础 路由 组件库等等 react是用于构建用户界面的JavaScript库 发送请求获取数据处理数据操作dom呈现页面(react帮忙操作dom) 数据渲染为视图 有facebook打造并开源 解决的问题 dom操…

【教学类-43-05】 不可用 20231229 N宫格数独5.0(n=1-9) (ChatGPT AI对话大师生成 随机数字填空 )

说明:本代码使用“”随机数字填空”,结果有误差 不能使用 背景需求: 大4班20号说:我不会做这种(九宫格),我做的是小格子的, 他把手工纸翻过来,在反面自己画了矩阵格子。…

FPGA设计时序约束十四、Set_External_Delay

一、序言 在时序约束中对clock的约束还存在一种特殊的延时约束set external delay。set external delay如字面含义,设置外部的时延值,但这个外部时延主要是指反馈时延,即信号从FPGA的output端口输出后经过外部电路回到输入端口的时延值。 二…

频谱论文:基于空间稀疏采样的频谱态势生成: 模型与算法

#频谱# 张国勇,王军,陈霄南等.基于空间稀疏采样的频谱态势生成:模型与算法[J].中国科学:信息科学,2022,52(11):2011-2036. (电子科技大学) 摘要 面对日益复杂的电磁频谱环境和持续增长的用频需求, 为了维护电磁频谱秩序和安全, 提高频谱资源整体利用效率…

Java的继承和实现、接口和抽象类,它们的区别?

之前我写过Java的继承和多态的用处,这次讲讲继承和实现,接口和抽象类的区别,这其实是个很基础的Java知识,但是真的非常重要。特别是在阅读源码的时候,源码里面用了大量的继承和实现,接口以及抽象类&#xf…

4.25 构建onnx结构模型-Unsuqeeze

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Unsuqeeze 结点进行分析 方式 方法…

java三种注释方式

Java 中的注释有三种: 单行注释:通常用于解释方法内某单行代码的作用。 多行注释:通常用于解释一段代码的作用。 文档注释:通常用于生成 Java 开发文档。

PPT可以转换成电子画册吗

答案是当然可以,PPT是可以转换成电子画册的。电子画册具有3D仿真翻页的效果,而且还可以很好地保存图片和文字信息,并方便在各种设备上查看。 要将PPT转换成电子画册,只需要一个工具就能轻松转换。给大家推荐这款转换工具&#xff…

2023,我所见到的智能中国

有一个我很喜欢的电商官微,经常在半夜发微博,第一句话经常是,“夜深了,跟大家说点掏心窝子的话”。时值年末,我们也不妨效仿一下,来说一点掏心窝子的话吧。 就像往年一样,这一年脑极体团队去了很…

tcp/ip实现两个手机之间连接同步显示

app主界面 选择一:TCP客户端 选择二:TCP服务端 点击下图item时进入曲线绘制页面 如果是服务器端它不需要连任何设备就可以直接进入绘制界面如果是TCP的话就不能直接进入,否则就会提示未连接网络连接不能放在主线程,页面去调方法&…

C#中使用using关键字回收资源

目录 一、一般表达式 二、示例 三、生成 在进行文件操作后要显式调用文件流的Close方法释放文件资源,在使用数据库连接时也要调用连接对象的Close方法释放数据库资源。如果忘记调用Close方法,有可能会导致程序执行异常,而且还会导制垃圾收…

Sentinel-3如何处理并下载LST数据-陆地表面温度”(Land Surface Temperature)

LST 通常指的是“陆地表面温度”(Land Surface Temperature)。陆地表面温度是指地球表面上陆地部分的温度,而不包括水体表面。LST 是遥感技术中一个重要的参数,可以通过卫星遥感等手段进行测量和监测。 陆地表面温度对于许多领域…

Linux磁盘阵列

一.RAID磁盘阵列介绍 RAID(Redundatnt Array of lndependent Disks),全称为:独立冗余磁盘阵列 解释: RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻…

从零开始:使用 BIND 构建和管理您的 DNS 服务器

1 前言 在这篇文章中,我将详细介绍如何使用 BIND(Berkeley Internet Name Domain)软件包中的 named 程序来配置和管理一个基本的 DNS 服务器。 从安装 BIND 开始,到设置 DNS 区域文件,再到运行和测试您的服务器&#x…

[mysql 基于C++实现数据库连接池 连接池的使用] 持续更新中

目背景 常见的MySQL、Oracle、SQLServer等数据库都是基于C/S架构设计的,即(客户端/服务器)架构,也就是说我们对数据库的操作相当于一个客户端,这个客户端使用既定的API把SQL语句通过网络发送给服务器端,MyS…

普中STM32-PZ6806L开发板(HAL库函数实现-无源蜂鸣器响动)

简介 本篇将驱动无源蜂鸣器进行5KHz的响动。电路原理图 蜂鸣器电路原理图 主芯片驱动引脚原理图 其他知识 蜂鸣器类型 蜂鸣器分为 有源蜂鸣器 :触发就会响。 无源蜂鸣器 : 需要给源, 输出一定频率的音频信号, 震动发声; 占空比 为什么占空比总是5…

【Java】SpringBoot快速整合WebSocket实现客户端服务端相互推送信息

目录 什么是webSocket? webSocket可以用来做什么? WebSocket操作类 一:测试客户端向服务端推送消息 1.启动SpringBoot项目 2.打开网站 3.进行测试消息推送 4.后端进行查看测试结果 二:测试服务端向客户端推送消息 1.接口代码 2.使…