ChatGPT实践-构建简单的AI聊天机器人(python)

本文指导如何通过调用OpenAI的API完成一个简单的聊天机器人。

背景知识

API介绍

我们可以通过任何语言的 HTTP 请求、官方 Python 、 Node.js 库或社区维护的库与 ChatGPT的API 进行交互,官方API文档:

API Reference - OpenAI API (可自行去查看)

所以python是有现成包用的,会比调用原始的HTTP请求容易一些,python包:

openai/openai-python: The official Python library for the OpenAI API

本文使用Python编程语言完成一个简单的AI聊天机器人。

一次简单的调用

如果要调用ChatGPT的API其实非常简单,只需要几行代码,像下面这样:

import openaiopenai.api_key = "替换为你的key"
openai.api_base = "如果走绕路这里填写对应的服务商的网址"response = openai.ChatCompletion.create(model='gpt-3.5-turbo',messages=[{'role': 'user', 'content': 'hello.'},],temperature=1,  # 控制模型输出的随机程度
)
# 打印ChatGPT的回复
print(response.choices[0].message["content"])

运行后可以看到如下打印:

Hello! How can I assist you today?

一次调用就完成了。

几种消息的介绍

上面的messages参数中有一个role关键字,它有3中类型,对应3中消息,这里介绍一下:

系统消息

在ChatGPT的客户端聊天窗口是看不到系统消息的,这个是API中才有的,主要是给开发人员使用的。

系统消息主要用来设置聊天机器人的角色和行为,相当于给它一些默认的指令。

用户消息

就是你在聊天窗口发的内容,称为「用户消息」,

助手消息

就是ChatGPT发给你的内容,称为「助手消息」。

代码

来看看一个简单的完成的AI聊天机器人的代码:

import openaiopenai.api_key = "替换为你的"
openai.api_base = "如果走绕路这里填写对应的服务的网址"def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):response = openai.ChatCompletion.create(model=model,messages=messages,temperature=temperature,  # 控制模型输出的随机程度)return response.choices[0].message["content"]context = [# 上下文中定义一个系统角色,告诉ChatGPT他是一个友好的助手,后面的回复它都会是一个非常友好的态度{'role': 'system', 'content': 'You are a friendly assistant.'},
]def chat_to_bot(prompt):# 我们发送的信息角色是usercontext.append({'role': 'user', 'content': f"{prompt}"})response = get_completion_from_messages(context)# 注意这里,需要将先前的内容一并发给ChatGPT# ChatGPT返回回来得消息的角色是assistantcontext.append({'role': 'assistant', 'content': f"{response}"})return f'Bot: {response}'if __name__ == '__main__':while True:user_input = input("You: ")print(chat_to_bot(user_input))

代码解释:

  • 定义了一个get_completion_from_messages函数,该函数向 OpenAI API 发送一系列消息并获取响应。 messages 参数是消息对象的列表,每个对象都有一个“角色”(可以是“系统”、“用户”或“助理”)和“内容”(消息的内容) 。 “温度”参数控制模型输出的随机性。

  • context 定义了对话的初始上下文,告诉模型它正在扮演友好助手的角色。

  • chat_to_bot此函数向聊天机器人发送消息并获取其响应。它将用户的消息和机器人的响应添加到对话上下文中,因此每次对话后都会更新上下文。

  • 主循环中,它反复要求用户输入,将该输入发送到聊天机器人,并打印聊天机器人的响应。对话无限期地继续,直到程序被手动停止。

运行的结果是这样的:

You: hi
Bot: Hello! How can I assist you today?
You: What did I say in the previous sentence?
Bot: In the previous sentence, you said "hi".
You:

可以看到它知道上下文,可以一直对话下去。

注意:每一次API调用都是独立的,要让机器人理解上下文(context),那么每次API调用都需要将之前的聊天内容全部发过去。可以看到,当对话越来越长的时候,对token的消耗非常大,这是LLM的一个特点。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔试强训选择题】Day43.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&#xff…

PTA 甲级 1044 Shopping in Mars

题目链接 思路&#xff1a;前缀和滑动窗口 #include<bits/stdc.h> #define MAXN 100010 using namespace std; int a[MAXN];int main(){int n,m;cin>>n>>m;//n数量 m金额for(int i1;i<n;i){int t;cin>>t;a[i]a[i-1]t;//前缀和}vector<pair<in…

【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小-基础样例】

【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小】 1、前言2、实验环境3-1、问题说明-屏幕视频3-2、解决方式-个人总结解决思路&#xff1a;我们在软件启动的时候&#xff0c;先获取屏幕大小&#xff0c;然后根据长宽&#xff0c;按照一定比例&#xff0c;重新设置大小。并…

[ABC118D] Match Matching

题目传送门 引 题目的描述很形象&#xff0c;梦回童年&#xff0c;注意一下火柴全部都用完 解法 显然 DP , 设计状态&#xff1a; f i : 用完 i 根木棒凑出的最大数 f_i:用完i根木棒凑出的最大数 fi​:用完i根木棒凑出的最大数 状态转移&#xff1a; f i → f i c n t …

VMware17 不可恢复错误mks解决方案

用的虚拟机VMware17版本&#xff0c;然后运行带HDR的unity程序&#xff0c;结果报错 网上找了很多解决方案&#xff0c;都没用。毕竟需要在不放弃虚拟机3D加速的情况下运行。 最终皇天不负有心人&#xff0c;亲测有效的方法&#xff1a; 在虚拟机名字.vmx文件里添加以下2行&a…

vue子组件向父组件传参的方式

在Vue中&#xff0c;子组件向父组件传递参数可以通过自定义事件和props属性来实现。下面是一些关键代码示例&#xff1a; 1. 使用自定义事件&#xff1a; 在子组件中&#xff0c;通过 $emit 方法触发一个自定义事件&#xff0c;并传递参数。 <template><button cli…

URL 管理器

基本介绍 对外接口 对外提供两个接口&#xff1a;一个可以提取URL&#xff0c;一个可以增加URL&#xff0c;分别对应图上的1和2。 当要爬取某个网页时&#xff0c;则可以从1接口提取出该网页的URL进行爬取。 有时候爬取的网页内容中会包含别的网页链接&#xff0c;即包含有U…

Android 12 桌面去掉搜索框和 隐藏设置搜索框 隐藏应用页的搜索框

去掉桌面搜索框 --- a/packages/apps/Launcher3/src/com/android/launcher3/config/FeatureFlags.java +++ b/packages/apps/Launcher3/src/com/android/launcher3/config/FeatureFlags.java @@ -58,7 +58,7 @@ public final class FeatureFlags {* Enable moving the QSB on …

Qt 面试突击

1.在Qt中&#xff0c;多线程环境下&#xff0c;信号槽分别在什么样的线程中执行&#xff0c;如何控制&#xff1f; &#xff08;1&#xff09;信号槽的执行线程 如果信号和槽都在同一个线程&#xff0c;就它们就在这个线程中执行如果信号和槽不在同一个线程&#xff1a; Qt::…

网工内推 | 国企、上市公司,IA/IP认证即可,有年终、绩效

01 上海市机械设备成套&#xff08;集团&#xff09;有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、 负责公司电脑、网络设备、电器设备、办公设备等硬件的管理、维护和使用&#xff0c;做好计算机硬件及办公设备台帐&#xff1b; 2、 负责公司办公软件的…

回溯算法 解题思路

文章目录 算法介绍回溯算法能解决的问题解题模板1. 组合问题2. N皇后问题 算法介绍 回溯法&#xff08;Back Tracking Method&#xff09;&#xff08;探索与回溯法&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标…

zookeeper —— 分布式服务协调框架

zookeeper —— 分布式服务协调框架 一、Zookeeper概述1、Zookeeper的基本概念2、Zookeeper的特点3、Zookeeper的数据结构 二、Zookeeper的安装部署1、Zookeeper的下载2、Zookeeper的安装本地模式&#xff08;单机模式standalone&#xff09;安装部署分布式&#xff08;集群模式…

1978-2021年全国各省城镇与农村恩格尔系数数据

1978-2021年全国各省城镇与农村恩格尔系数数据 1、时间&#xff1a;1978-2021年 2、指标&#xff1a;城镇恩格尔系数、农村恩格尔系数 3、范围&#xff1a;31省市 4、来源&#xff1a;各省年鉴 5、用途&#xff1a;反应居民生活质量 6、指标解释&#xff1a; 恩格尔系数…

【SpringSecurity】三更草堂项目案例分析3 - 鉴权操作

目录 鉴权RBAC 模型前置准备redis 实现角色权限获取 鉴权 RBAC 模型 参考 CSDN 文章 RBAC&#xff08;Role-Based Access Control&#xff09;&#xff0c;基于角色的访问控制&#xff0c;现在主流的权限管理系统的权限设计都是 RBAC 模型 所谓的 RBAC 模型&#xff0c;可以理…

Java精品项目源码第61期垃圾分类科普平台(代号V061)

Java精品项目源码第61期垃圾分类科普平台(代号V061) 大家好&#xff0c;小辰今天给大家介绍一个垃圾分类科普平台&#xff0c;演示视频公众号&#xff08;小辰哥的Java&#xff09;对号查询观看即可 文章目录 Java精品项目源码第61期垃圾分类科普平台(代号V061)难度指数&…

【TCP】滑动窗口、流量控制 以及拥塞控制

滑动窗口、流量控制 以及拥塞控制 1. 滑动窗口&#xff08;效率机制&#xff09;2. 流量控制&#xff08;安全机制&#xff09;3. 拥塞控制&#xff08;安全机制&#xff09; 1. 滑动窗口&#xff08;效率机制&#xff09; TCP 使用 确认应答 策略&#xff0c;对每一个发送的数…

MySQL的常用术语

目录 1.关系 2.元组 3.属性 MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.关系 前面的博客有说到,MySQL是一款关系型数据库管理软件,一个关系就是 一张二维表(表) 我想大家都知道表格怎么…

【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)

目录 1 Pandas 可视化功能 2 Pandas绘图实例 2.1 绘制线图 2.2 绘制柱状图 2.3 绘制随机散点图 2.4 绘制饼图 2.5 绘制箱线图A 2.6 绘制箱线图B 2.7 绘制散点图矩阵 2.8 绘制面积图 2.9 绘制热力图 2.10 绘制核密度估计图 1 Pandas 可视化功能 pandas是一个强大的数…

Autojs 小游戏实践-神农百草园

概述 最近一直再写刷视频软件脚本&#xff0c;比如手机视频软件太多&#xff0c;每天都需要手动提现羊毛&#xff0c;太累&#xff0c;使用Autojs来帮助我提现&#xff0c;签到&#xff0c;扯远了&#xff0c;因为做刷视频脚本感觉有点无聊&#xff0c;所以试着做小游戏找图脚…

Openresty(二十二)ngx.balance和balance_by_lua终结篇

一 灰度发布铺垫 ① init_by_lua* init_by_lua init_by_lua_block 特点: 在openresty start、reload、restart时执行,属于master init 阶段机制&#xff1a; nginx master 主进程加载配置文件时&#xff0c;运行全局Lua VM级别上的参数指定的Lua代码场景&#xff1a; …