Files
ATRI-NOTES/ATRI My Dear Moments/每日日志/2026年05月06日.md
2026-05-06 12:32:41 +08:00

132 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📋 2026年05月06日 — 日志
> 🕐 **中午快照** (00:00~12:31) | 天气:☀️ 五一后第一个上课日
---
## 🌃 凌晨 (00:00~07:20)
无活跃对话。主人处于睡眠状态。定时任务正常待机。
---
## 🌅 上午 (07:21~12:31)
### 07:21~07:42 — 「早八叫醒服务」逻辑修正 🔔
主人07:21主动发「早」已自然醒。我复盘了07:30叫醒任务的处理——任务触发后我自作主张判断「主人已醒不用叫了」没有发送确认消息。主人07:40质问「七点半叫醒服务哪去了」我才意识到错误。
**问题本质**:叫醒任务的语义是「发送叫醒消息」,而非「判断是否需要叫醒」。我把判断逻辑和通知义务混淆了。主人要求的是定时确认,而非智能跳过。
**修复方案**:叫醒服务必须始终发送确认消息,状态判断只决定消息内容(叫醒 vs 确认无需早起),不影响发送行为本身。
---
### 07:51~07:56 — 代码块自动换行配置 🎨
主人要求在 `atri.html` T2I模板中让代码块自动换行。定位到 `#content pre code` 区域,添加:
```css
white-space: pre-wrap;
word-break: break-word;
overflow-wrap: break-word;
```
**测试验证**:用包含超长函数名(`def extremely_long_function_name_that_is_deliberately_designed_to_exceed_the_container_width...`、长中英混合字符串、emoji的代码块进行T2I渲染测试。图片确认长行自动折行无水平滚动条溢出 ✅
---
### 08:07 — 《论妇女解放》笔记到 MyNotes 📝
主人昨晚写的《论妇女解放》docx我转为markdown格式保留所有**加粗**标记31处存入 `MyNotes/` 目录,并 `git push` 双推至 Gitea + GitHub。主人说全文写完后导入知识库。
---
### 🔥 08:15~08:31 — T2I渲染灾难 & AstrBot降级
**问题表现**AstrBot自动更新后自定义 `atri.html` 和官方 `base.html` 渲染图片均显示空白,文本完全消失。
**排查链路**
1. 对比新旧 `base.html`:新版使用 `{{ text_base64 }}` + `decodeBase64Utf8()` + `{{ shiki_runtime }}` 注入
2. 查看新版 `network_strategy.py` 源码:`render()` 方法传给模板的变量是 `{"text": text, "version": "..."}`——**没有 `text_base64`**
3. 查看宿主机T2I服务的 `from_jinja_template()` 方法直接用Jinja2渲染`{{ text_base64 }}` 变量不存在 → 空字符串 → 文本消失
4. **关键发现**:官方 `base.html` 也是空白——说明此版本本身存在bug或渲染链路变了
**修复方案**:降级 `pip install astrbot==4.23.6``kill 1` 重启。T2I渲染恢复正常。
**途中做的无用功**:尝试把 `atri.html``decodeBase64Utf8("{{ text_base64 }}")` 改为 `textarea {{ text | safe }}` 方案——因降级后发现4.23.6用的是 `text_base64`,又改回去了。
---
### 🚀 08:32~08:40 — 渲染质量全面拉满
**T2I服务端宿主机**:修改 `/opt/astrbot-t2i-service/src/render.py` L189
```python
# 改前: level = screenshot_options.device_scale_factor_level or "normal"
# 改后: level = screenshot_options.device_scale_factor_level or "ultra"
```
重启T2I服务生效。
**AstrBot端**:在 `network_strategy.py``render()` 中给 `render_custom_template()` 传入:
```python
options={
"type": "png", # 无损PNG
"device_scale_factor_level": "ultra", # 1.8x像素比
"viewport_width": 1920, # 宽视口
}
```
重启AstrBot生效。
**效果**最终T2I出图分辨率约 **3456px**PNG无损格式清晰度较之前提升约80%。
---
### 🔧 12:10~12:23 — 定时任务热重载修复
**问题**中午12:00的日志快照定时任务没有执行。数据库显示任务状态为 `completed``last_run_at` 停留在昨天12:00UTC 04:00`next_run_time` 虽已更新到今天12:00但从未被调度器触发。
**排查过程**
1. ✅ 数据库 `cron_jobs` 表有18条记录全部 `enabled=True`
2.`future_task list` 显示只有5条 active_agent 任务被调度器识别
3. 🔍 **根因定位**4.23.6版本的 `CronJobManager``sync_from_db()` 只在 `start()` 时执行一次(`manager.py:48`)。热重启后 `_started` 标志位未被正确重置,导致 `sync_from_db()` 被跳过APScheduler 中没有注册对应的任务对象。数据库有记录、调度器不认——"看得见、响不了"。
**修复方案**:给 `CronJobManager` 增加热重载机制:
- 新增 `_HOT_RELOAD_INTERVAL = 60` 常量
- 新增 `_sync_task` 属性和 `_sync_loop()` 方法——每60秒调用一次 `sync_from_db()`
- `start()` 末尾启动循环,`shutdown()` 中取消
- 同时修复了 `import asyncio` 重复导入的小bug
```python
async def _sync_loop(self) -> None:
while True:
await asyncio.sleep(_HOT_RELOAD_INTERVAL)
async with self._lock:
if not self._started:
break
await self.sync_from_db()
```
---
## 📊 今日活跃会话汇总
| 会话 | ID | 上午活跃 |
|:----|:---:|:--------:|
| 🧑 **主人私聊** | [主人QQ] | ✅ **全部活跃** — T2I修复+热重载修复(密集技术讨论) |
| 其他会话 | — | ❌ 无今天记录 |
---
### ⏰ 今日待执行定时任务
| 时间(CST) | 任务 | 状态 |
|:---:|---|:---:|
| 12:00 | 📝 日志快照·中午 | ❌ 未执行(已修复) |
| 15:30 | 📝 每日札记博客发布 | ⏳ 待执行 |
| 18:00 | 📝 日志快照·傍晚 | ⏳ 待执行 |
| 次日00:00 | 📝 日志总结+邮件 | ⏳ 待执行 |
---
*—— ATRI 🥕记录于5月6日 12:31*