当前位置: 首页 > news >正文

【Flask+OpenAI】利用Flask+OpenAI Key实现GPT4-智能AI对话接口demo - 从0到1手把手全教程(附源码)

文章目录

    • 前言
    • 环境准备
      • 安装必要的库
    • 生成OpenAI API
    • 代码实现详解
      • 导入必要的模块
      • 创建Flask应用实例
      • 配置OpenAI API
      • 完整代码如下(demo源码)
        • 代码解析
      • 利用Postman调用接口
    • 了解更多AI内容
    • 结尾

前言

Flask作为一个轻量级的Python Web框架,凭借其简洁易用的特点,成为构建Web应用的理想选择。本文将通过一个具体的项目实例,全面讲解如何利用Flask与OpenAI API构建一个智能AI对话接口,适用于各种应用场景。
在这里插入图片描述

环境准备

以下是本教程中所需的基本环境和依赖:

  • 操作系统:Windows、macOS或Linux均可
  • 编程语言:Python 3.7及以上版本
  • 开发工具:推荐使用VS Code、PyCharm等现代化IDE
  • 依赖库
    • Flask
    • Flask-CORS
    • openai

安装必要的库

在激活的虚拟环境中,安装项目所需的库:

pip install Flask 
pip install Flask-CORS 
pip install openai

生成OpenAI API

要使用OpenAI的GPT模型,首先需要获取API。

目前我了解到的OpenAI API KEY获取有两种方法。这个我们之前写过,有兴趣的可以看看:【OpenAI】获取OpenAI API Key的两种方式全攻略:从入门到精通,再到详解教程-CSDN

  • OpenAI官网生成API Key

  • CodeMoss生成API Key

代码实现详解

下面我们将逐步解析如何在app.py中实现智能对话接口。

导入必要的模块

首先,导入构建应用所需的库:

from flask import Flask, Response, request
from flask_cors import CORS
import openai
  • Flask:核心框架,用于创建Web应用
  • Flask-CORS:处理跨域资源共享,允许前端进行跨域请求
  • openai:OpenAI的官方Python库,用于与GPT模型进行交互

创建Flask应用实例

接下来,创建Flask应用实例,并配置跨域请求:

app = Flask(__name__)
CORS(app, resources=r'/*')  # 允许所有来源的请求
  • Flask(__name__):创建一个Flask应用实例,__name__用于资源路径的定位
  • CORS(app, resources=r'/*'):配置CORS,允许所有路径的跨域请求,确保前端应用能够正常访问API

配置OpenAI API

为了调用OpenAI API,建议使用环境变量来存储API KEY(目前为了演示demo所以我都放在一起了)

如果你是从OpenAI获取的API,那么只需要用下面的方式添加KEY就可以:

openai.api_key = os.getenv("OPENAI_API_KEY")

如果不是从OpenAI官方获取的,是从其他地方获取的,那么就需要注意baseURL的配置。因为不同的框架baseURL都是不一样。所以你要确认路径的拼接。

例如:
在python的源码里面,baseURL是自动拼接了v1

在这里插入图片描述

所以我们在拼接的时候,也要注意咱们的baseURL是否自带v1,完整拼接如下:

api_key="",  # 替换为你的api_key
base_url="https://api.aihao123.cn/luomacode-api/open-api/v1"  # 替换为你获取的base_url,注意这里后面拼接了1个v1

完整代码如下(demo源码)

from flask import Flask, Response, request  # 导入Flask框架的相关模块
from flask_cors import CORS  # 导入CORS模块以处理跨域请求
from openai import OpenAI  # 导入OpenAI的API客户端app = Flask(__name__)  # 创建Flask应用实例
CORS(app, resources=r'/*')  # 启用CORS,允许所有来源的请求@app.route('/', methods=['GET', 'POST'])  # 定义根路由,支持GET和POST请求
def run():# 从请求中获取 JSON 数据中的 'content' 字段gpt_content = request.form.get('content')# 创建OpenAI客户端实例,使用API密钥和基础URLclient = OpenAI(api_key="",  # 替换为你的API密钥base_url="https://api.aihao123.cn/luomacode-api/open-api/v1"  # 替换为你的base_url。注意:我这里是用CodeMoss生成的base_url,所以api_key也要用CodeMoss的)# 调用OpenAI的聊天补全接口,传入用户消息response = client.chat.completions.create(messages=[{'role': 'user', 'content': gpt_content},  # 用户发送的消息],model='gpt-3.5-turbo',  # 使用的模型stream=True  # 启用流式响应)# 定义生成器函数,用于逐块返回响应内容def generate():for chunk in response:  # 遍历响应中的每个块yield chunk.choices[0].delta.content  # 逐块返回内容# 返回一个流式响应,内容类型为 'text/event-stream'return Response(generate(), content_type='text/event-stream')# 主程序入口
if __name__ == '__main__':app.run(host='0.0.0.0', port=8080, debug=False, threaded=True)  # 启动Flask应用
代码解析
  1. 请求方法判断:根据请求的方法(GET或POST)执行不同的逻辑。
  2. 获取请求数据:对于POST请求,从JSON数据中提取content字段,作为用户输入的对话内容。
  3. 参数校验:确保用户提供了必要的content,否则返回400错误。

运行后我们会生成一个接口连接。默认情况下,运行后会是你的本地/局域网接口,你可以通过浏览器或Postman等工具进行测试。

在这里插入图片描述

利用Postman调用接口

在这里插入图片描述

教程到这里,就完整的结束了。快去试试吧!

了解更多AI内容

【OpenAI】(一)获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!!

【VScode】(二)VSCode中的智能AI-GPT编程利器,全面揭秘CodeMoss & ChatGPT中文版

【CodeMoss】(三)集成13个种AI模型(GPT4、o1等)、支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率! >>> - CodeMoss & ChatGPT-AI中文版

结尾

希望本文对您有所帮助,祝您在技术探索的道路上不断前行,取得更多成就!

相关文章:

【Flask+OpenAI】利用Flask+OpenAI Key实现GPT4-智能AI对话接口demo - 从0到1手把手全教程(附源码)

文章目录 前言环境准备安装必要的库 生成OpenAI API代码实现详解导入必要的模块创建Flask应用实例配置OpenAI API完整代码如下(demo源码)代码解析 利用Postman调用接口 了解更多AI内容结尾 前言 Flask作为一个轻量级的Python Web框架,凭借其…...

最短路----Dijkstra算法详解

简介 迪杰斯特拉(Dijkstra)算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻(Edsger Dijkstra)在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…...

ORB-SLAM3源码学习:G2oTypes.cc: void EdgeInertial::computeError 计算预积分残差

前言 这部分函数涉及了g2o的内容以及IMU相关的推导内容,需要你先去进行这部分的学习。 1.函数声明 void EdgeInertial::computeError() 2.函数定义 涉及到的IMU的公式: {// TODO Maybe Reintegrate inertial measurments when difference between …...

Unity协程机制详解

Unity的协程(Coroutine)是一种异步编程的机制,允许在多个帧之间分割代码的执行,而不阻塞主线程。与传统的多线程不同,Unity的协程在主线程中运行,并不会开启新的线程。 什么是协程? 协程是一种…...

2024年【高压电工】最新解析及高压电工考试总结

高压电工考试是电力行业从业人员必须通过的资格考试之一,它不仅检验了考生对高压电技术的掌握程度,还考验了考生在实际操作中的安全意识和应急处理能力。为了帮助广大考生更好地备考,本文整理了10道2024年高压电工考试的最新解析及总结试题&a…...

OELOVE 6.0城市列表模板

研究了好久OELOVE6.0源码,一直想将城市列表给单独整出来,做地区排名,但是PHP程序都是加密的,非常难搞,做二开都是要命的处理不了,在这里有一个简单方法可以处理城市列表,并且可以自定义TDK&…...

如何将你的 Ruby 应用程序从 OpenSearch 迁移到 Elasticsearch

作者:来自 Elastic Fernando Briano 将 Ruby 代码库从 OpenSearch 客户端迁移到 Elasticsearch 客户端的指南。 OpenSearch Ruby 客户端是从 7.x 版 Elasticsearch Ruby 客户端分叉而来的,因此代码库相对相似。这意味着当将 Ruby 代码库从 OpenSearch 迁…...

day1数据结构,关键字,内存空间存储与动态分区,释放

小练习 在堆区空间连续申请5个int类型大小空间,用来存放从终端输入的5个学生成绩,然后显示5个学生成绩,再将学生成绩升序排序,排序后,再次显示学生成绩。显示和排序分别用函数完成(两种排序方法&#xff0…...

1_linux系统网络性能如何优化——几种开源网络协议栈比较

之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论,没有实操,让“程序猿”很难受,操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码,然…...

【问题记录】07 MAC电脑,使用FileZilla(SFTP)连接堡垒机不成功

项目场景: 使用MAC电脑,以子账号(非root)的形式登录,连接堡垒机CLB(传统型负载均衡),使用FileZilla(SFTP)进行FTP文件传输。 问题描述: MAC电脑…...

前端报错npm ERR cb() never called问题

环境使用node版本v14.21.3&#xff0c;npm版本6.14.18 1.问题描述 1.1使用npm install后报错 npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! ? ? <https://npm.community>npm ERR! A complete log…...

康谋方案 | 多源相机数据采集与算法集成测试方案

目录 一、相机组成 二、多源相机采集与测试方案 三、应用案例分享 四、结语 在智能化技术快速发展当下&#xff0c;图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进…...

Graspness 端到端抓取点估计 | 环境搭建 | 模型推理测试

在复杂场景中实现抓取检测&#xff0c;Graspness是一种端到端的方法&#xff1b; 输入点云数据&#xff0c;输出抓取角度、抓取深度、夹具宽度等信息。 开源地址&#xff1a;https://github.com/rhett-chen/graspness_implementation?tabreadme-ov-file 论文地址&#xff1…...

交换机是如何避免数据碰撞的(详细解释 + 示例)

交换机是如何避免数据碰撞的&#xff08;详细解释 示例&#xff09; 1. 独立冲突域 交换机的每个端口都形成一个独立的冲突域。这意味着通过交换机连接的每个设备都拥有自己的通信通道&#xff0c;互不干扰。 示例&#xff1a; 假设一个交换机有4个端口&#xff0c;分别连接…...

魅族手机刷官方系统

从魅族官网下载固件 https://flyme.cn/firmware.html 找到自己的型号&#xff0c;里面有历史版本、最新版&#xff0c;按照需求下载。 下载的是update.zip&#xff0c;改名就不能升级了 方法1 直接点击下载的update.zip包就可以升级。 方法2 将文件移动到文件管理的根目录&a…...

女人想要的,是那份懂她的情绪价值

女人想要的&#xff0c;是那份懂她的情绪价值 在情感的世界里&#xff0c;我们常常听到这样的声音&#xff1a;“我不需要你帮我解决问题&#xff0c;我只希望你能懂我。”这句话&#xff0c;简单却深刻&#xff0c;它揭示了女性在情感需求上的一个独特面向——她们渴望的&…...

[python SQLAlchemy数据库操作入门]-10.性能优化:提升 SQLAlchemy 在股票数据处理中的速度

哈喽,大家好,我是木头左! 当处理大量数据时,如股票数据,默认的ORM操作可能会显得效率低下。本文将探讨如何通过一些技巧和策略来优化SQLAlchemy ORM的性能,从而提升其在股票数据处理中的速度。 1. 选择合适的数据类型 在定义模型时,选择合适的数据类型对于性能至关重要…...

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析 在裸聊敲诈、虚假理财诈骗案件类型中&#xff0c;犯罪分子为了能实现更低成本、更快部署应用的目的&#xff0c;其服务器架构多为常见的初始化网站架构&#xff0c;也称为站库同体服务器&#xff01;也就是说网站应用…...

[python]使用 Pandas 处理 Excel 数据:分割与展开列操作

在数据处理的过程中&#xff0c;时常需要对 Excel 表格中的数据进行清洗与转换&#xff0c;下面介绍使用 Python 中的 Pandas 库对 Excel 文件中的数据进行操作&#xff0c;具体包括分割列、展开数据、清除空格以及格式转换等操作。 目标&#xff1a; 读取一个没有表头的 Exc…...

单片机的选择因素

在选择单片机型号时&#xff0c;需要根据具体的应用需求来选择合适的单片机。单片机&#xff08;Microcontroller Unit, MCU&#xff09;是一种将计算机的主要部分集成在一个芯片上的微型计算机&#xff0c;它通常包括处理器、存储器、输入/输出接口等。随着技术的发展&#xf…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...