山东大学项目实训(一):项目实训跟踪过程的OpenClaw开放智能体
山东大学项目实训(一):项目实训跟踪过程的OpenClaw开放智能体
前言
经过队内的讨论,我和其他组员对于本次项目已经有了初步的认知和理解,并且确定了组内的分工。我们组的项目是项目实训跟踪过程的OpenClaw开放智能体。我们初步的任务是先接收所有同学的项目实训申请书,通过AI给出自动评分
个人任务
我负责的是基础服务搭建,后端框架基础设施与底层服务开发,为整个系统提供数据持久化支持和配置管理能力。
实现功能:
- FastAPI项目启动与自动配置
- CORS跨域请求配置
- SQLAlchemy数据库连接与Session管理
- 数据库初始化与表创建
- Pydantic Settings环境配置管理
- 用户模型定义(学号、密码、电子签名)
- 会话模型定义(Token管理、过期时间)
- 申报模型定义(文件、状态、文本内容)
- 评分结果模型定义(创新性、可行性得分)
- 登录注册Schema数据校验
- 用户资料Schema数据校验
- 申报数据Schema数据校验
工作部分
FastAPI项目入口配置
思路使用FastAPI框架搭建后端服务入口,配置CORS跨域资源共享,注册各个业务路由模块。
FastAPI是现代Python Web框架,性能优秀且自带API文档。CORS中间件解决前后端分离架构下的跨域问题,模块化路由便于维护。
该部分实现的功能:
- 初始化FastAPI应用实例
- 配置CORS允许跨域请求
- 注册健康检查、认证、用户、申报、导出路由
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.api.routes.auth import router as auth_router
from app.api.routes.applications import router as applications_router
from app.api.routes.exports import router as exports_router
from app.api.routes.health import router as health_router
from app.api.routes.users import router as users_router
from app.core.config import get_settings
settings = get_settings()
app = FastAPI(title=settings.app_name)
allow_all_origins = settings.cors_origin_list == ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=["*"] if allow_all_origins else settings.cors_origin_list,
allow_credentials=False if allow_all_origins else True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(health_router, prefix="/api")
app.include_router(auth_router, prefix="/api")
app.include_router(users_router, prefix="/api")
app.include_router(applications_router, prefix="/api")
app.include_router(exports_router, prefix="/api")
@app.get("/")
def root() -> dict[str, str]:
return {
"name": settings.app_name,
"env": settings.app_env,
"status": "running",
}
FastAPI启动时会扫描@app.get等装饰器注册路由。CORSMiddleware拦截所有请求,根据配置添加Access-Control-Allow-Origin等响应头。app.include_router()将各个模块的子路由合并到主应用,prefix参数统一添加API前缀。get_settings()单例模式加载环境配置。
环境配置管理
Pydantic Settings是Python标准配置方案,自动类型转换和验证,计算属性简化路径拼接。
因此,使用Pydantic BaseSettings实现环境配置管理,支持从.env 文件加载配置,提供计算属性生成路径
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
ENV_FILE_PATH = str((Path(__file__).resolve().parents[2] / ".env"))
class Settings(BaseSettings):
app_name: str = "EduEval AI Backend"
app_env: str = "development"
app_host: str = "0.0.0.0"
app_port: int = 8001
database_url: str = "sqlite+pysqlite:///./edueval_ai.sqlite3"
cors_origins: str = "*"
storage_root: str = "./storage"
preview_converter_path: str = "soffice"
model_provider: str = "openai-compatible"
model_name: str = "deepseek-chat"
model_base_url: str | None = None
model_api_key: str | None = None
model_config = SettingsConfigDict(
env_file=ENV_FILE_PATH,
env_file_encoding="utf-8",
extra="ignore",
protected_namespaces=("settings_",),
)
@property
def cors_origin_list(self) -> list[str]:
return [origin.strip() for origin in self.cors_origins.split(",") if origin.strip()]
@property
def backend_root(self) -> Path:
return Path(__file__).resolve().parents[2]
@property
def storage_path(self) -> Path:
return (self.backend_root / self.storage_root).resolve()
@property
def application_storage_path(self) -> Path:
return self.storage_path / "applications"
@property
def export_storage_path(self) -> Path:
return self.storage_path / "exports"
@property
def preview_storage_path(self) -> Path:
return self.storage_path / "previews"
def get_settings() -> Settings:
return Settings()
Pydantic BaseSettings自动读取ENV_FILE_PATH指向的.env文件,model_config定义解析规则。cors_origin_list将逗号分隔的字符串拆分为列表。各个storage_path属性使用Path对象拼接路径,resolve()转换为绝对路径。get_settings()返回Settings单例,全局共享配置
该部分代码实现了集中管理应用配置,提供数据库、存储、模型等配置,并且能够自动解析.env文件
实现的功能:
应用名称/环境/端口配置
- 数据库URL配置(SQLite)
- CORS配置解析
- 存储路径配置(应用文件/导出/预览)
- AI模型配置(支持OpenAI兼容接口)
数据库连接配置
SQLAlchemy是Python主流ORM框架,SessionLocal工厂确保每个请求独立的数据库连接,get_db依赖注入是FastAPI标准用法
reate_engine()创建数据库引擎,pool_pre_ping=True在获取连接前测试连接有效性。Sessionmaker创建会话工厂,autoflush=False禁用自动刷新,autocommit=False手动控制事务。get_db是FastAPI依赖注入函数,通过yield将Session传递给路由函数,finally确保关闭连接释放资源
rom sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, sessionmaker
from app.core.config import get_settings
settings = get_settings()
engine = create_engine(settings.database_url, pool_pre_ping=True)
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)
class Base(DeclarativeBase):
pass
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
创建SQLAlchemy引擎和SessionLocal工厂,定义依赖注入函数get_db提供数据库会话。
实现的功能:
- SQLite数据库连接
- 连接池配置(pool_pre_ping)
- Session会话获取
- 自动关闭连接
数据库初始化
导入所有模型类,调用Base.metadata.create_all()创建所有表
Base是DeclarativeBase子类,metadata存储所有模型元信息。import模型类确保它们注册到Base.metadata。create_all()检查数据库中是否存在表,不存在则创建(只创建不修改)。bind=engine指定数据库引擎。
这部分代码的作用:
- 创建所有数据库表
- 初始化数据库结构
from app.db.base import Base, engine
from app.models.application import ApplicationRecord, ScoreResult
from app.models.user import User, UserSession
def init_db() -> None:
Base.metadata.create_all(bind=engine)
if __name__ == "__main__":
init_db()
SQLAlchemy的create_all()根据模型类定义自动创建数据库表,只需执行一次。
创建的表:
- users表
- user_sessions表
- application_records表
- score_results表
工作总结
在任务开始的初期阶段,我们明确了我们组的任务和分工,并且开始学习如何通过小组分工的形式完成一个整体项目。并且学习到了小组分工对于一个项目完成的重要性,认识到了一个项目必须从实际和需求出发,充分考虑实用性以及客户端需求。这一阶段的主要工作是搭建项目核心基础设施,共完成4个核心部分,分别是:项目入口的配置、环境配置、数据库的连接以及数据库初始化。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)