OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关

devtools/2025/2/6 7:07:48/
目标
  • 学习将 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 功能:

python">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
  • 示例请求体
  1. 文本摘要

    {"text": "人工智能正在迅速改变我们的生活方式和工作模式。越来越多的行业开始采用智能化方案。"
    }
    
  2. 文章生成

    {"topic": "人工智能的未来发展趋势"
    }
    
  3. 代码生成

    {"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"
}

使用Postman调用接口示例图


小结

本节通过实际示例讲解了如何使用 Flask 构建一个支持多功能的 API 网关,将 OpenAI 强大的生成能力接入到 Web 服务中。通过这些示例,开发者可以为不同业务场景快速创建交互式服务。


练习题

  1. 功能扩展
    • 添加新的路由 gpt-translate,实现中英文互译功能。
      示例提示语:将 "This is a test" 翻译为中文。
  2. 性能优化
    • 设置最大请求次数或缓存策略,以应对高并发请求。
  3. 异常处理
    • 为网络超时、API请求失败等情况添加详细的错误提示。

http://www.ppmy.cn/devtools/156478.html

相关文章

MATLAB中extractBefore函数用法

目录 语法 说明 示例 选择子字符串前的文本 使用模式提取文件名前的路径 选择位置前的子字符串 选择字符向量中位置前的文本 extractBefore函数的功能是提取指定位置前的子字符串。 语法 newStr extractBefore(str,pat) newStr extractBefore(str,pos) 说明 newStr…

C_位运算符及其在单片机寄存器的操作

C语言的位运算符用于直接操作二进制位,本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符(&) 功能:按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…

【SLAM】于ubuntu18.04上纯CPU运行GCNv2_SLAM的记录(ARM64/AMD64)

配置GCNv2_SLAM所需的环境并实现纯cpu运行项目的全过程记录。 本文首发于❄慕雪的寒舍 前排提醒:本文所述安装方式只在没有显卡的虚拟机上通过了测试,有显卡的主机涉及到CUDA等显卡依赖项版本问题,本文可能不适用! 1. 环境说明 …

强化学习在自动驾驶中的实现与挑战

强化学习在自动驾驶中的实现与挑战 自动驾驶技术作为当今人工智能领域的前沿之一,正通过各种方式改变我们的出行方式。而强化学习(Reinforcement Learning, RL),作为机器学习的一大分支,在自动驾驶的实现中扮演了至关重要的角色。它通过模仿人类驾驶员的决策过程,为车辆…

【加餐】使⽤指针实现链表

【加餐】使⽤指针实现链表 ​ 面向过程方式和面向对象方式(把面向过程的封装一下就行了)是两种不同的编程方法论

IDA Pro的基础指南

引言 在网络安全和软件分析领域,逆向工程是理解程序行为、挖掘漏洞或分析恶意软件的核心技能之一。而IDA Pro(Interactive Disassembler)作为逆向工程的“瑞士军刀”,是每位安全研究员和分析师的必备工具。本文将带你从零开始&…

C# Action和 Func的用法

C#中的数据类型 函数数据类型 Action 是一个数据类型 但是是没有返回值得函数数据类型 Func 用于指定一个有返回值的委托 internal class Program{static void Main(string[] args){TT.F1(NoVoid);TT.F2(Void1);Void2(() > { Console.WriteLine("Void2执行了");…

ImGui 学习笔记(二)—— 多视口

在计算机图形学中,视口(Viewport)是一个可观察的多边形区域。 将物体渲染至图像的过程中,会用两种区域表示。世界坐标窗口是用户所关注的区域(即用户想要可视化的东西),坐标系由应用程序确定。…