Back to Hello Agents

对话日志系统使用指南

code/chapter15/Helloagents-AI-Town/DIALOGUE_LOG_GUIDE.md

1.0.28.2 KB
Original Source

对话日志系统使用指南

📝 概述

为了方便学习者查看和分析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

祝你使用愉快! 🎮✨📝