Back to Hello Agents

赛博小镇 - FastAPI后端

code/chapter15/Helloagents-AI-Town/backend/README.md

1.0.24.5 KB
Original Source

赛博小镇 - 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

运行测试脚本:

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.pyNPC_ROLES中添加配置
  2. batch_generator.pypreset_dialogues中添加预设对话
  3. 重启服务

自定义对话风格

修改agents.py中的create_system_prompt函数

调整批量生成提示词

修改batch_generator.py中的_build_batch_prompt函数

📄 许可证

本项目遵循 HelloAgents 项目的开源协议。