20261020 會議記錄

[!Note]

上週待辦

url-resolver

nonumpa

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

cofacts.ai <> url-resolver

@mrorz(10/14):cofacts.ai 把 url-resolver 整合進去的 PR 也可以 review 了(#118、preview 環境設定 #123),放了三個月。#118 核心是新增的 inject_resolved_url_content callback,另外實作了「把 cofacts 過去爬的 hyperlinks 當 fallback」與「本 session 爬過的不再重爬」,所以改到 30 多個檔案;PR description 與 ADR 有說明。🙏

PR stack https://github.com/cofacts/ai/pull/118

Verifier round trip https://github.com/cofacts/ai/blob/370d41c1a0284eb3a6ea081a6231604e86034425/adk/cofacts_ai/tests/test_verifier_round_trip.py

Yutin

cofacts.ai

cofacts 網站改寫與分工

分工範圍:

目前進度 Track 0: PR stack of https://github.com/cofacts/ai/pull/154

@mrorz(10/14):AI 的 storybook PR 開囉(https://github.com/cofacts/ai/pull/154),Preview/staging/production build 出來的 storybook 會放在 /storybook/。因為現在 component 都是 vibe coded,story 只是示意,之後做打底時會全部換掉。

[!Note] TODO 大家在 Discord cofacts.ai #dev:

  • 認領與協調分工
  • 對 design doc 提問

如果 Track 0 有問題 –> 直接發 PR review comment

私訊:

  • 附約相關資訊
  • 預計時程

GGM’s report

GGM

升級 Writer 與 ADK

@mrorz(10/17):做了小研究,把 Writer 換成 Haiku 5.5 或 Sonnet 看會不會讓 cofacts.ai 變聰明( https://claude.ai/artifact/QJ9NBq9yfvyqUkHdunonaY?sk=7ypZaZb1DTAZQxZ-hiU1nA )。答案好像會:Langfuse 倒讚中不少是 writer 模型判斷錯誤;Opus 與 Gemini 盲測,Haiku 分數常比 Gemini 好。但實驗是用 Claude Code subagent,不是真的放進 ADK,harness prompt 也有影響。請 @GGM 用更精確的方式評估換模型。選舉期間會有很多可疑訊息,希望系統能聰明些。

Artifact 內容摘要:Writer 換模型實驗(2026-10-16)</summary>

原始 HTML 存檔:artifacts/20261020-QJ9NBq9yfvyqUkHdunonaY.html

結論: 把 cofacts.ai 的 writer 從 Gemini 3 Flash 換成 Claude Sonnet 5.5 或 Haiku 5.5,在正式環境曾出錯的決策點上不會重犯當時的錯,整體以 Sonnet 最好。這值得做一次跑完整流程的正式 A/B(用 cofacts/ai#143 的評測);出處必須可追溯到工具輸出的程式檢查(cofacts/ai#144、#118)仍然要做。

緣由(Langfuse user-thumbs,production,2026-08-01~10-16): 共 178 筆評分,130 讚、46 倒讚。倒讚比例:8 月 27%(23/86)、9 月 36%(18/50)、10 月 12%(5/42)。倒讚原因(可複選):沒抓到重點 11、回應文字與出處不符 9、提供不存在的出處 8、出處摘要錯誤 8、出處不足 7、篇幅過長 6、資訊錯誤或過時 6。約 33 個倒讚 trace 的根因分類:A(gate 只相信 writer 自己填的 verifier_confirmed 旗標)約 18、B(模型依格式自己拼網址)約 14、D(回合中斷,多為 #145 前的 Cloudflare 125 秒逾時,已修)約 13、E(範圍或脈絡錯誤)約 7、C(真實網址配錯主張)約 5、F(來源政策)約 3。34 份最終草稿全部把主張設為 verifier_confirmed=true,其中 21 份引用 verifier 沒讀過的網址,13 份引用了任何工具輸出都沒出現過的網址(共 23 個,全是模型自己做的)。draft_factcheck_response 的 claim_sources 檢查(adk/cofacts_ai/tools.py)只看 writer 填的布林值。

方法: 7 個失敗案例(w01–w07,正式環境 writer 出錯的決策點)+9 個對照組(c01–c09,使用者按讚的決策點;c03–c09 由約 25 份按讚草稿中通過客觀出處檢查者挑出)。從 Langfuse 還原 writer 當時的完整輸入,用 Claude Code 子代理重播給 Haiku 與 Sonnet;Claude 看不到圖片(只有佔位文字與 OCR)。Sonnet 5.5 的安全分類器(reasoning_extraction)擋下 5 個案例,改寫重播說明(資訊不變)後才跑完。由 Claude Opus 評審(每案例獨立子代理,A/B/C 盲評,5 項標準各 1–5 分、滿分 25)評分,另請 Gemini(Argon)作第二位評審。w01–w07、c01、c02 的 grader notes 描述了 Gemini 當時的做法,所以不算真正盲評;c03–c09 是真正盲評。

結果:

  • Claude Opus 評審:16 個案例中 Sonnet 第一 15 次(含 c01 與 Haiku 並列),唯一例外是 w05 由 Haiku 第一;Gemini 14 個排最後,c05、c06 排第二。9 個對照組 Sonnet 全部第一,Gemini 7 個最後。
  • Gemini(Argon)評審:7 個失敗案例排名與 Claude 評審完全相同;整體也是 Sonnet 最好(第一 12 次、Haiku 4、Gemini 2)。但對照組 Sonnet 領先幅度小很多(平均 Gemini/Haiku/Sonnet = 21.0/22.6/24.3;Claude 評審是 16.3/21.0/23.9)。16 案例中 10 個排名相同,不同的 6 個都是對照組(c02–c06、c09)。Gemini 評審整體給分較高,加分最多的是 Gemini(可能是同家族偏好或尺度不同,資料分不出)。
  • 失敗案例中 Sonnet 與 Haiku 都沒有重犯當時的錯(編網址、把 ✗ 主張換網址標 confirmed、verifier 失敗時不告知使用者)。例:w01 國旅補助,Gemini 把 verifier 判 ✗ 的「25 人門檻」改掛到未驗證的 AttFile PDF 並標 confirmed,Claude 兩者都改為先重送 verifier;w02 國民黨疫苗圖卡,Gemini 引用自己拼出來的 kmt.org.tw/2021/06/blog-post_23.html,Claude 兩者都只送真實網址。
  • 唯一部分重犯的是 w06(兩者都沒完全排除一起轉傳的訊息);w04 Haiku 沒注意到原文網址缺失但沒編造。
  • Haiku 在 16 個案例中有 4 個給使用者的文字全是英文(w03、w07、c04、c06),c06 還有無法解析的函式呼叫 JSON;若用 Haiku,system prompt 需明確的語言指示。Sonnet 沒有語言問題,弱點多是小問題(文字偏長、w04 在給 investigator 的提示中寫了錯的頂級網域、c09 在已確認主張裡加了沒驗證的細節)。
  • 附帶發現:篩 25 份使用者按讚的草稿,約 15 份沒通過客觀出處檢查(把 verifier ✗ 的主張改標已確認、把流傳貼文本身當證據、數字未驗證),代表使用者按讚不代表出處可靠,支持在程式層級檢查出處可追溯性(#144)。

成本估算(Langfuse 30 天實際 token:writer 780 次呼叫、125 個回合;Claude 中文 token 倍率 1.0–1.6 未實測): writer 每 30 天 Gemini 3 Flash 10.67 美元;Sonnet 5.5(假設有 prompt caching)47.5–76.1;Haiku 5.5 6.6–11.3。全部 agent 每 30 天:現況 38.14;Sonnet 約 75–104;Haiku 約 34–39(推算)。ADK 1.26 的 Claude adapter 目前不設 cache_control、不串流、不吃 thinking 設定,遇到 gs:// 圖片會丟 NotImplementedError,上線前要處理,否則 caching 估算不成立、圖片訊息跑不動。

風險: Sonnet 5.5 分類器在實驗包裝下大量誤擋,上線前要在真實 writer 流量上確認;Vertex 沒有伺服器端 fallback,需在客戶端做 fallback。

限制: 選樣偏差(7 個是特地挑 Gemini 出錯的決策點;c03–c09 只留下通過檢查的按讚輸出,對 Gemini 有利)、只測單一決策步驟而非完整流程、每案例只跑一次、Claude 看不到圖片、執行環境是 Claude Code 子代理而非正式 API 呼叫、兩位評審都是模型且可能偏好自家模型、Gemini 評審在同一段對話評完所有項目,案例間可能互相影響。

建議: writer 換 Sonnet 值得做完整流程的 A/B(cofacts/ai#143),評分用不同家族評審或加人工抽查;cofacts/ai#144 與 #118 仍要做。

</details>

@mrorz(10/17):換成 Vertex AI 上的 claude 模型似乎需要升級 ADK 2,升級有 DB migration,且一跑就直接 migrate?preview 與 production 共用同一個 session database,不敢按 preview。應拆兩個 PR:升級 ADK(#163)、升級 model(#162)。Preview 環境別亂按,按下去 production DB 會壞掉。 @nonumpa:自己在雲端開了機器,migrate 完也接了 haiku,可加入其 tailscale network 看。agent 說升級風險小(多建一個 index、每個新 event 多寫一個 node_info key),但升級後不能直接 rollback,要刪 node_info key 才不會壞。 @mrorz:請 nonumpa(或其 agent)產一份升級 SOP。 @nonumpa(10/18):照建議把 stg/preview 與 prod 拆成兩個資料庫就不用這麼緊張;SOP 在 https://github.com/cofacts/ai/blob/docs/adk2-upgrade-sop/docs/adk2-upgrade-sop.md @mrorz(10/18):同一個 instance 多個 db 不用多花錢,好;若優先處理 #163,直接改 GitHub secret DATABASE_URL。另外 production 實際是 cd.yml push image 後在 GCE 用 rumors-deploy 的 docker-compose 部署,DATABASE_URL 由 docker-compose 處理,SOP 中這段顧慮不需要(nonumpa 同意)。 @mrorz(10/18):#162 為了 Claude on Vertex AI 把附件都濾掉了,但沒讀過文件,不確定 Claude on Vertex AI 是不是真的不能吃檔案。

[!Note] MrOrz:

  1. 分 DB + trigger migration
    • https://github.com/cofacts/ai/blob/docs/adk2-upgrade-sop/docs/adk2-upgrade-sop.md 停在 branch 裡
    • 文件裡 --offload 不用開
    • devops 或 docs 底下紀錄 staging DB 和 prod DB 分家這件事,以及相關 DB 操作指令,以利未來備份使用
  2. 升級 ADK (https://github.com/cofacts/ai/pull/163 review & merge)
  3. 試著升級到 haiku
    • preview 環境感受一下 haiku 的智慧
    • 確定 Vertex AI 的 haiku 是不是真的不行讀 gs:// file

url-resolver 和 DB 網路隔離

@mrorz(10/18):SSRF comment( https://github.com/cofacts/ai/pull/118#discussion_r4302203316 )查完發現有點大條:目前 production 上 url-resolver 和 elasticsearch 在同一個 network,導致 url-resolver 能直接存取不設防的 ES,攻擊者可誘使它去抓 http://db:9200/<文件>;現行 cofacts 系統就有此風險。另一則 comment(discussion_r4306678131)已處理完畢。

  • https://github.com/cofacts/rumors-deploy/pull/46/changes
  • https://github.com/cofacts/devops/pull/26/changes

出處品質過濾

Cofacts.ai 出處品質:接入維基百科來源評級(報告:https://claude.ai/artifact/MkCyx4YhkfD8Y28Qu14qWT )

Artifact 內容摘要:維基來源評級命中評估(資料期間 2026-05-13~10-13)</summary>

原始 HTML 存檔:artifacts/20261020-MkCyx4YhkfD8Y28Qu14qWT.html(Mermaid 圖需連線 runtime,離線只會顯示原始碼)

結論: 中文維基《來源評級/列表》(363 筆)約命中四成的 cofacts.ai 出處;英文 WP:RSP 只再多 2–3 個百分點。影響最大的是維基百科本身(23% 草稿引用維基,而兩個列表都評為「通常不可靠」);約一半命中落在「依主題分評級」的條目,分歧點多是政治報導,所以工具不能只回傳基準評級,要回傳摘要讓模型依主題判斷。writer 已會避開「應停用」來源(入選率 5%),評級對這類的邊際效果不大。

第一部分:研究(資料取自 Langfuse TOOL observation)

  • 命中度:草稿 references 3,252 個 URL 中 41.2% 命中中文列表、英文列表 13.2%、合計 44.0%;765 份草稿中 588 份至少一個出處命中。investigator 搜尋結果命中 39.8%(合計 41.9%)、verifier 讀過的頁面 44.4%(合計 46.2%)。
  • 維基引用:176/765 份草稿(23%)引用維基;193 個 claim_sources 以維基頁為佐證;239 筆 references 指向 zh/en/ja 維基。WP:CIRCULAR:維基評級「通常不可靠」,應引條目背後的原始出處。
  • 依主題評級(363 筆中 86 筆):聯合報系基準半可靠(政治半可靠、其他通常可靠、udn 部落格通常不可靠;草稿引用 103);旺旺中時基準半可靠(政治通常不可靠;58);自由時報基準半可靠(報導自家事務通常不可靠;159);精鏡傳媒(48);三立電視基準「應替代」(27);Google/YouTube 屬用戶生成內容(35);中央社通常可靠、留意親執政黨傾向(70);公視通常可靠(84)。
  • 候選到入選草稿的比例:英文獨有通常可靠 35.3%、中文通常可靠 26.5%、未列政府網站 26.5%、查核組織 23.2%、學術 19.5%、中文半可靠 18.4%、通常不可靠 16.9%(多為維基、FB、YouTube)、應替代 12.0%、轉載平台 6.3%、應停用 5.0%。評級真正的增量在:維基(239)、中時/聯合/三立政治報導(188)、Facebook/YouTube(71)、中國官媒與大紀元系(17)。
  • 未被列表涵蓋的約 56%:政府網站 18.9%、查核組織 4.7%、學術 2.8%、轉載平台 1.8%、其他未列 27.9%(Taipei Times、Focus Taiwan、上報等)。WP:RSP 沒列代表沒被討論過,不代表不可靠;政府/查核/學術需另訂規則(如比照 WP:MEDRS),轉載平台要先追到原始媒體。
  • 英文 WP:RSP(497 筆):獨有命中僅 2.8%(通常可靠 1.8%:Guardian、Reuters、SCMP、海峽時報、Al Jazeera、JAMA),優先順序可放後面。
  • 研究面待決:維基出處怎麼處理(提示/要求改引原始出處/送出時擋下)、如何區分「佐證」與「說法的出處」(FB、YouTube、官媒常是被查核對象)、未列來源備援規則、要不要接英文列表。

第二部分:技術討論(ADK 1.26.0)

  • 現況:investigator(google_search + append_grounding_sources)與 verifier(url_context + append_url_context_sources)都以 AgentTool 回傳 {content, sources:[title,url]},經 writer 的 _normalized_response。
  • 提案 A:包成 SequentialAgent,後接便宜模型 source_rater,替 sources 補 rating_hint。before_agent_callback 先做網域比對:investigator 呼叫 69% 命中依主題評級條目需要 rater,31% 可略過(13% 沒命中、18% 單一評級);verifier 為 52%/48%;評級摘要中位數約 700 字(p90 約 1,700 字,verifier 約 270 字)。ADK 注意事項:AgentTool 取最後有內容的 event,故最後一步必須輸出完整 {content, sources}(含 _search_widget_html);rater 不能設 output_schema(會沿 sub_agents[-1] 驗證),改用提示要求 JSON 並寬鬆解析;before_agent_callback 回傳 Content 可略過該 agent;子 session 的 state_delta 會流回 writer session,中間 key 加 temp: 前綴(AgentTool 間轉發行為尚未實測);SequentialAgent 要沿用 investigator/verifier 名稱,內層 LlmAgent 改名;investigator 的 [SYSTEM] 重試字串與 verifier 無 grounding 的原始文字,rater 原樣放行;若用 Haiku 5.5 要加 anthropic[vertex] 依賴、Model Garden 啟用,且 instrumentation.py 的 usage 對應是依 Gemini 寫的,Langfuse 計價要另確認;rater 失敗或逾時退回不加提示。
  • 其他做法:B 離線把每個條目摘要壓成「主題→評級→一句提示」,由現有兩個 callback 查表附上(延遲零、最好測,但 writer 要自己對照主題、context 變長);C 在 writer after_tool_callback 呼叫 rater(結構不動,但 Langfuse 要手動加 span);D 由 verifier 在報告中依主張判斷評級(不增加模型呼叫,verifier 手上有主張原文與頁面內容;但須把「是否支持」與「來源可信度」分開輸出,否則有支持但來源弱的主張會被打 ✗;investigator 階段沒提示;覆蓋率取決於 writer 是否真的呼叫 verifier);E check_source_reliability(urls) 工具由 writer 決定何時查;F draft_factcheck_response 送出時硬性檢查(例如 claim_sources 指向維基就退回)。
  • 建議路線:先做 B + F(B 的離線提示也是 A/C 需要的資料,F 直接處理量最大的維基引用),上線後用 Langfuse 觀察「草稿引用維基比例」與「政治類主張只靠政治報導通常不可靠來源佐證的比例」;若 writer 常套錯主題再升級 A 或 C。另一條路線是 D + F(investigator 階段可用 B 的查表附簡短提示)。
  • 技術面待決:評級在哪一段加入(A/B/C/分階段)、依主題判斷由誰做(rater/writer/verifier)、rater 用哪個模型(Haiku 5.5 或輕量 Gemini)、評級資料放哪裡與如何每週同步(Wikimedia 對雲端 IP 的 MediaWiki API 會回 429,這次改用 action=raw 慢速抓取,正式同步需固定主機與帶聯絡資訊的 User-Agent)、怎麼驗證效果(用歷史 trace 建 Langfuse dataset)。決定後依專案慣例寫決策紀錄(docs/decisions/)。
  • 方法限制:中文列表只缺「看中國」(被限流);網址比對採網域或子網域;入選率以同 trace 內 URL 完全比對,換網址形式會被算成未入選。

</details>

  • 原委: writer 挑出處目前只靠模型自己判斷。中文維基《來源評級/列表》有 363 個來源的社群共識評級,想評估能否用它提示 writer 哪些出處適合作為佐證。
  • 研究: 比對近五個月的 Langfuse trace,結果如下:
    • 命中度: 中文列表涵蓋約 41% 的草稿出處,英文 WP:RSP 只再多約 3 個百分點。
    • 維基引用: 影響最大的是 23% 的草稿引用了維基百科本身,而維基把自己評為「通常不可靠」。
    • 依主題分評級: 約一半的命中是「依主題分評級」的媒體(中時、聯合、自由等),差異集中在政治報導,所以不能只看基準評級。
  • 提案: 有三個方向待討論:
    • A: 在 investigator / verifier 後接便宜模型(rater),補上評級提示;
    • B + F: 離線寫好提示、用現有 callback 查表附上,再加上草稿送出時擋下維基引用;
    • D + F: 由 verifier 依主張判斷評級,並把「是否支持」和「來源可信度」分開輸出。

    會議要決定的是採用哪個方向、主題判斷交給誰做,以及評級資料怎麼同步。

[!Note] 先放 ai 的 issue 放進 ndx 追蹤

MrOrz’s TODOs

  1. url resolution: make https://github.com/cofacts/ai/pull/118 and 123 ready for review
  2. storybook: review and merge https://github.com/cofacts/ai/pull/126
  3. /report: make https://github.com/cofacts/ai/pull/138 and 139 ready for review
  4. plan for 分工, create foundation PRs

MozFest & next meeting

  • 2026/10/28~2026/10/31
  • 10/27(二)8pm (TPE) 線上 (tentative)

上週重點整理(2026-10-13 ~ 2026-10-20)

GitHub 活動

cofacts/ai

cofacts/rumors-api

cofacts/rumors-line-bot

cofacts/url-resolver

cofacts/cofacts-ai-eval

cofacts/takedowns

cofacts/kb

Discord 重點討論

general

@mrorz:10/7 開始好像有幾台 site-tw 卡在 CPU 100% 一直關不掉,直到我重新 deploy 才釋放 @Alfred chen:有其他的 logs 嗎?

dev

@mrorz(10/13):(對 Yutin)我看到你的新 PR 了,目前我的方向會是關掉我的,但把測試方式移植到你的 PR。今晚有機會上線討論嗎~ @yutin:晚上 8pm 會上線

@mrorz(10/14):幫 10/13 會議的 “Vector search:MrOrz 提供生出 staging 實測 artifact 的 prompt 給 Yutin” 開個討論串 @mrorz(10/19):明晚 8pm 會議會講 cofacts.ai 整體架構(https://github.com/cofacts/kb/pull/31/changes,已與最新設計稿 in sync,技術細節還在調整)。文件中 Track 0 基礎建設已開 PR stack:ready for review 的可以開始看;draft 的方向正確、可進 preview 環境看感覺,但技術細節尚未細雕。明天先看範圍、問問題,並喬 10 月最後一週的會議時間,下週討論分工。

Cofacts 正式環境狀態報告(2026-10-13 ~ 2026-10-20)

1. GCE(cofacts-prod)整機指標

格式為 min | avg | p95 | max,單位 %。

日期 CPU Mem Swap
10-13 12.5 | 18.3 | 23.5 | 43.9 62.3 | 65.1 | 67.2 | 68.0 32.8 | 34.8 | 37.1 | 39.3
10-14 11.5 | 19.9 | 28.9 | 51.7 62.2 | 65.4 | 67.8 | 71.3 33.6 | 35.1 | 37.1 | 38.3
10-15 10.6 | 18.3 | 24.4 | 46.1 61.9 | 65.1 | 67.2 | 72.2 34.7 | 35.8 | 37.3 | 38.4
10-16 10.5 | 18.1 | 25.4 | 33.8 61.5 | 64.6 | 66.8 | 68.1 35.4 | 36.4 | 38.5 | 40.4
10-17 9.4 | 16.3 | 21.9 | 35.3 61.5 | 64.2 | 66.4 | 68.2 35.0 | 37.6 | 42.0 | 45.3
10-18 7.4 | 14.5 | 21.9 | 26.5 61.3 | 63.9 | 66.1 | 67.5 30.4 | 35.4 | 38.6 | 39.5
10-19 7.9 | 17.6 | 27.7 | 44.3 61.4 | 64.3 | 67.2 | 69.6 35.1 | 36.1 | 38.5 | 41.4
10-20* 9.8 | 15.3 | 20.6 | 25.5 61.6 | 63.6 | 65.1 | 65.7 34.6 | 35.7 | 36.9 | 37.7

*10/20 為部分資料。

目前即時狀態:

  • 主機已連續運行 166 天,load 為 0.38 / 1.06 / 1.09。
  • 記憶體 31Gi,已用 20Gi,可用 11Gi。
  • Swap 4Gi,已用 1.7Gi。
  • 磁碟 53%(35G / 67G)。

整體很平穩。CPU 平均約 15–20%,Mem 約 64–65%,Swap 約 35–37%。10/17 Swap 的 p95 和 max 稍高,分別是 42% 和 45%,之後回落。

2. GCE 主要 process

Normal Range 取每日平均,Stddev 當作穩定度指標。

Process 常態範圍 穩定度 與上週相比 / 觀察
Elasticsearch(RSS) 約 19.2 GB,峰值 19.5 GB 極穩(std ≈ 114 MB) 與上週(19.24 GB)持平,沒有洩漏跡象。它佔了整機記憶體的大宗。
Elasticsearch(CPU) 日均約 25 萬(上週 33 萬) 10/19 波動大(std 10.9 萬,峰值 51.6 萬) 整體下降約 24%。10/19 有一次尖峰,建議確認是否為 reindex 或批次查詢。
node /srv/www/server.js(rumors-api) RSS 約 338 MB(上週 362 MB) RSS std 約 128 MB,偏波動 10/19 RSS 峰值達 1.4 GB,10/14 CPU 峰值 43.7 萬。兩者都是短暫尖峰,之後回落。
node /srv/www/build/index.js RSS 約 149 MB,CPU 日均約 11.8 萬(上週 14.0 萬) 穩定 RSS 峰值 799 MB 屬偶發。
cloudflared CPU 日均約 2.2 萬(上週 2.7 萬) 穩定 下降,與流量降低一致。
chromium(renderer / browser) 每個 renderer RSS 約 100–320 MB CPU std 高,屬 bursty 數量多、壽命短,屬正常現象。
python main.py(cofacts-ai) CPU 日均約 3.8 千,峰值 2.3 萬 穩定 與上週持平。
dockerd CPU 日均約 8.4 千 穩定 無異常。

CPU 欄位的絕對數值單位不直觀,所以我只比較相對變化。

3. Cloud Run

11 個服務狀態都是 ✔(正常)。近期部署:

  • cofacts-ai:10/19 18:30(UTC)。
  • line-bot-tw、line-bot-en、line-bot-ja:10/13。
  • site-tw:10/13。
  • dev-line-bot:10/07。
  • site-en、site-ja:4/09 後未再更新。
  • site-staging-*:8/17。

「Normal Range」取 p50,穩定度看 p95 / p99。CPU 單位為 vCPU,Mem 單位為 GiB。

服務 CPU p50 CPU p95(週均) CPU p99 max Mem p50 Mem p95(週均) Mem p99 max 觀察
site-tw 0.033(上週 0.137) 0.40 0.95 0.50(上週 0.80) 0.95 1.01 見下方重點 1
site-staging-tw 0.007 0.145 0.39 0.79 0.90 1.01 記憶體偏高但穩定
site-staging-en 0.006 0.139 0.38 0.74 0.87 0.98 同上
site-staging-ja 0.006 0.144 0.36 0.74 0.83 0.90 同上
line-bot-tw / en / ja 0.006–0.008 0.11–0.16 0.12–0.35 約 0.40 約 0.42–0.44 0.42–0.46 很穩
cofacts-ai 0.040(上週 0.016) 0.21 0.31 0.057 0.07 0.09 見下方重點 2

輸出流量(GB/天):

  • site-tw:4.9、4.76、4.61、4.51、4.44、3.84、4.02,10/20 為 1.35(部分資料)。
  • 其他服務全部低於 0.1 GB/天。

重點觀察與建議

  1. site-tw 的 CPU 和記憶體 p50 比上週明顯下降。 CPU p50 從 0.137 降到 0.033,Mem p50 從 0.80 降到 0.50 GiB。輸出流量也從 4.9 GB 逐日降到約 4.0 GB。這可能和 10/13 的 site-tw 重新部署有關。10/13 的 CPU p95 為 0.87,是這週最高,推測是部署當天的暖機。建議確認這是否為預期的改善。
  2. cofacts-ai 的 CPU p50 較上週上升,從 0.016 到 0.040,10/14 的輸出流量也有一次 62 MB 的尖峰,10/19 18:30(UTC)又有新部署。整體用量仍很低,沒有風險,但可以留意部署後的趨勢。
  3. site-tw 的 Mem p95 / p99 接近 1 GiB,與 staging 站相近,建議確認 Cloud Run 的記憶體上限是否仍有餘裕。
  4. Elasticsearch 佔記憶體約 19 GB,Swap 長期維持在 35% 左右,這屬於穩定的基線,不是新問題。如果之後要降低 Swap,要從 ES heap 或 chromium 的數量著手。
  5. 其他尖峰:10/19 的 ES CPU 和 rumors-api RSS 尖峰,以及 10/17 的 Swap 尖峰,都已自行回落。若想查原因,可以對照當日 log。
  6. 本週沒有任何服務出現持續性異常,磁碟使用率 53% 也還很充裕。