20261020 會議記錄
[!Note]
上週待辦
- cofacts.ai session 週報:GGM 手動貼到 #collab;MrOrz 準備 DC bot 之後自動化
- site-tw 10/13 改為 1GB RAM 後,觀察 cost / latency
10/7 開始好像有幾台 site-tw 卡在 CPU 100% 一直關不掉 直到我重新 deploy 才釋放
- Vector search:MrOrz 提供生出 staging 實測 artifact 的 prompt 給 Yutin –> Opened thread in Discord
- 登入牆:把 hyperlink validity dataset 的研究結果 report 補回 rumors-api#409(之後有興趣的人可接手)
- AI category:把實驗 report 存下來補回相關 issue 或 kb design doc(kb#29);方向為 Jev + 修改 category description、confidence 先抓 0.75
- MozFest(10/28~10/31)booth 易拉展輸出
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_contentcallback,另外實作了「把 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
- captures writer 和 verifier 會看到的、經過這些 callback 處理的東西
Vector search
Yutin
- Vector search:Yutin 把 rumors-api#407 的 e2e test case 搬去 #411
- Vector search:先用 B(search result 前綴)+ test merge #411
- Vector search:Yutin 用 production 備份資料 restore 在 local 測搜尋效果(需 re-embed)
- https://github.com/cofacts/opendata/blob/master/CONTRIBUTING.md#restore-production-backup-from-cofacts-google-cloud-storage-bucket
- Vector search:Yutin 研究 fact checking prefix 的用途,再決定 ListReplies 是否加 fact checking 搜尋選項
cofacts.ai
cofacts 網站改寫與分工
分工範圍:
- AI 相關 https://github.com/orgs/cofacts/projects/12
- 網站相關 https://github.com/cofacts/kb/pull/31
目前進度 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
- #162(Claude on Vertex AI)、#163(升級 ADK 2)(10/17 提及;#163 為從 #162 拆出的 ADK 升級 PR)
@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>
結論: 把 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:
- 分 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 操作指令,以利未來備份使用
- 升級 ADK (https://github.com/cofacts/ai/pull/163 review & merge)
- 試著升級到 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
- url resolution: make https://github.com/cofacts/ai/pull/118 and 123 ready for review
- storybook: review and merge https://github.com/cofacts/ai/pull/126
- /report: make https://github.com/cofacts/ai/pull/138 and 139 ready for review
- 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
- #118 Pre-fetch verifier URLs via url-resolver to stop source hallucination(open,10/14 多輪 review,等大家 review)
- #149 Collapse the verifier’s no-signal fetch outcomes; restructure the pre-fetch ADR(opened / closed 2026-10-14)
- #150 ci(adk): pin Python 3.12 so uv stops picking 3.15(opened / closed 2026-10-14)
- #151 Carry Cofacts’ archived copies to the verifier inside its request(opened / closed 2026-10-14)
- #152 List the checked URL in sources; keep storage and config failures local(opened / closed 2026-10-14)
- #153 Pre-fetch only URLs the writer wrote; move the URL cap into the callback(opened / closed 2026-10-14)
- #154 Storybook on the official @storybook/tanstack-react framework(opened 2026-10-14)
- #155 Stop telling the verifier [RESOLVED PAGE] is always the body text(opened & closed 2026-10-14)
cofacts/rumors-api
- #407 fix(search): make hybrid kNN search work against Elasticsearch(closed 2026-10-13)
- #411 Hybrid search follow-up: union instead of filter, versioned embedding cache, task prefixes(closed 後 reopened 2026-10-13)
- #410 Add hyperlink validity dataset & decision experiment for #409(討論中,10/13–10/14)
- #406 fix(ListArticles): guard attachmentHash scripts against docs without a value(closed 2026-10-14)
cofacts/rumors-line-bot
- release/20261013(released 2026-10-13)
cofacts/url-resolver
- #74 Improve Facebook URL resolution and Threads metadata handling(review 中,2026-10-13)
cofacts/cofacts-ai-eval
- #21 Publish October 13 weekly usage review(opened / closed 2026-10-13)
cofacts/takedowns
- #366 Takedown spam user 咖喱 外送茶TG:funy62(opened 10/13,closed 10/14)
- #348 Takedown spam user 高風亮節的五股山迪(closed 2026-10-14)
cofacts/kb
- #36 summarize artifact contents in 20261006 meeting notes(opened / closed 2026-10-13)
- #37 publish kb with GitHub Pages(opened / closed 2026-10-13)
- #38 add 20261013 meeting notes(opened / closed 2026-10-14)
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/天。
重點觀察與建議
- 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,是這週最高,推測是部署當天的暖機。建議確認這是否為預期的改善。
- cofacts-ai 的 CPU p50 較上週上升,從 0.016 到 0.040,10/14 的輸出流量也有一次 62 MB 的尖峰,10/19 18:30(UTC)又有新部署。整體用量仍很低,沒有風險,但可以留意部署後的趨勢。
- site-tw 的 Mem p95 / p99 接近 1 GiB,與 staging 站相近,建議確認 Cloud Run 的記憶體上限是否仍有餘裕。
- Elasticsearch 佔記憶體約 19 GB,Swap 長期維持在 35% 左右,這屬於穩定的基線,不是新問題。如果之後要降低 Swap,要從 ES heap 或 chromium 的數量著手。
- 其他尖峰:10/19 的 ES CPU 和 rumors-api RSS 尖峰,以及 10/17 的 Swap 尖峰,都已自行回落。若想查原因,可以對照當日 log。
- 本週沒有任何服務出現持續性異常,磁碟使用率 53% 也還很充裕。
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 填的布林值。reasoning_extraction)擋下 5 個案例,改寫重播說明(資訊不變)後才跑完。由 Claude Opus 評審(每案例獨立子代理,A/B/C 盲評,5 項標準各 1–5 分、滿分 25)評分,另請 Gemini(Argon)作第二位評審。w01–w07、c01、c02 的 grader notes 描述了 Gemini 當時的做法,所以不算真正盲評;c03–c09 是真正盲評。kmt.org.tw/2021/06/blog-post_23.html,Claude 兩者都只送真實網址。cache_control、不串流、不吃 thinking 設定,遇到 gs:// 圖片會丟 NotImplementedError,上線前要處理,否則 caching 估算不成立、圖片訊息跑不動。@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:
- 分 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 操作指令,以利未來備份使用
- 升級 ADK (https://github.com/cofacts/ai/pull/163 review & merge)
- 試著升級到 haiku
- preview 環境感受一下 haiku 的智慧
- 確定 Vertex AI 的 haiku 是不是真的不行讀 gs:// file
@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)已處理完畢。
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
- url resolution: make https://github.com/cofacts/ai/pull/118 and 123 ready for review
- storybook: review and merge https://github.com/cofacts/ai/pull/126
- /report: make https://github.com/cofacts/ai/pull/138 and 139 ready for review
- 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
- #118 Pre-fetch verifier URLs via url-resolver to stop source hallucination(open,10/14 多輪 review,等大家 review)
- #149 Collapse the verifier’s no-signal fetch outcomes; restructure the pre-fetch ADR(opened / closed 2026-10-14)
- #150 ci(adk): pin Python 3.12 so uv stops picking 3.15(opened / closed 2026-10-14)
- #151 Carry Cofacts’ archived copies to the verifier inside its request(opened / closed 2026-10-14)
- #152 List the checked URL in sources; keep storage and config failures local(opened / closed 2026-10-14)
- #153 Pre-fetch only URLs the writer wrote; move the URL cap into the callback(opened / closed 2026-10-14)
- #154 Storybook on the official @storybook/tanstack-react framework(opened 2026-10-14)
- #155 Stop telling the verifier [RESOLVED PAGE] is always the body text(opened & closed 2026-10-14)
cofacts/rumors-api
- #407 fix(search): make hybrid kNN search work against Elasticsearch(closed 2026-10-13)
- #411 Hybrid search follow-up: union instead of filter, versioned embedding cache, task prefixes(closed 後 reopened 2026-10-13)
- #410 Add hyperlink validity dataset & decision experiment for #409(討論中,10/13–10/14)
- #406 fix(ListArticles): guard attachmentHash scripts against docs without a value(closed 2026-10-14)
cofacts/rumors-line-bot
- release/20261013(released 2026-10-13)
cofacts/url-resolver
- #74 Improve Facebook URL resolution and Threads metadata handling(review 中,2026-10-13)
cofacts/cofacts-ai-eval
- #21 Publish October 13 weekly usage review(opened / closed 2026-10-13)
cofacts/takedowns
- #366 Takedown spam user 咖喱 外送茶TG:funy62(opened 10/13,closed 10/14)
- #348 Takedown spam user 高風亮節的五股山迪(closed 2026-10-14)
cofacts/kb
- #36 summarize artifact contents in 20261006 meeting notes(opened / closed 2026-10-13)
- #37 publish kb with GitHub Pages(opened / closed 2026-10-13)
- #38 add 20261013 meeting notes(opened / closed 2026-10-14)
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/天。
重點觀察與建議
- 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,是這週最高,推測是部署當天的暖機。建議確認這是否為預期的改善。
- cofacts-ai 的 CPU p50 較上週上升,從 0.016 到 0.040,10/14 的輸出流量也有一次 62 MB 的尖峰,10/19 18:30(UTC)又有新部署。整體用量仍很低,沒有風險,但可以留意部署後的趨勢。
- site-tw 的 Mem p95 / p99 接近 1 GiB,與 staging 站相近,建議確認 Cloud Run 的記憶體上限是否仍有餘裕。
- Elasticsearch 佔記憶體約 19 GB,Swap 長期維持在 35% 左右,這屬於穩定的基線,不是新問題。如果之後要降低 Swap,要從 ES heap 或 chromium 的數量著手。
- 其他尖峰:10/19 的 ES CPU 和 rumors-api RSS 尖峰,以及 10/17 的 Swap 尖峰,都已自行回落。若想查原因,可以對照當日 log。
- 本週沒有任何服務出現持續性異常,磁碟使用率 53% 也還很充裕。
原始 HTML 存檔:artifacts/20261020-MkCyx4YhkfD8Y28Qu14qWT.html(Mermaid 圖需連線 runtime,離線只會顯示原始碼)
references 3,252 個 URL 中 41.2% 命中中文列表、英文列表 13.2%、合計 44.0%;765 份草稿中 588 份至少一個出處命中。investigator 搜尋結果命中 39.8%(合計 41.9%)、verifier 讀過的頁面 44.4%(合計 46.2%)。claim_sources 以維基頁為佐證;239 筆 references 指向 zh/en/ja 維基。WP:CIRCULAR:維基評級「通常不可靠」,應引條目背後的原始出處。google_search + append_grounding_sources)與 verifier(url_context + append_url_context_sources)都以 AgentTool 回傳 {content, sources:[title,url]},經 writer 的 _normalized_response。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 失敗或逾時退回不加提示。after_tool_callback 呼叫 rater(結構不動,但 Langfuse 要手動加 span);D 由 verifier 在報告中依主張判斷評級(不增加模型呼叫,verifier 手上有主張原文與頁面內容;但須把「是否支持」與「來源可信度」分開輸出,否則有支持但來源弱的主張會被打 ✗;investigator 階段沒提示;覆蓋率取決於 writer 是否真的呼叫 verifier);E check_source_reliability(urls) 工具由 writer 決定何時查;F draft_factcheck_response 送出時硬性檢查(例如 claim_sources 指向維基就退回)。action=raw 慢速抓取,正式同步需固定主機與帶聯絡資訊的 User-Agent)、怎麼驗證效果(用歷史 trace 建 Langfuse dataset)。決定後依專案慣例寫決策紀錄(docs/decisions/)。- 命中度: 中文列表涵蓋約 41% 的草稿出處,英文 WP:RSP 只再多約 3 個百分點。
- 維基引用: 影響最大的是 23% 的草稿引用了維基百科本身,而維基把自己評為「通常不可靠」。
- 依主題分評級: 約一半的命中是「依主題分評級」的媒體(中時、聯合、自由等),差異集中在政治報導,所以不能只看基準評級。
- A: 在 investigator / verifier 後接便宜模型(rater),補上評級提示;
- B + F: 離線寫好提示、用現有 callback 查表附上,再加上草稿送出時擋下維基引用;
- D + F: 由 verifier 依主張判斷評級,並把「是否支持」和「來源可信度」分開輸出。
會議要決定的是採用哪個方向、主題判斷交給誰做,以及評級資料怎麼同步。
[!Note] 先放 ai 的 issue 放進 ndx 追蹤
@mrorz:10/7 開始好像有幾台 site-tw 卡在 CPU 100% 一直關不掉,直到我重新 deploy 才釋放 @Alfred chen:有其他的 logs 嗎?
@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 月最後一週的會議時間,下週討論分工。
min | avg | p95 | max,單位 %。node /srv/www/server.js(rumors-api)node /srv/www/build/index.jspython main.py(cofacts-ai)