当前位置: 首页 > 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中文版

结尾

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

http://www.lryc.cn/news/503958.html

相关文章:

  • 最短路----Dijkstra算法详解
  • ORB-SLAM3源码学习:G2oTypes.cc: void EdgeInertial::computeError 计算预积分残差
  • Unity协程机制详解
  • 2024年【高压电工】最新解析及高压电工考试总结
  • OELOVE 6.0城市列表模板
  • 如何将你的 Ruby 应用程序从 OpenSearch 迁移到 Elasticsearch
  • day1数据结构,关键字,内存空间存储与动态分区,释放
  • 1_linux系统网络性能如何优化——几种开源网络协议栈比较
  • 【问题记录】07 MAC电脑,使用FileZilla(SFTP)连接堡垒机不成功
  • 前端报错npm ERR cb() never called问题
  • 康谋方案 | 多源相机数据采集与算法集成测试方案
  • Graspness 端到端抓取点估计 | 环境搭建 | 模型推理测试
  • 交换机是如何避免数据碰撞的(详细解释 + 示例)
  • 魅族手机刷官方系统
  • 女人想要的,是那份懂她的情绪价值
  • [python SQLAlchemy数据库操作入门]-10.性能优化:提升 SQLAlchemy 在股票数据处理中的速度
  • 【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析
  • [python]使用 Pandas 处理 Excel 数据:分割与展开列操作
  • 单片机的选择因素
  • 软件测试兼容性测试丨分布式测试与多设备管理
  • Linux驱动开发(13):输入子系统–按键输入实验
  • 微服务篇-微服务保护:使用 Sentinel 来实现请求限流、线程隔离、服务熔断和 Fallback 备用方案的使用
  • vscode 排除文件夹搜索
  • 设计模式学习之——装饰者模式
  • 【Vulkan入门】10-CreatePipeline
  • C++11 (一)
  • 系统性能优化
  • IMX6ULL开发板挂载 Ubuntu 的 NFS 目录,并以交叉编译得到的hello程序进行测试
  • Xcode模拟器运行报错:The request was denied by service delegate
  • ubuntu18.04配置实时内核