问题描述
在 internal/ai/chat.go 的 BuildMessages 函数里,组装发给 AI 模型的消息列表时,system_prompt 是原样插入的静态文本,整个函数里没有任何地方往对话里注入"当前时间":
var messages []Message
if cfg .SystemPrompt != "" {
messages = append (messages , Message {Role : "system" , Content : cfg .SystemPrompt })
}
也就是说,DeepSeek(或其他接入的模型)在每一轮对话里,除了固定的系统提示词文字和历史消息,完全不知道现在是几点、今天是哪天 。
影响
实际使用中遇到的具体问题:
用户说"5分钟后提醒我",模型必须自己反问用户现在几点,无法自主换算出目标时间
用户说一个未来时间点(比如"19:41 提醒我"),模型对"这是相对当前时刻多久之后"没有概念,容易误判成别的意图
涉及 create_push_job 这类需要计算 cron 表达式初始 next_run 的场景,模型给用户展示的"下次触发时间"文案,跟它自己实际生成的 cron 表达式经常对不上,因为它不知道当前是几点,只能凭对话里用户报的时间"猜"
建议的解决方向
在 BuildMessages 组装消息时,往 system 消息(或者单独一条 system 消息)里注入当前时间,例如:
now := time .Now () // 或者按 bot 所在时区
messages = append (messages , Message {
Role : "system" ,
Content : fmt .Sprintf ("当前时间:%s" , now .Format ("2006-01-02 15:04:05 周一" )),
})
或者支持在 system_prompt 里写一个 {{now}} 占位符,请求组装时做字符串替换,这样管理员可以自己决定要不要用、放在提示词的哪个位置。
时区建议按 bot 所属账号配置的时区来(如果目前没有这个概念,退而求其次用服务器本地时区/UTC+8 也可以,但最好可配置)。
环境
Hub 版本:0.1.36(构建于 2026-06-18)
通过阅读源码定位(internal/ai/chat.go 的 BuildMessages),未在现有 issue/PR 中找到相关讨论;PR feat: 自动续期 clock 注入 + 提醒时间展示 #109 「clock 注入」是 Go 层面测试用的 store.Clock 接口,跟这个问题无关,特此说明避免混淆。
问题描述
在
internal/ai/chat.go的BuildMessages函数里,组装发给 AI 模型的消息列表时,system_prompt是原样插入的静态文本,整个函数里没有任何地方往对话里注入"当前时间":也就是说,DeepSeek(或其他接入的模型)在每一轮对话里,除了固定的系统提示词文字和历史消息,完全不知道现在是几点、今天是哪天。
影响
实际使用中遇到的具体问题:
create_push_job这类需要计算 cron 表达式初始next_run的场景,模型给用户展示的"下次触发时间"文案,跟它自己实际生成的 cron 表达式经常对不上,因为它不知道当前是几点,只能凭对话里用户报的时间"猜"建议的解决方向
在
BuildMessages组装消息时,往 system 消息(或者单独一条 system 消息)里注入当前时间,例如:或者支持在
system_prompt里写一个{{now}}占位符,请求组装时做字符串替换,这样管理员可以自己决定要不要用、放在提示词的哪个位置。时区建议按 bot 所属账号配置的时区来(如果目前没有这个概念,退而求其次用服务器本地时区/UTC+8 也可以,但最好可配置)。
环境
internal/ai/chat.go的BuildMessages),未在现有 issue/PR 中找到相关讨论;PR feat: 自动续期 clock 注入 + 提醒时间展示 #109「clock 注入」是 Go 层面测试用的store.Clock接口,跟这个问题无关,特此说明避免混淆。