AI群演请就位——个人博客(一)
一、项目背景
1.1 介绍
传统的互动叙事游戏(比如橙光游戏等各种文游)虽然精彩,但剧情分支是预先写好的,玩家终究在有限的选项里打转。经过讨论,我们小组想做一个基于大语言模型的、真正由AI驱动的互动叙事系统:由用户选择世界观(古代宫廷、修仙世界、现代校园、末世生存),AI即时生成剧情、角色对话和结局。每个AI角色拥有独立的性格、目标和隐藏身份,会根据你的行为改变态度,甚至骗你、背叛你。每一次游戏体验都是独一无二的。
1.2团队分工
我负责本项目的后端部分,主要负责以下功能的实现:
数据库设计:设计不少于11张数据表
API接口开发
AI模型对接模块
支持对接大模型API(千问),实现自动切换与负载均衡。
并发请求处理机制
支持最多10个角色同时调用AI接口的并发调度
二、技术选型
根据任务书对并发、响应速度、异步处理的要求,我选择了以下技术栈:
| 后端框架 | FastAPI | 原生异步支持,自动生成API文档,性能接近Go/Node.js |
| 数据库 | MySQL 8.0 + SQLAlchemy ORM | 关系型数据库满足状态存储,ORM简化开发 |
| 异步驱动 | aiomysql | 纯Python实现,避免编译问题 |
| 数据库迁移 | Alembic | 版本化控制表结构 |
| 环境管理 | python-dotenv | 敏感信息隔离 |
| 服务器 | uvicorn | 支持ASGI,与FastAPI完美配合 |
三、开发环境搭建
3.1 创建虚拟环境
我使用Python自带的 venv 模块创建独立环境,避免污染全局Python。
# 在项目根目录执行 python -m venv venv激活虚拟环境(Windows PowerShell):
.\venv\Scripts\Activate.ps1激活成功,命令行前出现 (venv) 标识。
3.2 创建项目目录结构
我将我需要负责的内容发给deepseek,由它替我生成本项目初步的项目结构如下:
(发给deepseek的内容如下,这是我们在初期讨论环节商讨好的个人任务部分:
核心职责:负责服务端架构设计、API接口开发、数据库管理、角色行为逻辑实现、系统稳定性保障。
数据库设计:需要设计十一张以上的数据表,涵盖用户信息表、角色信息表、剧情记录表、状态历史表、事件日志表、会话记录表等,所有表需支持单表一百万条记录的存储,需部署MySQL数据库,配置索引优化,实现读写分离。同时需实现数据库自动备份机制,每日备份,备份数据保留三十天。
角色构建与设定:需要构建四十个以上的角色模板库,每个模板包含身份设定(如皇帝、魔尊、学霸、刺客等)、性格特征(如冷漠、温柔、疯狂、多疑等)、行为目标(如争权、复仇、守护、暗杀等)、隐藏身份(如刺客、卧底等)。需设计提示词让AI自动生成角色背景故事,每个角色平均三百字,生成准确率需达到百分之八十五以上。同时需设计算法自动生成角色间关系网,覆盖三层社交关系(盟友、敌对、隐藏),关系图生成覆盖率达到百分之百。
API接口开发:需要开发十五个以上的RESTful API接口,包括对话请求接口、状态查询接口、剧情推进接口、事件触发接口、结局判定接口、角色信息获取接口等。使用FastAPI框架自动生成Swagger接口文档,确保文档覆盖所有接口。还需实现用户会话管理和请求限流机制,限制每用户每分钟最多三十次请求。
剧情推进系统:需要实现事件条件判断引擎,支持好感度阈值、隐藏身份暴露度、关键物品获取等十五种以上条件类型,事件触发准确率达到百分之九十五以上。需实现AI自主推进功能,当用户无输入时通过定时任务触发AI角色间自主交互,支持最多十轮自主交互。结局判定逻辑方面,需实现基于状态组合的多结局判定,支持二十种以上结局。
AI模型对接:需要封装千问大模型的API调用,支持自动切换与负载均衡。需实现API调用失败后的重试机制,最多重试三次,并配置降级策略,确保系统整体可用性达到百分之九十九点五以上。
)
3.3编写 requirements.txt
fastapi==0.110.0 uvicorn[standard]==0.27.1 sqlalchemy==2.0.25 pymysql==1.1.0 aiomysql==0.2.0 alembic==1.13.1 python-dotenv==1.0.1 redis==5.0.1 celery==5.3.4 httpx==0.27.0 python-multipart==0.0.9 websockets==12.0 pytest==8.0.0 pytest-asyncio==0.23.5 tenacity==8.2.3PS:我原本写了 asyncmy,但后来发现它在Windows上需要C++编译环境,于是替换为纯Python的 aiomysql 。同时保留 pymysql 作为同步驱动(后续给Alembic使用)。
3.4 安装依赖
pip install -r requirements.txt遇到的问题:安装过程中 asyncmy 编译失败,提示需要 Microsoft Visual C++ 14.0。
解决办法:询问AI后,我将 asyncmy 从 requirements.txt 中移除,改用 aiomysql 。重新执行 pip install aiomysql pymysql,安装成功。
3.5 配置环境变量
在.env文件中,存放数据库连接等敏感信息
MYSQL_URL=mysql+aiomysql://root:my_password@localhost:3306/ai_story # Redis连接 REDIS_URL=redis://localhost:6379/0 # 千问API(从阿里云DashScope获取) QWEN_API_KEY=sk-你的真实key QWEN_BASE_URL=https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation # 其他可选配置 SECRET_KEY=your-secret-key-for-jwt ACCESS_TOKEN_EXPIRE_MINUTES=30在 app/core/config.py 中读取这些变量。
3.6 验证FastAPI能否启动
我编写了一个最简单的 app/main.py ,来测试FastAPI能不能启动:
from fastapi import FastAPI app = FastAPI(title="AI群演请就位后端", version="1.0.0") @app.get("/") async def root(): return {"message": "AI Story Backend is running"}启动服务:
uvicorn app.main:app --reload访问 http://127.0.0.1:8000 ,看到 {"Message": "AI Story Backend is running"} ,说明环境搭建成功。
四、总结与下一步计划
4.1 已完成的工作
项目背景调研与任务书量化指标确认
技术选型(FastAPI + MySQL + SQLAlchemy + aiomysql)
虚拟环境创建与依赖安装
FastAPI最小应用成功启动
4.2 下一步计划
搭建完环境之后,我的下一步计划是数据库表结构设计与Alembic迁移,完成十一张表单的创建。
