【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.mzph.cn/news/889645.shtml

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

相关文章

SpringBoot【十三(实战篇)】集成在线接口文档Swagger2

一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 二、如何生成Swagger文档 上一期我们已经能正常访问swagger在线文档,但是文档空空如也,对不对,接下来我就教大家怎么把相关的接口都给…

Qt之自定义动态调控是否显示日志

创作灵感 最近在芯驰x9hp上开发仪表应用。由于需要仪表警告音,所以在该平台上折腾并且调试仪表声音的时候,无意间发现使用: export QT_DEBUG_PLUGINS1 可以打印更详细的调试信息。于是想着自己开发的应用也可以这样搞,这样更方便…

Linux网络 UDP socket

背景知识 我们知道, IP 地址用来标识互联网中唯一的一台主机, port 用来标识该主机上唯一的一个网络进程,IPPort 就能表示互联网中唯一的一个进程。所以通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp&…

数据链路层(Java)(MAC与IP的区别)

以太网协议: "以太⽹" 不是⼀种具体的⽹络, ⽽是⼀种技术标准; 既包含了数据链路层的内容, 也包含了⼀些物理 层的内容. 例如: 规定了⽹络拓扑结构, 访问控制⽅式, 传输速率等; 例如以太⽹中的⽹线必须使⽤双绞线; 传输速率有10M, 100M, 1000M等; 以太…

Apache APISIX快速入门

本文将介绍Apache APISIX,这是一个开源API网关,可以处理速率限制选项,并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…

项目15:简易扫雷--- 《跟着小王学Python·新手》

项目15:简易扫雷 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的…

HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用

拿走请吱一声&#xff0c;点个关注吧&#xff0c;代码如下&#xff0c;网页有移动端适配 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

Python的3D可视化库【vedo】2-1 (plotter模块) 绘制器的使用

文章目录 1 相关用语及其关系2 Plotter类的基本使用3 Plotter类具体的初始化设置3.1 全部初始化参数3.2 使用不同的axes vedo是Python实现的一个用于辅助科学研究的3D可视化库。 vedo的plotter模块封装了绘制器类Plotter。 Plotter实例可以用于显示3D图形对象、控制渲染器行为、…

职业院校人工智能实验室解决方案

随着人工智能技术的迅猛发展&#xff0c;企事业单位对具备高素质技术应用能力的人才需求愈发迫切&#xff0c;目前人工智能已经逐步从感知理解阶段转变为生成创造阶段&#xff0c;可以为各行各业提供多维的智能化应用服务。2024年的《政府工作报告》中首次提出了“人工智能”行…

steel-browser - 专为AI应用构建的开源浏览器自动化 API

Steel是一个开源浏览器 API&#xff0c;可以轻松构建与 Web 交互的 AI 应用程序和代理。您无需从头开始构建自动化基础设施&#xff0c;而是可以专注于 AI 应用程序&#xff0c;而 Steel 会处理复杂性。 2300 Stars 99 Forks 4 Issues 5 贡献者 Apache-2.0 License TypeScript …

ElasticSearch - 使用 Composite Aggregation 实现桶的分页查询

文章目录 官方文档概述Composite Aggregation 概述示例&#xff1a;基本分页查询分页&#xff1a;获取下一页结果使用场景注意事项 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html#_pagin…

基于Python+Sqlite3实现的搜索和推荐系统

基于Python实现的搜索和推荐系统 一、引言 伴随着科技的不断进步&#xff0c;互联网&#xff0c;万维网的不断发展。我们越来越热爱万维网&#xff0c;也欣赏他的发展方式。20世纪90年代初&#xff0c;万维网还只是一个将文档联系起来的简单网络。如今&#xff0c;他已经成为…

Oracle:VARCHAR2(100)与VARCHAR2(100 CHAR)的差异导致的报错

目录 >> 问题背景&#xff1a;>> 阴差阳错&#xff1a;>> 问题出现&#xff1a;>> 问题排查&#xff1a;>> 知识点&#xff1a;>> 问题复盘&#xff1a;>> 问题拓展&#xff1a; >> 问题背景&#xff1a; Oracle下&#xff1…

右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统

一、项目名称 山西右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统 二、项目背景&#xff1a; 山西右玉光伏发电项目位于右玉县境内&#xff0c;总装机容量为200MW&#xff0c;即太阳能电池阵列共由200个1MW多晶硅电池阵列子方阵组成&#xff0c;每个子方阵包含太阳能…

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

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

从零开始学docker(五)-可用的docker镜像

最近docker镜像都不能访问&#xff0c;目前亲测可用的docker镜像可用&#xff0c;并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表&#xff0c;只能手动查询索引目录&#xff08;解决方案在最后&#xff09;。 linux服务器vim打开镜像文件daemon.json vim /e…

安卓获取所有可用摄像头并指定预览

在Android设备中&#xff0c;做预览拍照的需求的时候&#xff0c;我们会指定 CameraSelector DEFAULT_FRONT_CAMERA前置 或者后置CameraSelector DEFAULT_BACK_CAMERA 如果你使用的是平板或者工业平板&#xff0c;那么就会遇到多摄像头以及外置摄像头问题&#xff0c;简单的指…

【报错记录】Ubuntu22.04解决开机卡在 /dev/sda5 : clean , *files , *blocks

一个愿意伫立在巨人肩膀上的农民...... 一、错误现象 本人的电脑安装Windows10和Ubuntu22.04双系统&#xff0c;一次训练中电脑死机无法开机&#xff0c;重启之后便出现如下错误&#xff0c;在网上寻找过很多方法均无效&#xff0c;在root下禁用了samba服务&#xff0c;也无济…

利用代理IP爬取Zillow房产数据用于数据分析

引言 最近数据分析的热度在编程社区不断攀升&#xff0c;有很多小伙伴都开始学习或从事数据采集相关的工作。然而&#xff0c;网站数据已经成为网站的核心资产&#xff0c;许多网站都会设置一系列很复杂的防范措施&#xff0c;阻止外部人员随意采集其数据。为了解决这个问题&a…

Kafka系列教程 - Kafka 生产者 -2

1. 生产者简介 不管是把 Kafka 作为消息队列系统、还是数据存储平台&#xff0c;总是需要一个可以向 Kafka 写入数据的生产者和一个可以从 Kafka 读取数据的消费者&#xff0c;或者是一个兼具两种角色的应用程序。 使用 Kafka 的场景很多&#xff0c;诉求也各有不同&#xff…