FastAPI + OpenAI 模型 的 GitHub 项目结构模板

FastAPI + OpenAI 模型 的 GitHub 项目结构模板,适合用作大模型(如 GPT-4) API 服务的基础框架。该模板包括了基本的项目结构、配置、文档以及与 OpenAI API 的交互方式。

项目结构

bash 复制代码
fastapi-openai-api/
├── app/
│   ├── __init__.py                # Python 包初始化文件
│   ├── main.py                    # FastAPI 主应用文件
│   ├── models.py                  # 数据模型(请求和响应)
│   ├── openai_service.py          # OpenAI 接口交互逻辑
│   ├── config.py                  # 配置文件(API 密钥等)
│   ├── schemas.py                 # 请求和响应的 Pydantic 模型
│   ├── utils.py                   # 辅助工具函数(如日志记录等)
│   └── requirements.txt           # Python 依赖列表
├── docker/
│   ├── Dockerfile                 # Docker 构建文件
│   └── docker-compose.yml         # Docker Compose 配置(如果需要)
├── tests/
│   ├── test_main.py               # FastAPI API 测试文件
│   └── test_openai_service.py     # OpenAI 服务单元测试文件
├── .gitignore                     # Git 忽略文件
├── README.md                      # 项目说明文档
└── requirements.txt               # 项目依赖(包含 FastAPI 和 OpenAI 库)

文件说明

1.app/main.py - FastAPI 应用入口
python 复制代码
from fastapi import FastAPI, HTTPException
from app.schemas import ChatRequest, ChatResponse
from app.openai_service import ask_openai

app = FastAPI(title="FastAPI + OpenAI API")

@app.post("/chat", response_model=ChatResponse)
async def chat(req: ChatRequest):
    try:
        answer = await ask_openai(req.question)
        return ChatResponse(answer=answer)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
2.app/schemas.py - 请求和响应的 Pydantic 模型
python 复制代码
from pydantic import BaseModel

class ChatRequest(BaseModel):
    question: str

class ChatResponse(BaseModel):
    answer: str
3.app/openai_service.py - 与 OpenAI API 的交互
python 复制代码
import openai
from app.config import OPENAI_API_KEY

openai.api_key = OPENAI_API_KEY

async def ask_openai(question: str) -> str:
    response = openai.Completion.create(
        model="gpt-4",  # 这里可以根据需要更换为不同的模型
        prompt=question,
        max_tokens=150
    )
    return response.choices[0].text.strip()
4.app/config.py - 配置文件
python 复制代码
import os

# 推荐使用环境变量来管理敏感信息
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "sk-xxxxxxxxxxxxxxxxxx")
5.app/requirements.txt - Python 依赖
python 复制代码
fastapi
uvicorn
openai
python-dotenv
6.tests/test_main.py - FastAPI API 测试
python 复制代码
from fastapi.testclient import TestClient
from app.main import app

client = TestClient(app)

def test_chat():
    response = client.post("/chat", json={"question": "What's the weather like?"})
    assert response.status_code == 200
    assert "answer" in response.json()
7.tests/test_openai_service.py - OpenAI 服务单元测试
python 复制代码
import pytest
from app.openai_service import ask_openai

@pytest.mark.asyncio
async def test_ask_openai():
    answer = await ask_openai("What is the capital of France?")
    assert answer == "Paris"  # 你可以根据 OpenAI 的回答调整预期结果

Docker 部署

1.docker/Dockerfile - Dockerfile
python 复制代码
# 使用官方 Python 镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 将本地代码复制到 Docker 容器中
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 启动 FastAPI 服务
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
2.docker/docker-compose.yml - Docker Compose 配置
yaml 复制代码
version: '3.8'

services:
  fastapi-openai:
    build: .
    ports:
      - "8000:8000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}  # 从环境变量中读取 API 密钥

运行项目

1.本地运行:
bash 复制代码
uvicorn app.main:app --reload
2.Docker 构建与运行:
bash 复制代码
docker-compose up --build

访问 http://127.0.0.1:8000/docs,你将看到自动生成的 Swagger UI,支持 API 调试。

相关推荐
Natsume17101 小时前
嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例
c语言·驱动开发·stm32·嵌入式硬件·mcu·架构·github
荔枝吻2 小时前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
幻凡ss2 小时前
github pages使用免费CDN加速-netlify
github·github pages·github cdn·github pages加速·netlify加速github·hexo博客免费cdn加速·个人博客免费cdn加速
我是哪吒5 小时前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
后端·面试·github
DeepSeek-大模型系统教程13 小时前
推荐 7 个本周 yyds 的 GitHub 项目。
人工智能·ai·语言模型·大模型·github·ai大模型·大模型学习
ai小鬼头16 小时前
AIStarter最新版怎么卸载AI项目?一键删除操作指南(附路径设置技巧)
前端·后端·github
扣脚大汉在网络20 小时前
github如何创建一个自己的仓库保姆级教程
github
不午睡的探索者1 天前
告别性能瓶颈!Python 量化工程师,进击 C++ 高性能量化交易的“必修课”!
c++·github
光溯星河1 天前
【实践手记】Git重写已提交代码历史信息
后端·github
独立开阀者_FwtCoder1 天前
URL地址末尾加不加 "/" 有什么区别
前端·javascript·github