我正在尝试回填过去 90 天的数据。它成功回填了大约 2000 个主题中的 500 个,但现在进度停滞了,因为它在每次作业运行时(每 5 分钟)都会处理同一个主题。不知道为什么——该主题已经有一个有效的摘要,并且在过去 12 天内没有新帖子。AI Audit Logs 表显示每次请求都成功。Sidekiq 状态正常。/logs 中没有相关信息。如何调试这个问题?
SELECT request_tokens,
response_tokens,
raw_response_payload,
topic_id,
created_at AS summary_created_at,
language_model
FROM ai_api_audit_logs
WHERE raw_request_payload LIKE '%Franklin Lexington%'
ORDER BY created_at DESC
LIMIT 40
所有原始响应负载看起来都是有效的。每个都略有不同,正如预期的那样。这是一个例子(我已编辑掉大部分内容文本):
{
"id": "msg_016C2dHZik2Miwe16pRHFe9z",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20241022",
"content": [
{
"type": "text",
"text": "Franklin Lexington Private Markets Fund (FLEX) 是一个新的私募二级基金…… [REDACTED]"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 13848,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"output_tokens": 416
}
}
我不知道这是否是一个线索,但103是否意味着它认为它只总结了103篇帖子,而总共有108篇帖子,所以它需要一个新的总结?
SQL Helper 生成的查询:
-- [params]
-- integer :summary_type = 0
-- integer :max_age_days = 30
-- integer :min_word_count = 100
WITH topic_candidates AS (
SELECT
t.id as topic_id,
t.title,
t.created_at,
t.word_count,
t.highest_post_number,
t.last_posted_at,
ais.id as summary_id,
ais.content_range,
ais.created_at as summary_created_at,
UPPER(ais.content_range) as content_range_upper
FROM topics t
LEFT OUTER JOIN ai_summaries ais ON
t.id = ais.target_id AND
ais.target_type = 'Topic' AND
ais.summary_type = :summary_type
WHERE
-- 字数阈值
t.word_count >= :min_word_count
-- 年龄限制
AND t.updated_at > CURRENT_TIMESTAMP - (:max_age_days || ' DAYS')::INTERVAL
-- 要么不存在摘要,要么需要更新摘要
AND (
ais.id IS NULL OR
(
UPPER(ais.content_range) < t.highest_post_number + 1
AND ais.created_at < (CURRENT_TIMESTAMP - INTERVAL '5 minutes')
)
)
)
SELECT
topic_id,
title,
word_count,
highest_post_number,
created_at,
last_posted_at,
summary_id,
content_range,
summary_created_at,
content_range_upper
FROM topic_candidates
ORDER BY summary_created_at DESC NULLS FIRST, last_posted_at DESC
1 个赞
此主题中有 5 篇隐藏或已删除的帖子。108-103=5。它是否没有正确处理隐藏和已删除的帖子?是的,108 是最高的帖子,但只传入了 103 篇,因此它一直认为有 5 篇新帖子需要总结。
@Falco @sam
1 个赞
我还有另一个主题也在不断地重新生成摘要。该主题没有隐藏或删除的帖子,但被置顶了,这会创建一个帖子“此主题已被全局置顶…”。所以最大帖子是 8,但最后一个帖子实际上并没有传递进来?
sam
(Sam Saffron)
2025 年1 月 14 日 23:42
5
是的,我认为你发现了问题所在 @Roman
best_replies 不能保证包含主题的最后公开帖子。即使在选择 best_replies 时,我们也应该无条件地添加最后一篇帖子。
1 个赞
感谢您的关注。为了弄清其影响,这不仅仅是反复重新生成相同摘要的低效率问题——它会完全阻止回填。假设您设置了每小时回填 24 个主题。每 5 分钟,它会尝试处理 2 个主题。最终,这两个主题都会出现问题——被删除的主题或置顶的主题或其他问题——它会每 5 分钟不断重试相同的 2 个主题。它甚至不会尝试处理任何其他主题。
2 个赞
Sam Saffron:
.where("NOT hidden")
还需要 .where("NOT deleted") 吗?我不明白 hidden 和 deleted 之间的区别,但我的问题主题中既有 hidden 也有 deleted。
Roman
(Roman Rizzi)
2025 年1 月 15 日 15:30
9
嘿 Mark,
我目前正在调查此事,并试图弄清楚发生了什么。@sam 指出的情况属实——best_replies 未包含最后一篇帖子可能会导致作业停滞。我即将完成对此的修复,并引入一个故障保护机制,以便在查询中出现错误时,将作业变成一个空操作并记录错误。这并非理想情况,也不应该发生,但总比一遍又一遍地重新生成相同的摘要要好。
另一方面,我正在查看你分享的 Franklin Lexington... 示例,我怀疑这是另一个问题,因为:
它已经有一个摘要(149)。
UPPER(ais.content_range) < t.highest_post_number + 1 应该是 FALSE。UPPER 应该返回 109,这等于 highest_post_number + 1。
content_range 区间的结束值需要更低,作业才会因此停滞。在决定摘要是否过时时,我们并不真正关心隐藏或删除的帖子;我们只想避免对这些帖子进行摘要。
你是否启用了 ai_summary_gists_enabled?如果是,你能确认该主题有两个摘要吗,一个类型为 0,一个类型为 1?另外,在你分享的 ai_api_audit_logs 查询中,feature_name 列的值是什么?
我会及时向你汇报我的发现。
感谢您对此事的关注。当您的修复程序准备就绪时,我很乐意提供错误日志。
https://meta.discourse.org/t/summarize-gists/340269/3
我不知道如何启用它,所以我不认为它已启用。
Roman Rizzi:
feature_name 列中的值是什么?
“summarize”
它不再为已有摘要的主题重新生成摘要,这很好。
但是,由于以下原因,它没有总结许多主题,即使有新帖子:
Found the problem. It’s comparing ai summary backfill topic max age days to topic.created_at, not updated_at. I think this should be changed to updated_at- I have many very active topics created two years ago which still get new posts every week, but if I use a max age of 90 days or even a year, those topics will not get summarized.
Please consider changing this.
.where("topics.created_at > current_timestamp - INTERVAL '#{max_age_days.to_i} DAY'")
因此,回填认为它已完成,但也许 75% 的最新主题没有摘要,即使它们有新帖子,仅仅因为它们是 90 天前创建的 。我相信这不是预期。请更改它或帮助我理解原因。
Roman Rizzi:
您能否告知我更新网站后情况如何?
我分叉了 ai 存储库,以便我可以将 created_at 更改为 updated_at 并继续进行。我很高兴地报告,它成功地总结了我期望它总结的所有 400 多个主题。一些在第一次回填时失败了,可能是因为我们当分钟的配额超了,但它在第二次回填时成功地总结了它们。
特别是,Franklin Lexington 主题现在有了摘要。
同样,由于 created_at 问题,回填目前对其他人来说效果不佳。
1 个赞
sam
(Sam Saffron)
2025 年1 月 20 日 04:30
15
是的,我同意,我们需要查看 updated_at 或 last_posted_at,这稍微不那么激进。
归根结底,如果我们进行回填,应该基于内容的更改。
2 个赞
如果差异是编辑,我建议在编辑时重新生成。每个主题的第一个帖子都有一个维基,成员们会对其进行维基编辑,其中包含可能影响摘要的关键信息。
但如果你不这样做,我可以继续运行我的分支。
Roman
(Roman Rizzi)
2025 年2 月 4 日 14:51
18
今天早上合并了此内容:
main ← summarization_outdated_logic
opened 08:20PM - 03 Feb 25 UTC
Before this change, a summary was only outdated when new content appeared, for t… opics with "best replies", when the query returned different results. The intent behind this change is to detect when a summary is outdated as a result of an edit.
Additionally, we are changing the backfill candidates query to compare "ai_summary_backfill_topic_max_age_days" against "last_posted_at" instead of "created_at", to catch long-lived, active topics. This was discussed here: https://meta.discourse.org/t/ai-summarization-backfill-is-stuck-keeps-regenerating-the-same-topic/347088/14?u=roman_rizzi
回填作业现在使用 last_posted_at 而不是 created_at。我还更改了逻辑,通过检查任何帖子的 last_revised_at 是否比摘要新来确定摘要是否已过时,以考虑编辑。
4 个赞