如何用Hook让Agent感知时间
大语言模型缺乏时间感知,可通过Hook机制在用户提交提示时注入当前系统时间至模型上下文,配合规则声明使其成为推理锚点,从而解决相对时间理解与真人感缺失问题。
一、大模型缺乏时间感知能力
1. 现象
随意问一个时效性问题:“最近3年云栖大会都是什么时候开的?”
一个没有时间感知的Agent其实并不清楚“最近3年”具体指哪三年。它可能会翻找训练数据中的旧记忆(这个时间大概率已经过时),也可能随意编造一个日期,更可能直接卡住——因为“最近”这个词需要一个基准点,而它根本没有这个基准。类似的还有:晚上十一点聊天它说“美好的一天开始了”,周一问它事情它祝你“周末愉快”。这些都属于系统性的时间感知缺失。
2. 原因
这并非模型本身能力的问题,大模型推理时权重已经被冻结,没有进程级的时钟,也没有系统调用,无法获取当前时间。除非在prompt中明确告知,否则它只能依靠训练数据中“见过的最近日期”去猜测,而这个日期可能已经是一年前。
Fine-tune无法解决这个问题,因为时间不断变化,无法直接训练进权重。接入API获取服务器时间可以实现,但每次对话都需要多一次调用,延迟、成本和依赖链都会增加。最简洁的方案是:每次用户提交prompt时,向上下文注入一行当前时间。不需要改模型、不需要微调、也不依赖外部API,一个Hook即可搞定。
二、时间注入Hook方案
主流Agent工具大多提供了Hook机制,允许在特定事件点执行自定义脚本。UserPromptSubmit事件在每次用户提交prompt时触发,脚本的输出可以通过hookSpecificOutput.additionalContext字段注入到模型上下文中。整个方案分为三步:注册、执行与声明,缺一不可。
1. 注册Hook
在配置文件中注册UserPromptSubmit事件:
{ "hooks": { "UserPromptSubmit": [
{
"matcher": "*",
"hooks": [{ "type": "command", "command": "~/.qoder/hooks/inject-time.sh", "timeout": 5}
]
} ]}
}
matcher: "*"表示所有prompt都会触发,timeout: 5防止脚本卡死阻塞对话。这一层只负责一件事:用户每次说话时,运行这个脚本。
2. 执行脚本
inject-time.sh,共23行,全部逻辑都浓缩在这里:
#!/bin/bash
# UserPromptSubmit Hook — 时间注入(极简版)
# 每次提交 Prompt 时向 AI 上下文注入当前系统时间。
# 仅记录一行时间戳到 audit 目录,不记录任何聊天内容。
# Fail-Open: hook 出错绝不影响宿主。
trap 'exit 0' ERR EXIT
set +e +u
# 丢弃 stdin(不解析 prompt,避免管道阻塞)
cat >/dev/null 2>&1
NOW="$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null)"
WEEKDAY="$(date '+%A' 2>/dev/null)"
# 极简日志: 仅时间戳,统一到 audit 目录,不含聊天内容
LOG_FILE="${HOME}/.qoder/audit/inject-time.log"
mkdir -p "${HOME}/.qoder/audit" 2>/dev/null
printf '[%s]n' "$NOW" >> "$LOG_FILE" 2>/dev/null || true
# 注入时间上下文 (JSON 格式: hookSpecificOutput.additionalContext)
[ -n "$NOW" ] && printf '{"hookSpecificOutput":{"hook_event_name":"UserPromptSubmit","additionalContext":"当前系统时间: %s %s"}}' "$NOW" "$WEEKDAY"
exit 0
脚本逻辑非常简洁,核心功能如下:
- 获取时间:精确到秒,并附带完整星期名
- 注入上下文:通过
additionalContext将时间信息塞进模型上下文,最终模型看到的是当前系统时间: 2026-07-16 21:01:35 Thursday - 审计日志:只记录一行时间戳,不包含任何聊天内容
- Fail-Open:任何异常都会静默退出,绝不影响对话;stdin直接丢弃,不解析、不存储用户输入
3. 声明能力
仅注入时间还不够,需要告诉Agent“你拥有这个能力”,否则那行时间戳只是上下文中的噪音。推荐在全局规则文件中添加一条:
## 时间感知
- 每轮会话会自动触发hook注入时间,注入时间格式: %Y-%m-%d %H:%M:%S所以你是具备时间感知能力的, 回答用户问题需要有时间意识,优先使用注入时间
模型在推理时会读取system prompt,这条规则相当于一份能力声明。有了它,Agent才会主动将时间作为推理锚点,而不会把注入的时间戳当作无关信息忽略掉。
三、效果对比
未注入时间的Agent:面对“最近3年云栖大会都是什么时候开的”,不知道“最近”的基准点,可能拿训练数据截止日期当作基准,也可能直接猜。调用搜索工具时查询意图缺少时间锚点,搜“最新”可能翻出几年前的结果,搜“上周”无法锚定到具体日期区间,并不固定。
当然,随着模型推理能力越来越强、Agent足够完善,这类意图可能会被LLM识别,继而优先调用时间工具获取当前时间,但这种做法依然不够稳定,因为时间注入完全依赖当时LLM是否决定去看一下当前几点。
注入时间后的Agent:看到上下文中的2026-07-16,立刻明白“最近3年”是指2024、2025、2026,然后主动调用搜索工具查询这三年的实际举办日期。搜“最新”不会翻出2023年的结果,搜“上周”能锚定到上周一到周日。时间戳成为了理解相对时间词的基准。
真人感的差异更加明显:加上时间感知后,晚上十一点它不会回复“美好的一天开始了”,周一不会祝你“周末愉快”,周四聊到周末计划也能接得住。这些细节单独看似乎没什么,但累积起来就是像人和不像人的分界线。它不是靠调参调出来的,而是靠上下文里有没有“当下”这个锚点。
本文配置以Qoder为例(配置文件
~/.qoder/settings.json,规则文件~/.qoder/rules/system.md),其他支持Hook机制的同类Agent工具按需调整路径和字段即可,思路完全通用。
参考文档
- Qoder Hooks 官方文档
- Claude Code Hooks 参考(同类机制)
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:如何用Hook让Agent感知时间要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点提示词过长易被截断,应删除客套话与空泛描述,用函数签名锚定类型行为;以符号替代自然语言缩短字符;分阶段提交任务降低出错率;预校验提示词长度,控制在1800字符以内。
向量空间模型将文本转为高维向量,通过余弦相似度计算文本相似性。TF-IDF算法通过词频与逆文档频率加权,提升特征词区分度。该模型在文本分类、情感分析等任务中广泛应用,但忽略语义关系,常需结合神经网络等方法弥补不足。
AI大模型为智能驾驶提供精准决策支持,提升数据处理与自适应学习能力;智能驾驶的高实时性、安全性与鲁棒性需求倒逼大模型在计算效率、可解释性等方面持续进化。两者深度结合,共同推动自主驾驶升级与城市交通智能化。
摩尔线程在2023算力技术大会上发布全功能GPU算力集群的异地调度方案,实现跨地域集群化处理。该方案支持自动选择最优节点、负载均衡及成本优化,服务于智算、科学计算、数字文旅等场景。会上还成立校企智算联盟,推动西部算网融合。
- 日榜
- 周榜
- 月榜
热点快看
