# 对话日志系统使用指南 ## 📝 概述 为了方便学习者查看和分析NPC对话过程,我们实现了一个完整的日志系统,将所有对话信息同时输出到: - ✅ **控制台** - 实时查看 - ✅ **日志文件** - 持久化保存,方便回顾 --- ## 🎯 功能特性 ### 1. 自动记录对话信息 日志系统会自动记录: - 💬 对话开始/结束 - 📝 玩家消息 - 💖 当前好感度和关系等级 - 🧠 检索到的相关记忆 - 🤖 NPC回复内容 - 📊 好感度变化分析 - 🎉 关系等级变化 - 💾 记忆保存确认 ### 2. 双重输出 - **控制台输出** - 实时查看,方便调试 - **文件输出** - 持久化保存,方便回顾和分析 ### 3. 按日期分类 日志文件按日期自动分类: ``` backend/logs/ ├── dialogue_2025-01-15.log ├── dialogue_2025-01-16.log └── dialogue_2025-01-17.log ``` --- ## 📂 文件结构 ``` code/chapter15/backend/ ├── logger.py # 日志系统核心模块 ├── view_logs.py # 日志查看工具 ├── agents.py # ✅ 已集成日志系统 └── logs/ # 日志文件目录 (自动创建) └── dialogue_YYYY-MM-DD.log ``` --- ## 🚀 使用方法 ### 方法1: 启动后端服务 (自动记录) ```bash cd code/chapter15/backend python main.py ``` **日志会自动记录到:** - 控制台 (实时显示) - `logs/dialogue_YYYY-MM-DD.log` (持久化保存) **启动时会显示日志文件位置:** ``` 📝 对话日志文件: D:\code\...\backend\logs\dialogue_2025-01-15.log 📂 日志目录: D:\code\...\backend\logs ``` --- ### 方法2: 实时查看日志文件 **在另一个终端窗口运行:** ```bash cd code/chapter15/backend python view_logs.py tail ``` **效果:** - 实时显示日志内容 (类似 `tail -f`) - 新的对话会立即显示 - 按 `Ctrl+C` 停止查看 --- ### 方法3: 查看完整日志 ```bash cd code/chapter15/backend python view_logs.py view ``` **效果:** - 显示今天的完整日志内容 - 一次性显示所有对话记录 --- ### 方法4: 列出所有日志文件 ```bash cd code/chapter15/backend python view_logs.py list ``` **效果:** ``` ============================================================ 📂 日志文件列表 📁 目录: D:\code\...\backend\logs ============================================================ 1. dialogue_2025-01-15.log 大小: 12.34 KB 修改时间: 2025-01-15 14:30:25 2. dialogue_2025-01-14.log 大小: 8.56 KB 修改时间: 2025-01-14 18:45:12 ``` --- ## 📊 日志格式示例 ### 完整对话流程 ``` 14:30:25 - ============================================================ 14:30:25 - 💬 对话开始: 张三 <-> 玩家 14:30:25 - ============================================================ 14:30:25 - 📝 玩家消息: 你好,很高兴认识你! 14:30:25 - 💖 当前好感度: 50.0/100 (友好) 14:30:25 - 🧠 检索到0条相关记忆 14:30:26 - 🤖 正在生成回复... 14:30:28 - 💬 张三回复: 你好!我也很高兴认识你。我是Python工程师张三,最近在研究多智能体系统。 14:30:28 - 📊 正在分析好感度变化... 14:30:30 - 📈 好感度变化: 50.0 -> 56.0 (+6.0) 14:30:30 - 原因: 友好问候 14:30:30 - 情感: positive 14:30:30 - 💾 对话已保存到张三的记忆中 14:30:30 - ============================================================ 14:30:30 - ✅ 对话完成 ``` ### 好感度提升 + 等级变化 ``` 14:35:12 - ============================================================ 14:35:12 - 💬 对话开始: 张三 <-> 玩家 14:35:12 - ============================================================ 14:35:12 - 📝 玩家消息: 你的代码写得真棒!我很佩服你! 14:35:12 - 💖 当前好感度: 56.0/100 (友好) 14:35:12 - 🧠 检索到1条相关记忆 14:35:12 - 📚 相关记忆: 14:35:12 - 1. 玩家说: 你好,很高兴认识你! 14:35:13 - 🤖 正在生成回复... 14:35:15 - 💬 张三回复: 谢谢夸奖!写代码确实让我很有成就感... 14:35:15 - 📊 正在分析好感度变化... 14:35:17 - 📈 好感度变化: 56.0 -> 64.0 (+8.0) 14:35:17 - 原因: 赞美工作 14:35:17 - 情感: positive 14:35:17 - 🎉 关系等级变化: 友好 -> 亲密 14:35:17 - 💾 对话已保存到张三的记忆中 14:35:17 - ============================================================ 14:35:17 - ✅ 对话完成 ``` --- ## 🎓 教学价值 ### 1. 完整的对话流程可视化 学习者可以清楚地看到: - 📝 玩家输入 - 🧠 记忆检索过程 - 🤖 NPC回复生成 - 📊 好感度分析 - 💾 记忆保存 ### 2. 好感度系统验证 - 看到好感度如何根据对话内容变化 - 理解情感分析的结果 - 观察关系等级的变化 ### 3. 记忆系统验证 - 看到NPC检索到的历史记忆 - 理解记忆如何影响对话 - 验证记忆保存是否成功 ### 4. 调试和优化 - 快速定位问题 - 分析对话质量 - 优化系统参数 --- ## 🔧 技术实现 ### logger.py 核心功能 ```python # 创建logger dialogue_logger = logging.getLogger("dialogue") # 文件handler - 保存到文件 file_handler = logging.FileHandler(LOG_FILE, encoding="utf-8") # 控制台handler - 输出到控制台 console_handler = logging.StreamHandler() # 添加handlers dialogue_logger.addHandler(file_handler) dialogue_logger.addHandler(console_handler) ``` ### agents.py 集成方式 ```python from logger import ( log_dialogue_start, log_affinity, log_memory_retrieval, log_generating_response, log_npc_response, log_analyzing_affinity, log_affinity_change, log_memory_saved, log_dialogue_end ) def chat(self, npc_name: str, message: str, player_id: str = "player") -> str: # 记录对话开始 log_dialogue_start(npc_name, message) # 记录好感度 log_affinity(npc_name, affinity, affinity_level) # 记录记忆检索 log_memory_retrieval(npc_name, len(relevant_memories), relevant_memories) # 记录NPC回复 log_npc_response(npc_name, response) # 记录好感度变化 log_affinity_change(affinity_result) # 记录对话结束 log_dialogue_end() ``` --- ## 📋 常见问题 ### Q1: 日志文件在哪里? **A:** 日志文件保存在 `backend/logs/` 目录下,按日期命名: ``` backend/logs/dialogue_YYYY-MM-DD.log ``` 启动后端服务时会显示日志文件的完整路径。 --- ### Q2: 如何实时查看日志? **A:** 有两种方法: **方法1: 查看控制台输出** ```bash cd code/chapter15/backend python main.py ``` **方法2: 使用日志查看工具** ```bash # 在另一个终端窗口 cd code/chapter15/backend python view_logs.py tail ``` --- ### Q3: 日志文件会占用很多空间吗? **A:** 不会。日志文件按日期分类,每天一个文件。一般情况下: - 每次对话约 0.5-1 KB - 100次对话约 50-100 KB - 一天的日志通常不超过 1 MB --- ### Q4: 可以查看历史日志吗? **A:** 可以!使用以下命令: ```bash # 列出所有日志文件 python view_logs.py list # 查看特定日期的日志 python view_logs.py view ``` 或者直接打开日志文件: ``` backend/logs/dialogue_2025-01-15.log ``` --- ## ✅ 总结 ### 优势 1. ✅ **双重输出** - 控制台 + 文件,方便实时查看和回顾 2. ✅ **自动记录** - 无需手动操作,自动记录所有对话 3. ✅ **格式清晰** - 使用emoji和分隔线,易于阅读 4. ✅ **按日期分类** - 方便管理和查找 5. ✅ **实时查看** - 提供实时查看工具 6. ✅ **教学友好** - 完整展示对话流程,方便学习 ### 使用建议 1. **开发调试时** - 查看控制台输出,实时调试 2. **学习分析时** - 查看日志文件,详细分析 3. **演示教学时** - 使用 `view_logs.py tail` 实时展示 --- ## 🎉 开始使用 ### 步骤1: 启动后端服务 ```bash cd code/chapter15/backend python main.py ``` ### 步骤2: 运行Godot游戏 在Godot编辑器中运行游戏 ### 步骤3: 与NPC对话 走到NPC附近,按E键开始对话 ### 步骤4: 查看日志 **选项A: 查看控制台** - 在运行 `python main.py` 的终端窗口查看 **选项B: 查看日志文件** ```bash # 在另一个终端窗口 cd code/chapter15/backend python view_logs.py tail ``` --- **祝你使用愉快!** 🎮✨📝