1. 内容讲解
在上一章中,我们完成了项目的整体规划和架构设计。现在,我们将把蓝图付诸实践,从零开始搭建项目的基础设施。本章的目标是:
- 创建并组织项目的文件结构。
- 安装所有必要的依赖库。
- 配置 FastAPI 应用,并实现基础的文件上传和状态管理功能。
1.1 项目初始化与文件结构创建
根据我们在第九章中规划的目录结构,我们首先需要创建对应的文件夹和空的 Python 文件。你可以手动创建,也可以使用命令行。
目录结构:
/course-project # 项目根目录
|-- /app
| |-- /api
| | |-- /v1
| | | |-- /endpoints
| | | | |-- __init__.py
| | | | |-- research.py # 新建:专门处理研究任务的路由
| | | |-- /models
| | | | |-- __init__.py
| | | | |-- research.py # 新建:专门存放研究任务相关的模型
| | | |-- __init__.py
| | |-- __init__.py
| |-- /core
| | |-- __init__.py
| | |-- config.py
| |-- /services
| | |-- __init__.py
| | |-- research_service.py # 新建:核心的研究服务
| |-- /tools
| | |-- __init__.py
| | |-- search.py
| | |-- rag_tool.py
| |-- /utils
| | |-- __init__.py
| | |-- file_handler.py
| |-- __init__.py
| |-- main.py
|-- /storage
|-- /uploaded_files
|-- .env
|-- requirements.txt
注意:我们对之前的规划做了一些微调,将路由和模型文件按功能(research)进行了划分,这样当未来项目功能扩展时(例如增加用户管理),结构会更清晰。
1.2 依赖安装
我们将所有需要的库都列在 requirements.txt 文件中。这个文件是项目的“依赖清单”。
requirements.txt
fastapi
uvicorn[standard]
python-dotenv
openai
# AutoGen
pyautogen
# LlamaIndex
llama-index
# LangChain & Tools
langchain
langchain-community
langchain-openai
google-search-results
# PDF processing for LlamaIndex
pypdf
创建好文件后,在你的虚拟环境中执行以下命令来安装所有依赖:
pip install -r requirements.txt
1.3 核心服务搭建:FastAPI 与文件处理
现在,我们开始编写项目的骨架代码。
1.3.1 配置文件 (app/core/config.py)
这个文件负责从 .env 文件中加载敏感信息和配置。
.env (在项目根目录创建)
OPENAI_API_KEY="your_openai_api_key"
OPENAI_API_BASE="your_openai_api_base_url" # (可选) 如果你使用代理
SERPAPI_API_KEY="your_serpapi_api_key"
app/core/config.py
from pydantic_settings import BaseSettings
from dotenv import load_dotenv
import os
load_dotenv()
class Settings(BaseSettings):
OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "")
OPENAI_API_BASE: str = os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1")
SERPAPI_API_KEY: str = os.getenv("SERPAPI_API_KEY", "")
# 项目路径配置
BASE_DIR: str = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
STORAGE_DIR: str = os.path.join(BASE_DIR, "storage")
UPLOAD_DIR: str = os.path.join(BASE_DIR, "uploaded_files")
settings = Settings()
1.3.2 文件处理工具 (app/utils/file_handler.py)
这个模块封装了所有与文件系统交互的操作,如保存上传的文件、为每次研究任务创建独立的文件夹等。
app/utils/file_handler.py
import os
import shutil
import uuid
from fastapi import UploadFile
from typing import List
from app.core.config import settings
class FileHandler:
def __init__(self, research_id: str):
self.research_id = research_id
self.upload_path = os.path.join(settings.UPLOAD_DIR, self.research_id)
self.storage_path = os.path.join(settings.STORAGE_DIR, self.research_id)
self._create_directories()
def _create_directories(self):
os.makedirs(self.upload_path, exist_ok=True)
os.makedirs(self.storage_path, exist_ok=True)
async def save_files(self, files: List[UploadFile]) -> List[str]:
saved_paths = []
for file in files:
file_path = os.path.join(self.upload_path, file.filename)
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
saved_paths.append(file_path)
return saved_paths
def get_upload_path(self) -> str:
return self.upload_path
def get_storage_path(self) -> str:
return self.storage_path
def cleanup(self):
"""删除本次研究相关的所有文件和目录"""
shutil.rmtree(self.upload_path, ignore_errors=True)
shutil.rmtree(self.storage_path, ignore_errors=True)
def generate_research_id
文章来源于互联网:第十一章:后端实现:FastAPI 与 Agent 集成
相关推荐: 资讯/神器/素材全都有!2025年11月设计素材周刊第三波
一、产品推荐 Ant Design 6.0 正式发布 本次更新聚焦于技术底层深度优化,全面采用纯 CSS 变量与语义化结构,移除 IE 支持并完美适配 React 18(面向 React 19);其核心优势在于支持从 v5 零成本平滑迁移(无需任何兼容包),同…
5bei.cn大模型教程网










