# 赛博小镇 - FastAPI后端 基于HelloAgents框架的AI NPC对话系统后端服务。 ## 🎯 功能特性 ### 核心功能 - ✅ **单个NPC对话**: 玩家与NPC实时对话,使用独立Agent处理 - ✅ **批量对话生成**: 定时批量生成所有NPC的自主对话,降低API成本66% - ✅ **状态管理**: 自动更新和缓存NPC状态 - ✅ **CORS支持**: 支持Godot HTML5导出跨域访问 ### NPC角色 1. **张三** - Python工程师 (工位区) 2. **李四** - 产品经理 (会议室) 3. **王五** - UI设计师 (休息区) ## 📦 安装依赖 ### 1. 安装Python依赖 ```bash cd backend pip install -r requirements.txt ``` ### 2. 配置环境变量 创建`.env`文件或设置环境变量: **注意**: 如果不配置API密钥,系统将使用预设对话模式运行。 ## 🚀 启动服务 ### 方法1: 直接运行 ```bash python main.py ``` ### 方法2: 使用uvicorn ```bash uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` 启动成功后访问: - **API文档**: http://localhost:8000/docs - **根路径**: http://localhost:8000/ ## 🧪 测试API 运行测试脚本: ```bash python test_api.py ``` 测试内容包括: 1. ✅ 根路径访问 2. ✅ 健康检查 3. ✅ 获取NPC列表 4. ✅ 获取NPC状态 5. ✅ 与NPC对话 6. ✅ 获取NPC详情 7. ✅ 强制刷新状态 ## 📡 API接口 ### 1. 获取NPC列表 ```http GET /npcs ``` 响应示例: ```json { "npcs": [ { "name": "张三", "title": "Python工程师", "location": "工位区", "activity": "写代码", "available": true } ], "total": 3 } ``` ### 2. 与NPC对话 ```http POST /chat Content-Type: application/json { "npc_name": "张三", "message": "你好,你在做什么?" } ``` 响应示例: ```json { "npc_name": "张三", "npc_title": "Python工程师", "message": "你好!我正在优化一个多智能体系统的性能,挺有意思的。", "success": true, "timestamp": "2024-01-15T10:30:00" } ``` ### 3. 获取NPC状态 ```http GET /npcs/status ``` 响应示例: ```json { "dialogues": { "张三": "终于把这个bug修复了,测试通过!", "李四": "下周的产品评审会需要准备一下资料。", "王五": "这个配色方案看起来不错,再调整一下细节。" }, "last_update": "2024-01-15T10:30:00", "next_update_in": 25 } ``` ### 4. 强制刷新状态 ```http POST /npcs/status/refresh ``` ## 🏗️ 项目结构 ``` backend/ ├── main.py # FastAPI主程序 ├── config.py # 配置文件 ├── models.py # 数据模型(Pydantic) ├── agents.py # NPC Agent系统 ├── batch_generator.py # 批量对话生成器 ├── state_manager.py # NPC状态管理器 ├── test_api.py # API测试脚本 ├── requirements.txt # Python依赖 └── README.md # 本文件 ``` ## 🎨 核心设计 ### 批量对话生成 为了降低API成本和延迟,系统采用批量生成策略: **传统方式**: - 3个NPC × 每30秒 = 6次API调用/分钟 - 每小时: 360次调用 **批量方式**: - 1次批量调用/30秒 = 2次API调用/分钟 - 每小时: 120次调用 - **成本降低66%!** ### 工作流程 ``` 1. 定时器触发(30秒) ↓ 2. 批量生成器构建提示词 ↓ 3. 一次LLM调用生成所有NPC对话 ↓ 4. 解析JSON响应 ↓ 5. 更新状态管理器缓存 ↓ 6. Godot客户端定时获取状态 ``` ## 🔧 配置说明 ### config.py ```python # NPC更新间隔(秒) NPC_UPDATE_INTERVAL = 30 # LLM配置 OPENAI_MODEL = "gpt-4o-mini" # 推荐使用mini版本降低成本 ``` ### 调整更新频率 修改`config.py`中的`NPC_UPDATE_INTERVAL`: - 开发测试: 10秒 - 正式运行: 30-60秒 - 低成本模式: 120秒 ## 🐛 故障排查 ### 问题1: 启动失败 ``` ❌ LLM初始化失败 ``` **解决**: 检查OPENAI_API_KEY环境变量是否设置 ### 问题2: 对话无响应 ``` ⚠️ 将使用预设对话模式 ``` **解决**: 系统自动降级到预设对话,不影响基本功能 ### 问题3: CORS错误 **解决**: 检查`config.py`中的`CORS_ORIGINS`配置 ## 📝 开发建议 ### 添加新NPC 1. 在`agents.py`的`NPC_ROLES`中添加配置 2. 在`batch_generator.py`的`preset_dialogues`中添加预设对话 3. 重启服务 ### 自定义对话风格 修改`agents.py`中的`create_system_prompt`函数 ### 调整批量生成提示词 修改`batch_generator.py`中的`_build_batch_prompt`函数 ## 📄 许可证 本项目遵循 HelloAgents 项目的开源协议。