Bootstrap

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.json
    user_text = data.get("text", "")

    if not user_text:
        return jsonify({"error": "未提供有效的输入文本"}), 400

    response = 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.json
    topic = data.get("topic", "")

    if not topic:
        return jsonify({"error": "未提供主题"}), 400

    prompt = 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.json
    task_description = data.get("task", "")

    if not task_description:
        return jsonify({"error": "未提供任务描述"}), 400

    prompt = 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请求失败等情况添加详细的错误提示。
;