20260922 會議記錄

:::info

上週待辦

移至 https://github.com/orgs/cofacts/projects/12 追蹤:

url-resolver

https://github.com/cofacts/url-resolver/pull/74

cofacts.ai

125s timeout issue

https://github.com/cofacts/kb/blob/main/src/meetings/2026/20260914.md#1-network-errorllm-%E5%91%BC%E5%8F%AB%E5%9C%A8-125-%E7%A7%92%E8%A2%AB%E7%A1%AC%E7%A0%8D

@mrorz:關於 network error,調查出來了 —— AI 助手在查證資料時(呼叫 Google 搜尋/讀取網頁階段)有時連續 100 多秒沒有回應傳到瀏覽器端,而 Cloudflare 預設在 125 秒沒收到資料就自動斷線,導致對話被默默中斷、前端只顯示「連線錯誤」。修法:伺服器在等待查證結果時每 20 秒主動送心跳訊號維持連線,已寫測試並驗證,PR:https://github.com/cofacts/ai/pull/145

結論:目前沒有再看到 125s timeout 的問題。

修復部署時間:PR #145 於 09/17 20:02 UTC merge,透過 GCE rumors-deploy-cofacts-ai-1 container log 確認實際 restart/上線時間是 09/17 20:08 UTC(跟第一筆 Langfuse trace 時間吻合)。

結果對比: | 期間 | GENERATION spans | 125s/0-token 訊號 | | ——————————- | —————- | —————– | | 修復前(9/1–9/13,PR 引用數據) | 357 | 30(~8.4%) | | 修復前夕(9/15–9/17 20:08) | 133 | 0 | | 修復後(9/17 20:08–9/22) | 71 | 0 |

修復後最長的成功呼叫跑到 161.7 秒都沒被砍斷(過去這種長度一定會在 125s 附近被切),跟 heartbeat 生效的預期行為一致。也檢查過同期間沒有任何 level=ERROR 的 observation。

要注意的限制:修復上線後 5 天內,production 只有 3 筆真實對話 trace(9/17 晚上、9/18、9/21 各一筆;9/19、9/20、9/22 目前都還沒有流量),樣本量偏薄。統計上如果舊的 ~8% 發生率沒變,71 次呼叫全部沒中的機率只有 ~0.3%,所以這個結果有意義,但建議等流量多一點後再確認一次比較保險。

New data sources / data subagents

Follow up of https://github.com/cofacts/kb/pull/10 ‘s 專業能力 subagent

Related article issue

@老鶴:回報一則臉書 reel 查核案例,結果誤連結到「智心樂學苑」及「AI·智慧共享專案」詐騙網站,附 session 連結供 debug

發生了什麼

session ad213c61-… = trace 4cf56228…(9/11 04:45)

文章本身抓對了。 get_single_cofacts_article({"article_id": "39xxtbmws59px"}) 回傳的 article.text 就是老鶴那則 FB 連結 https://www.facebook.com/share/r/1DKq8u7eWj/?mibextid=wwXIfr,attachmentUrl: null。

問題出在同一包回傳裡的 relatedArticles(tools.py:90,relatedArticles(first: 10))。totalCount: 333,前幾名長這樣:

score id text
475.2 2m6wqpc68t5jy 智心樂學苑仁輝督導是投資詐騙…以「AI‧智慧共享專案」名義詐騙民眾
475.2 1yccnacsk2swu 不要使用5G網路&石墨烯 / 5G的陰謀📡…
355.3 1wuvio9iluho4 Gillsee 嘖嘖募資問卷
237.6 14ikn74382v0p https://www.facebook.com/share/r/1HycXWYWzZ/…
237.6 321j8s2lysubn https://www.facebook.com/share/r/1SDhksx7T8/…

這份 relatedArticles 是純噪音:

原因就是這篇文章的 text 只有一個網址,沒有內容可比對,相似度搜尋就吐出任意高分結果。

然後 writer 把 relatedArticles[0] 當成了查核對象。 04:45:17 第一次呼叫 investigator 時,request 裡已經帶著「智心樂學苑」「仁輝督導」——在任何搜尋發生之前。最終 draft 整篇在講假投資詐騙,references 第一條就是 https://cofacts.tw/article/2m6wqpc68t5jy。

加重因素:04:45:09 verifier 第一次想去看那支影片就掛了(ValueError: Tool 'google:browse:urls' not found — 模型幻覺工具名),而 hyperlinks[].summary 只有 FB 登入牆的樣板文字。agent 對影片內容是零資訊,這個真空就被 relatedArticles[0] 填滿了。

資料來源與抽樣方式

1️⃣ 理想情境出現頻率:真的近似重複 + 已有回應

理想:已有回應的 related article 可以協助 AI 更快回應,不用從頭搜尋

2️⃣ Writer 有沒有真的重用既有回應?

讀完全部 44 筆,沒有任何一筆在最終 draft_factcheck_response 的 references 裡引用相關文章本身或其回應——每次都是重新從外部新聞/政府網站/查核中心獨立查證。

結論:理想情境發生率 ~9%,但實際被重用的比例 ~0%。

3️⃣ 影響估算(Harm rate)
4️⃣ score 能不能當篩選依據?
5️⃣ 退化情境是否可以事先辨識?
建議(分兩部分)
A. 讓 ~9% 的理想情境真的發揮作用:教 AI 去查 related article

在 get_single_cofacts_article 的 docstring / hint in JSON response /writer 的 prompt 裡加一句指示:若判斷 relatedArticles 某節點與本文章是同一則訊息且已有回應(factCheckCount > 0),應該用該節點的 id 再呼叫一次 get_single_cofacts_article,把它當主文章查一次,換取完整、帶 reference、可以 cite_as 的版本,再決定是否直接沿用或需要補充驗證。

純 prompt 層改動,不需要動 GraphQL query。

B. 跑偏案例(實測發生率很低,~0.4%,但有結構性暴露):加防護

雖然目前只抓到你原本回報的那一個真實案例,但同一組「誘餌」文章在至少 6 篇不同的裸網址文章裡都排到前幾名,代表這不是單一運氣問題,是裸網址/爬蟲失敗這個情境下相似度搜尋本身就不可靠。防護要點:

  1. 防護點放在查詢文章本身內容是否可信,不是 relatedArticles 的 score:article.text 是空的或裸網址、且爬到的 hyperlinks[].summary 也是空的/登入牆樣板文字時,該次呼叫直接不回傳 relatedArticles(或只回傳 id+score,拿掉 text/factCheckResponses),等文章本身的真實內容(影片/圖片/連結)被其他方式解析出來後才提供。
  2. 不要把 score 當跨查詢的信心門檻——已證實同一組不相關文章對不同查詢可以拿到幾乎相同的高分,且不相關配對的最高分還超過真近似重複的最高分。score 只能在同一次查詢的 10 筆候選裡做相對排序。
  3. docstring 加一句防呆提醒:relatedArticles 裡的實體/主張,若在文章自己的 text/hyperlinks/attachmentUrl 裡找不到對應佐證,不應該被當成本文章已確認的事實去查證。

這兩部分互不衝突、也互相獨立——A 是要讓工具「真的有用」,B 是要讓工具「不會出事」,可以分開排優先序或分開驗收。

[!Note] 開票:待在 cofacts/ai 建立 issue(本次 session 因 repo 權限限制尚未建立,待補) 好像不常出現,priority 不高

Langfuse v4 upgrade

[!Note] 下週

追蹤票:devops#23

Cofacts article classifier

[!Note] 下週

https://github.com/cofacts/kb/pull/29

小聚籌備

場地想法摘要 — 板橋中心(下次小聚同場地)

[!Note] 下週

來源: 20260811 籌備、20260818 小聚檢討


我先前錯誤地把 6 月的青職基地場次當成「上次」,已用 8/16 板橋中心的正確資料替換。之前給你的 GitHub/Discord 週報(09-14~09-21)部分是正確的、不受影響,若需要我可以重新整併成一份完整貼文。

Scientist update

上週重點整理(2026-09-14 ~ 2026-09-21)

GitHub 活動

cofacts/ai

cofacts/cofacts-ai-eval

cofacts/takedowns

cofacts/devops

cofacts/kb

cofacts/rumors-api

Discord 重點討論

dev

@yutin:https://github.com/cofacts/rumors-api/pull/400 修改完成

Cofacts 正式環境狀態報告(2026-09-15 ~ 2026-09-22)

一、GCE 主機(cofacts-prod)每日資源使用率

日期 CPU (min|avg|p95|max) Mem (min|avg|p95|max) Swap (min|avg|p95|max)
09-15 13.00% | 20.01% | 26.63% | 43.68% 64.77% | 67.80% | 70.34% | 74.83% 43.38% | 46.47% | 48.77% | 49.83%
09-16 10.04% | 18.86% | 24.90% | 43.74% 64.59% | 67.43% | 69.63% | 73.07% 44.75% | 46.86% | 48.62% | 49.99%
09-17 11.34% | 18.98% | 27.92% | 41.22% 63.94% | 68.00% | 70.47% | 71.28% 41.81% | 45.98% | 48.41% | 49.86%
09-18 11.79% | 17.44% | 23.84% | 45.71% 65.09% | 67.65% | 70.00% | 71.84% 42.00% | 45.00% | 47.77% | 48.13%
09-19 9.94% | 16.16% | 23.20% | 41.97% 63.91% | 67.16% | 69.56% | 70.60% 45.75% | 47.91% | 49.82% | 50.60%
09-20 10.04% | 19.27% | 26.59% | 39.54% 64.35% | 67.27% | 69.60% | 71.92% 45.66% | 48.03% | 50.00% | 55.38%
09-21 10.53% | 18.60% | 24.62% | 39.28% 64.31% | 67.32% | 69.21% | 51.51% 46.35% | 47.84% | 50.69% | 51.51%

即時狀態(查詢當下):Load average 0.72/0.66/0.74(138 天未重啟);記憶體 31GB 中已用 21GB、可用 9.7GB;Swap 4GB 中已用 2.0GB;磁碟使用 70%(47G/67G)。

觀察:CPU、Mem、Swap 一週內都非常穩定,沒有異常尖峰或趨勢性上升,屬正常運作範圍。Swap 平均維持在 45-48%,這與 Elasticsearch 常駐佔用約 19.2GB(占總記憶體 62%)有關,屬長期已知型態,非本週新增異常。

二、Cloud Run 服務清單

11 個服務全數正常運作(✔),近期部署者皆為 rumors-site-deployment 服務帳號,最近一次部署為 cofacts-ai(09-17)。

三、Cloud Run CPU/Memory 使用率(p50 = 正常範圍,p95/p99 = 穩定性觀察)

服務 CPU 正常範圍 (p50) CPU 尖峰 (p99 峰值) Mem 正常範圍 (p50) Mem 尖峰 (p99 峰值) 備註
site-tw 0.05–0.14 1.01(滿載) 0.76–0.81 1.01(滿載) p99 CPU/Mem 連續多日卡在 ~101%,疑似觸及配置上限,建議留意尖峰時段是否有節流(throttling)
site-staging-tw — 0.28 0.68–0.84 0.93 穩定
site-staging-en — 0.29 0.59–0.81 0.87 09-19 起才有資料,穩定
line-bot-ja 0.005–0.02 0.46 0.39–0.42 0.67 09-20 有一次 CPU/Mem 同步尖峰
line-bot-en 0.007–0.01 0.36 0.38–0.40 0.43 穩定
cofacts-ai 0.015 0.36 0.06 0.10 資源用量低且穩定

觀察與建議:site-tw 是唯一 CPU/記憶體 p99 貼齊 1.0(100%配置上限)的服務,且連續四天(09-18~09-21)數值完全相同,代表尖峰時段可能持續被節流。建議後續追蹤該服務的請求延遲是否受影響,必要時提高 CPU/記憶體配置。

四、GCE 主機 Process 層級 Top 資源消耗者

Process CPU 穩定性(相對值) Mem 平均/峰值 備註
Elasticsearch (java) 最高,日均降低趨勢(09-15→09-21 CPU avg 由高降低,09-20 有尖峰) 平均 ~19.2GB / 峰值 19.8GB 常駐最大宗記憶體用戶,與上週(09-01~09-09,平均 ~19.2GB)持平,無異常成長
node /srv/www/server.js 中等,標準差 ~2-3.6萬 平均 343-375MB / 峰值 992MB 峰值較上週(最高 1.45GB)明顯下降
node /srv/www/build/index.js 中等,標準差穩定 平均 143-148MB / 峰值 811MB 與上週相近
cloudflared tunnel 低,穩定 — 穩定
dockerd 低,穩定 — 穩定
Chromium (puppeteer 截圖用) 短暫尖峰,單次執行 峰值 290-411MB(單次) 屬預期的短生命週期截圖行程,非常駐

跨週比較:與上週(09-01~09-09)相比,Elasticsearch 及 node server.js 的 CPU/記憶體峰值都略為下降,整體資源用量呈穩定或微幅改善,沒有發現持續成長的資源消耗趨勢。

總結

本週(09-15~09-22)GCE 主機與 Cloud Run 服務整體運作穩定,沒有明顯異常。唯一值得留意的是 site-tw Cloud Run 服務 CPU/記憶體 p99 連續多日貼齊配置上限(~101%),建議後續觀察尖峰時段是否有節流影響使用者體驗。