【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中文版

结尾

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

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

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

相关文章

挚达科技亏损暴增无底洞:毛利率下滑,产品销量增长但单价下降

《港湾商业观察》廖紫雯 日前,上海挚达科技发展股份有限公司(以下简称:挚达科技)再次递表港交所,最新财务数据显示,2024年前九个月,公司营收较上年同期出现下滑,且往绩期间&#xf…

每天五分钟深度学习pytorch:基于LeNet算法模型完成手写字体识别

本文重点 LeNet是我们要介绍的第一个经典的卷积神经网络模型,它是一种用于手写体字符识别的非常高效的卷积神经网络。它是卷积神经网络的祖师爷LeCun在1998年提出,它将CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。 它的算法模型的效果图为: 本文我们讲解基于…

全栈开发:后台管理系统时代的技术破局之道

在当前的互联网发展阶段,许多二三线城市的互联网项目正在经历一个显著的转变。传统的To C项目逐渐减少,取而代之的是大量的企业级后台管理系统。在这样的背景下,全栈开发——特别是前端加Java的组合,正在成为一个备受关注的发展方…

AI Agent:重塑业务流程自动化的未来力量(2/30)

《AI Agent:重塑业务流程自动化的未来力量》 摘要:整体思路是先介绍 AI Agent 的基本情况,再深入阐述其实现业务流程自动化的方法和在不同领域的应用,接着分析其价值和面临的挑战,最后得出结论,为读者全面…

网页端web内容批注插件:

感觉平时每天基本上90%左右的时间都在浏览器端度过,按理说很多资料都应该在web端输入并且输出,但是却有很多时间浪费到了各种桌面app中,比如说什么notion、语雀以及各种笔记软件中,以及导入到ipad的gn中,这些其实都是浪…

vue2实现多段打字机效果

实现效果 多段打字,每段之间延迟一点时间,末尾有光标 页面结构 所有的“打字”的效果都在typedText里面展现,打印完了就把这一段加入displayedParagraphs中,同时清空typedText。 displayedParagraphs就是正常v-for渲染 数据结…

力扣打卡14:多数元素

链接:169. 多数元素 - 力扣(LeetCode) 这道题正常很简单,但是如果想要完成进阶做法有点困难。我使用了O(n/2)左右的空间,使用了哈希映映射。 看了题解,有一种解法叫摩尔投票,可以解决这种问题…

SQL server学习03-创建和管理数据表

目录 一,SQL server的数据类型 1,基本数据类型 2,自定义数据类型 二,使用T-SQL创建表 1,数据完整性的分类 2,约束的类型 3,创建表时创建约束 4,任务 5,由任务编写…

【网络攻击与防范】常见服务的配置方法

一、DHCP 服务的安装与配置 1、安装 2、验证安装 3、启动、停止和重新启动 4、配置作用域 Scope 检验配置:netsh 5、DHCP服务器选项 6、利用 kali 客户端来进行验证 将 kali 的网卡也设置在 VMnet2 中: 二、DNS服务的安装与配置 1、安装 2、验证安装 …

移动端h5自适应rem适配最佳方案

网页开发中,我们常用的单位有如下几个: px:像素固定,无法适配各分辨率的移动设备em: 该单位受父容器影响,大小为父元素的倍数rem: 因为html根元素大小为16px,所以默认 1rem 16px,rem只受根元素…

ubuntu20.04复现 Leg-KILO

这里写目录标题 opencv版本问题下载3.2.0源代码进入解压后的目录创建构建目录运行 CMake 配置 配置时指定一个独立的安装目录,例如 /opt/opencv-3.2:出错: 使用多线程编译错误1: stdlib.h: 没有那个文件或目录错误2:er…

Python爬虫之Selenium的应用

【1】Selenium基础介绍 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 (2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 (3)支持通过各种driv…

回归预测 | MATLAB实现BiGRU(双向门控循环单元)多输入单输出

回归预测 | MATLAB实现BiGRU(双向门控循环单元)多输入单输出 文章目录 回归预测 | MATLAB实现BiGRU(双向门控循环单元)多输入单输出预测效果基本介绍程序设计参考资料致谢预测效果 基本介绍 BiGRU(双向门控循环单元)多输入单输出模型是一种结合了双向门控循环单元(BiGRU)的…

React的状态管理库-Redux

核心思想:单一数据源、状态是只读的、以及使用纯函数更新状态。 组成部分 Store(存储) 应用的唯一状态容器,存储整个应用的状态树,使用 createStore() 创建。 getState():获取当前状态。dispatch(action)&#xff…

.NET平台使用C#设置Excel单元格数值格式

设置Excel单元格的数字格式是创建、修改和格式化Excel文档的关键步骤之一,它不仅确保了数据的正确表示,还能够增强数据的可读性和专业性。正确的数字格式可以帮助用户更直观地理解数值的意义,减少误解,并且对于自动化报告生成、财…

【Maven】生命周期和插件详解

Maven生命周期 Maven 将项目的生命周期抽象成了 3 套生命周期,每套生命周期又包含多个阶段(phase)。每套中具体包含哪些阶段是 Maven 已经约定好的,但是每个阶段具体需要做什么,是用户可以自己指定的。 Maven 中定义…

数据保护策略:如何保障重要信息的安全

一、什么是数据安全? 数据安全是保护数字信息免遭盗窃、未经授权的访问和恶意修改的过程。这是一个持续的过程,负责监督信息的收集、存储和传输。 机密性:保护数据免遭未授权方访问。 完整性:保护数据免遭未经授权的修改、损坏…

Linux:进程(环境变量、程序地址空间)

目录 冯诺依曼体系结构 操作系统 设计操作系统的目的 操作系统的管理 进程 PCB fork 进程状态 进程状态查看 僵尸进程 孤儿进程 进程优先级 查看、修改进程优先级命令 竞争、独立、并行、并发 进程切换 活动队列和运行队列 活动队列 过期队列 active指针…

ansible自动化运维(一)简介及清单,模块

相关文章ansible自动化运维(二)playbook模式详解-CSDN博客ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客ansible自动化运维(四)运维实战-CSDN博客 ansible自动化运维工具 1.什么是自…

DuckDB快速入门教程

DuckDB是一个用c编写的进程内OLAP DBMS,太复杂了。我们从简单的开始,好吗?DuckDB是用于分析的SQLite。它没有依赖关系,非常容易设置,并且经过优化可以对数据执行查询。本文将介绍什么是DuckDB,如何使用它&a…