OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关
目标
- 学习将 OpenAI 接入 Web 应用,构建交互式 API 网关
- 理解 Flask 框架的基本用法
- 实现 GPT 模型的 API 集成并返回结果
内容与实操
一、环境准备
-
安装必要依赖:
打开终端或命令行,执行以下命令安装 Flask 和 OpenAI SDK:pip install flask openai
-
获取 OpenAI API 密钥:
登录 OpenAI 平台 创建 API 密钥。
二、创建基础 Flask 项目
1. 创建项目结构
├── app.py # Flask 入口文件
├── requirements.txt # 项目依赖
└── README.md # 项目说明文档
2. 编写基础 Flask 代码
在 app.py
中编写以下代码,支持不同类型的 API 功能:
from flask import Flask, request, jsonify
import openai# 初始化 Flask 应用
app = Flask(__name__)# 设置 OpenAI API 密钥
openai.api_key = "your-api-key"# 定义 API 路由:生成摘要
@app.route("/gpt-summary", methods=["POST"])
def generate_summary():data = request.jsonuser_text = data.get("text", "")if not user_text:return jsonify({"error": "未提供有效的输入文本"}), 400response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": f"请对以下文本生成摘要:{user_text}"}],max_tokens=150)summary = response["choices"][0]["message"]["content"]return jsonify({"summary": summary})# 定义 API 路由:自动写作
@app.route("/gpt-writing", methods=["POST"])
def generate_text():data = request.jsontopic = data.get("topic", "")if not topic:return jsonify({"error": "未提供主题"}), 400prompt = f"写一篇关于{topic}的中文文章。"response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": prompt}],max_tokens=300)generated_text = response["choices"][0]["message"]["content"]return jsonify({"generated_text": generated_text})# 定义 API 路由:代码生成
@app.route("/gpt-code", methods=["POST"])
def generate_code():data = request.jsontask_description = data.get("task", "")if not task_description:return jsonify({"error": "未提供任务描述"}), 400prompt = f"编写一个 Python 函数来完成以下任务:{task_description}"response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": prompt}],max_tokens=150)generated_code = response["choices"][0]["message"]["content"]return jsonify({"generated_code": generated_code})if __name__ == "__main__":app.run(port=5000)
3. 代码说明
gpt-summary
: 接收用户文本,生成摘要。gpt-writing
: 根据给定主题自动生成中文文章内容。gpt-code
: 根据描述生成 Python 代码片段。
三、运行与测试
1. 启动 Flask 服务
python app.py
启动成功后,终端输出:
* Running on http://127.0.0.1:5000
2. 使用 Postman 测试
- 请求方法:
POST
- 请求 URL:
http://127.0.0.1:5000/gpt-summary
http://127.0.0.1:5000/gpt-writing
http://127.0.0.1:5000/gpt-code
- 示例请求体
-
文本摘要
{"text": "人工智能正在迅速改变我们的生活方式和工作模式。越来越多的行业开始采用智能化方案。" }
-
文章生成
{"topic": "人工智能的未来发展趋势" }
-
代码生成
{"task": "读取一个文件,统计包含关键字 '错误' 的行数" }
3. 使用 curl
测试
curl -X POST http://127.0.0.1:5000/gpt-summary \
-H "Content-Type: application/json" \
-d '{"text": "人工智能技术正在重新定义行业标准。"}'
4. 预期输出
文本摘要
{"summary": "人工智能技术正在改变行业标准。"
}
文章生成
{"generated_text": "人工智能(AI)在过去几年中取得了飞速发展,未来其应用场景将更加广泛……"
}
代码生成
{"generated_code": "def count_error_lines(file_path):\n count = 0\n with open(file_path, 'r') as file:\n for line in file:\n if '错误' in line:\n count += 1\n return count"
}
小结
本节通过实际示例讲解了如何使用 Flask 构建一个支持多功能的 API 网关,将 OpenAI 强大的生成能力接入到 Web 服务中。通过这些示例,开发者可以为不同业务场景快速创建交互式服务。
练习题
- 功能扩展
- 添加新的路由
gpt-translate
,实现中英文互译功能。
示例提示语:将 "This is a test" 翻译为中文。
- 添加新的路由
- 性能优化
- 设置最大请求次数或缓存策略,以应对高并发请求。
- 异常处理
- 为网络超时、API请求失败等情况添加详细的错误提示。
相关文章:

OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关
目标 学习将 OpenAI 接入 Web 应用,构建交互式 API 网关理解 Flask 框架的基本用法实现 GPT 模型的 API 集成并返回结果 内容与实操 一、环境准备 安装必要依赖: 打开终端或命令行,执行以下命令安装 Flask 和 OpenAI SDK: pip i…...

python的pre-commit库的使用
在软件开发过程中,保持代码的一致性和高质量是非常重要的。pre-commit 是一个强大的工具,它可以帮助我们在提交代码到版本控制系统(如 Git)之前自动运行一系列的代码检查和格式化操作。通过这种方式,我们可以确保每次提…...

架构技能(四):需求分析
需求分析,即分析需求,分析软件用户需要解决的问题。 需求分析的下一环节是软件的整体架构设计,需求是输入,架构是输出,需求决定了架构。 决定架构的是软件的所有需求吗?肯定不是,真正决定架构…...

Linux环境下的Java项目部署技巧:安装 Nginx
Nginx 的简介: Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP / POP3 / SMTP 代理服务器。它可以作为网站静态资源的 web 服务器,也可以作为其他应用服务器的反向代理服务器。同时, Nginx 还具有负载均衡的功能。 N…...
前端 Vue 性能提升策略
一、引言 前端性能优化是确保 Web 应用快速响应和流畅用户体验的关键。对于使用 Vue.js 构建的应用,性能优化不仅涉及通用的前端技术,还包括针对 Vue 特性的特定优化措施。本文将从多个方面探讨如何全面提升前端和 Vue 应用的性能。 二、前端性能优化基础 1. 减少初始加载…...

深入理解linux中的文件(上)
1.前置知识: (1)文章 内容 属性 (2)访问文件之前,都必须打开它(打开文件,等价于把文件加载到内存中) 如果不打开文件,文件就在磁盘中 (3&am…...

Unity特效插件GodFX
2022Unity安装使用方法,将MinDrawer.cs文件MinAttribute改成UnityEngine.PostProcessing.MinAttribute 参考链接: Unity3D特效插件GodFX使用教程_哔哩哔哩_bilibili...
从 C 到 C++:理解结构体中字符串的存储与操作
对于刚入门 C/C 的程序员来说,字符串的存储和操作可能是个容易混淆的知识点。在 C 中,std::string 提供了非常友好的接口,我们可以轻松地在结构体中使用字符串类型,无需关注底层细节。然而,在 C 语言中,字符…...

Linux进阶——时间服务器
NTP是网络时间协议(network time protocol)的简称(应用层的协议),通过UDP123端口进行网络时钟同步。 Chrony是一个开源自由的网络时间协议NTP的客户端和服务器软件。它能让计算机保持系统时钟与时钟服务器(…...
力扣 295. 数据流的中位数
🔗 https://leetcode.cn/problems/find-median-from-data-stream/ 题目 数据流中不断有数添加进来,add 表示添加数据,find 返回数据流中的中位数 思路 大根堆存储数据流中偏小的数据小根堆存储数据流中偏大的数据若当前的 num 比大根堆的…...

【Linux】进程状态和优先级
个人主页~ 进程状态和优先级 一、进程状态1、操作系统进程状态(一)运行态(二)阻塞态(三)挂起态 2、Linux进程状态(一)R-运行状态并发执行 (二)S-浅度睡眠状态…...

携程Java开发面试题及参考答案 (200道-上)
说说四层模型、七层模型。 七层模型(OSI 参考模型) 七层模型,即 OSI(Open System Interconnection)参考模型,是一种概念模型,用于描述网络通信的架构。它将计算机网络从下到上分为七层,各层的功能和作用如下: 物理层:物理层是计算机网络的最底层,主要负责传输比特流…...

Docker 部署教程jenkins
Docker 部署 jenkins 教程 Jenkins 官方网站 Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI)和持续交付(CD)过程。它帮助开发人员自动化构建、测试和部署应用程序,显著提高软件开发的效率和质量…...

深入理解开放寻址法中的三种探测序列
一、引言 开放寻址法是解决散列表中冲突的一种重要方法,当发生冲突(即两个不同的键通过散列函数计算得到相同的散列值)时,它会在散列表中寻找下一个可用的存储位置。而探测序列就是用于确定在发生冲突后,依次尝试哪些…...
图像噪声处理技术:让图像更清晰的艺术
在这个数字化时代,图像作为信息传递的重要载体,其质量直接影响着我们的视觉体验和信息解读。然而,在图像采集、传输或处理过程中,难免会遇到各种噪声干扰,如高斯噪声、椒盐噪声等,这些噪声会降低图像的清晰…...

linux运行级别
运行级别:指linux系统在启动和运行过程中所处的不同的状态。 运行级别之间的切换:init (级别数) 示例: linux的运行级别一共有7种,分别是: 运行级别0:停机状态 运行级别1:单用户模式/救援模式…...
深入剖析Electron的原理
Electron是一个强大的跨平台桌面应用开发框架,它允许开发者使用HTML、CSS和JavaScript来构建各种桌面应用程序。了解Electron的原理对于开发者至关重要,这样在设计应用时能更合理,遇到问题也能更准确地分析和解决。下面将从多个方面深入剖析E…...

C++ 游戏开发:完整指南
目录 什么是游戏开发? 为什么选择 C 进行游戏开发? C 游戏开发:完整指南 1. 理解游戏开发的基础 2. 学习游戏引擎 3. 精通 C 进行游戏开发 4. 学习数学在游戏开发中的应用 5. 探索图形编程 6. 专注于游戏开发的某一领域 7. 通过游戏项目进行实…...
WebForms SortedList 深度解析
WebForms SortedList 深度解析 引言 在Web开发领域,对于数据结构的理解与应用至关重要。其中,SortedList类在WebForms中是一个常用的数据结构,它能够帮助开发者高效地管理有序数据集合。本文将深入解析SortedList类在WebForms中的应用,包括其基本概念、常用方法、性能特点…...

【hot100】刷题记录(12)-回文链表
题目描述: 给你一个单链表的头节点 head ,请你判断该链表是否为 回文链表 。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2: …...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...