AI大模型教程
一起来学习

第十一章:后端实现:FastAPI 与 Agent 集成

1. 内容讲解

在上一章中,我们完成了项目的整体规划和架构设计。现在,我们将把蓝图付诸实践,从零开始搭建项目的基础设施。本章的目标是:

  1. 创建并组织项目的文件结构。
  2. 安装所有必要的依赖库。
  3. 配置 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 零成本平滑迁移(无需任何兼容包),同…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 第十一章:后端实现:FastAPI 与 Agent 集成
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们