Skip to main content

Wei Ji

我不太記得孔子在國文課本裡說了什麼,但是我記得賣油翁的一句:

「但手熟爾」,只是手藝熟練罷了

真正和這句話發生共鳴來自於我高職在練習證照的學科與術科;以及我那算到幾乎快爛掉的基本電學習題的經歷,並且真正發酵是我開始使用 Linux 幾年之後,那幾個原本在學科考古題裡面的指令已經內化成我日常生活的一部分。

程式語言是手段;不是目標,事實是軟體工程師其實經常需要根據需求學習新的語言,原因可能是為了維護舊專案或是針對特定問題的語言特性...等等。不過我認為依然需要選擇一門程式語言當作「母語」,必須是成為肌肉記憶最後帶進棺材的一部分,它可以成為學習其他語言時進行典範 (Paradigm) 參考的基準1

Javascript/Typescript 是我選擇作為「母語」的語言,我會持續學習它的歷史、它的生態、它的語法,當我試著重構一些老專案的時候,我可以看到過去的開發者如何在 Promise 尚未納入規範就開始使用 Promise2;當我試著在 3DS 上建立 Javscript Runtime 3,我窺見了 Node.js 的工具鏈以及 Runtime 和 Engine 的差別...

我決定向賣油翁學習,精練一門手藝這件事甚至早在 ChatGPT 橫空出世以前。前一陣子在公司的壓力之下我被迫嘗試使用 Cursor,然而實際上它非常的不好使,有一些特定的任務我要花大量的時間撰寫提示詞來約束它。

「那是你提示詞下的不好」「你應該要多搭配一些規則」...有些人或許會這樣說,不過我想那些「有些人」的心中沒有賣油翁;它們或許本來就討厭寫程式,寫提示詞對它們而言是一種解放。不過對我而言,與其「節省時間」寫提示詞,「浪費時間」打磨我的手藝,反而才是我認為正確的道路 — 賣油翁的道路。

也不是完全不能用 LLM 寫程式,但是老實說用例十分有限:

  • 如果我不熟悉語言、不熟悉當下的開發主題或領域
    • 我無從驗證 LLM 生成內容的好壞或是有效與否,因此不宜用 LLM。
  • 如果我熟悉語言、當下的開發主題或領域,但是 LLM 很難命中我的預期解法
    • 需要花大量的時間琢磨提示詞,但是同樣的時間我自己寫更快,因此不宜用 LLM。
  • 如果我熟悉語言、當下的開發主題或領域,並且 LLM 很來電,很快就命中我的預期解法。
    • 節省手工開發時間,採用。

Footnotes

  1. 從 Javascript 到 Python 的範式遷移 (Paradigm Migration) | 工程屍 FlyPie 的異想世界. Retrieved 2025-10-06 from https://flyskypie.github.io/blog/2024-06-09_from-javascript-to-python-paradigm-migration/

  2. kriskowal/q: A promise library for JavaScript. Retrieved 2025-10-06 from https://github.com/kriskowal/q

  3. 3DS x Linux x Javascript x Bad Apple | 工程屍 FlyPie 的異想世界. Retrieved 2025-10-06 from https://flyskypie.github.io/blog/2022-12-03_3ds_linux_javascript_bad_apple/

Wei Ji
info

標題主要是描述我的主觀體驗的時序,讀者不需要在意。

RAG (Retrieval-augmented generation)

LLM 除了「幻覺問題」以外,令一個毛病是:LLM 會過期,訓練完成後定型的權重無法包含訓練之後發生的事情或知識,它就像電影「我的失憶女友 (50 First Dates, 2004)」中的角色;一個順行性失憶症患者,時間被凝固並困在某個時間點的人。

並且訓練與微調 LLM 模型的成本十分高昂,而 RAG 的架構是讓 LLM 真正進入實用化的推手,概念很簡單:把最新或正確的資訊跟使用者的疑問句一起放在輸入,經過 LLM 將文字揉捏之後就能得到最新或是正確的回答了。

向量資料庫 (Vector Database)

向量資料庫是 RAG 系統內很重要的一個組件,跟傳統資料庫不一樣的是,傳統資料庫通常仰賴 id 來索引資料,但是向量資料庫則是用一組向量(aka 一堆數字)來索引資料。透過嵌入這個動作(通常由一種不是 LLM 的類神經模型處理),我們可以把一團字變成一團數字,例如:

[一團字] → (嵌入) → [1,2,3...](一團數字)

接著我們可對另外一團字做一樣的事情:

[另外一團字] → (嵌入) → [4,5,6...](另外一團數字)

接著我們就可以計算兩團字的距離:

$$ 距離 = F(一團數字, 另外一團數字) $$

當向量資料庫儲存了一堆字團跟數字,我們拋出一個一團,就能用這團字找到另外一團「最接近」的字。

Agent Coding

透過將 LLM 與 IDE (Integrated Development Environment),人們透過聊天視窗的形式輸入描述,就能看到 LLM 作為「Agent」在 IDE 上揮灑出程式碼,後來甚至衍生出「Vibe Coding」一詞,並刮起了一陣席捲軟體開發產業的旋風。

MCP (Model Context Protocol)

MCP 提供了一套更適合 LLM 呼叫的界面,很多人用「LLM 的 USB」來形容它,人們可以透過 MCP 提供一系列工具給 LLM 呼叫,包含讀取的:讀檔案、讀文件、讀網頁、讀 API...;包含寫入的:新增檔案、編輯檔案、操作 git、操作 SQL 資料庫...

Ask 模式

這些 Agent Tool 除了「Agent 模式」讓 LLM 能夠幫你寫程式以外,通常也有內建「Ask 模式」,也就是鎖定寫入相關的功能,讓人可以「問」關於專案下的問題,不過索引的效果並不是很理想而且容易滿出 LLM 的上下文窗口。

Context7 MCP

最早我是因為公司內部推廣而得知這東西的存在,簡單來說它會告訴 Agent 「這裡有一個 MCP 可以查詢函式庫的用法,你不知道的話可以問我」,適合用來處理較新的軟體開發環境,比如在網頁前端領域尤其有效。

它的運作方式是輸入一個 GitHub 程式庫的連結,它會去拉取、搜尋文件相關的檔案(如:.md,.mdx...)並且壓成一個像是這樣的純文字資料準備給 LLM 使用:

================
CODE SNIPPETS
================
TITLE: Quickstart Cypress Setup with create-next-app
DESCRIPTION: Use `create-next-app` with the `with-cypress` example to bootstrap a new Next.js project with Cypress already configured. This is the fastest way to get started.

SOURCE: https://github.com/vercel/next.js/blob/canary/docs/01-app/02-guides/testing/cypress.mdx#_snippet_0

LANGUAGE: bash
CODE:
\```
npx create-next-app@latest --example with-cypress with-cypress-app
\```

--------------------------------

TITLE: Example `create-next-app` Interactive Prompts
DESCRIPTION: An example of the series of questions asked by the `create-next-app` CLI during the interactive setup process. It covers project naming, language choices, tooling, and directory structure.

SOURCE: https://github.com/vercel/next.js/blob/canary/docs/01-app/01-getting-started/01-installation.mdx#_snippet_2

LANGUAGE: text
...

而 MCP 的作用就是當它被 Agent 呼叫時,就從這份文件抽出一些資訊回傳給 Agent。

我當時就有留意到這個工具並沒有開源而抱有警覺,不出所料,最近打開它的網站時發現已經不能匿名登記新的 Git 程式庫了,必須要登入。

其他替代方案

雖然我不喜歡用 LLM 寫程式1,但是當進入專案時,透過某方式能夠快速掌握專案的情況對我而言確實是一個需求。於是我開始尋找一些類似的方案。

嵌入體系

AnythingLLM 能夠「從 GitHub 匯入程式庫」,不過更接近:瀏覽一個程式庫然後選擇一些檔案進行嵌入(並儲存到向量資料庫),實際上它不像 Context7 有預處理能力。

打包體系

這些工具能夠將給定的 GitHub 程式庫「打包」成單一純文字檔,但是實際上就是黏貼所有程式碼,再加上一點 markdown meta 做修飾,老實說,這種事情 Grunt 或 Gulp 之類的工具也能做。

LLMs.txt

狹義來講 LLMs.txtrobots.txt 的 LLM 版2,也就是介紹網站給 LLM 看的純文本文件。

廣義來講 LLMs.txt 是指各種經過「純文本化」處理;為了要給 LLM 使用的文字檔3,比如: Context7 對外可見的文本或是 Repomix/Gitingest 之類工具生成的檔案。

如果直接使用 LLMs.txt 則很容易超出 LLM 的上下文窗口,要嵌入使用的話反而多了一道切塊 (chunking) 的步驟,可能製造更多問題。

推測 Context7 背後的實作很有可能還是向量函式庫,才能在 MCP 進行檢索的時候抽出相關的資訊塊。

回歸原本 - RAG

反思 LLMs.txt 的問題之後,回過頭來看現在常見的開發架構:

LLM <- Agent Tool -> MCP -> Context7 -> Vector Database

唉,這不就還是 RAG 系統嗎?只是多了一些絢麗的詞彙包裝而已。

2024 年初為了幫公司的專案進行規劃,開始學習 LLM 系統,當時因此認識了 RAG 系統。幾個月後 MCP 橫空出世、Vide Coding 成為顯學;

「當時的寫的計畫已經過時了」老闆說道,

但是問題的本質其實並沒有改變得太多。

Footnotes

  1. 從賣油翁談「人寫程式」與「人寫提示詞讓 LLM 寫程式」的抉擇. Retrieved 2025-10-06 from https://flyskypie.github.io/posts/2025-10-06_oil-seller

  2. The /llms.txt file – llms-txt. Retrieved 2025-10-06 from https://llmstxt.org/

  3. llms.txt. Retrieved 2025-10-06 from https://langchain-ai.github.io/langgraph/llms-txt-overview/

Wei Ji

前情提要

後來我才知道這是某種 bug,LiteLLM 以明碼將資料寫入資料庫後卻試圖用 salt 將資料解密1,在這之前已經花了好幾個好時進行故障排除以及跟 LLM 對話的鬼打牆,十分高血壓。

上週(2025-09-28)折騰了一番還是沒能把 LiteLLM 跟 LangFuse 整合在一起。

本文

透過純參數的方式配置而不是在 GUI 設定 callback,我成功將 LiteLLM 和 LangFuse 整合在一起並且佈署到我的 Homelab 去,並且試著跑了一下 AnythingLLM 觀察一下攔截提示詞的效果,現在整個 LLM 的呼叫鏈如下:

應用程式 → LiteLLM → LangFuse | OpenRouter → DeepInfra → DeepSeek:DeepSeek V3.1 模型

應用程式 (Application)

一般作為 Client 呼叫 OpenAI Compatibility API 的應用程式,雖然我使用 AnythingLLM 實驗,但是也可以是非常簡單的 HTTP Call,例如:

const url = "http://web.litellm.arachne/v1/chat/completions"
const headers = { "Authorization": `Bearer ${env.LLM_GATEWAY_API_KEY}`, "Content-Type": "application/json" }
const payload = {
"model": "deepseek/deepseek-chat-v3.1:free",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "Hello!" }
],
"modalities": ["text"],
}

const response = await fetch(url, {
method: "POST",
headers,
body: JSON.stringify(payload),
});

LLM Gateway

我使用 LiteLLM 作為 LLM Gateway 方案,它的作用是作為一個代理伺服器,隔在應用程式和真正的 LLM API 之間。

有什麼作用?它可以儲存真實的、由第三方服務(例如:OpenAI、Google)提供的 API Key,然後對組織或團隊的其他人分發 Gateway 產生的 API Key,就能分別管理與控制每個人的流量與額度;還有將多個不同的 LLM 來源其中與統一到一個地方管理...等等的好處。

不過就我的目的單純是為了側錄上下文與提示詞,用來分析到底是應用程式的提示詞工程有問題還是 LLM 本身的性能問題。

LLM Observability

就像 Grafana Loki 能夠儲存 Log 並提供可觀測性一樣,不過 LLM Observability 更注重 LLM API 的輸入和輸出,這些紀錄將作為調整 RAG 或微調參數的重要依據。那些「免費使用的 LLM」多數也是在幹這件事,讓哪些免費仔作為幫忙生產資料的工具,所以何不自己在本地就先存一份呢?

OpenRouter

OpenRouter 本身也有 Gateway 的作用,除了它能夠在多個 Provider 之間平衡負載來提高可用性之外,作為一個 LLM API 代理,隔在你和 Provider 之間,發揮類似 VPN 的作用,讓 Provider 更難對使用者進行鎖定。

LLM Provider

OpenAI、Google、Claude 都是所謂的 LLM 供應商,也就是你可以付錢給它們,它們給你 LLM 服務。

DeepInfra 比較不一樣的地方是它只把自己定位在「LLM 基礎設施」。舉例來說,DeepSeek:DeepSeek V3.1 是一個有開放權重的 LLM,你有設備的話大可以下載模型後自己讓 GPU 運行 LLM,只是這樣做的成本可能太高,於是你選擇外包,DeepInfra 就是這樣的存在。

結論

一個 LLM Provider 背後可能有很多模型,而一個 Gateway 背後也可以代理很多 LLM Provider, 模型不應該閉源成為不可取代的存在;LLM Provider 也不應該是獨一無二不可取代的存在,這樣的話會產生供應商鎖定, 多樣性是生命的出路,更是自由的道路,即便這可能是一個花式砸自己腳的道路。

至於那些閉源工具?只要它支援第三方 LLM API,我就用可觀測工具把它的提示詞挖出來瞧瞧。

Footnotes

  1. [Bug]: LangFuse callback failed to config in the LiteLLM Proxy Admin UI Panel · Issue #14854 · BerriAI/litellm. Retrieved 2025-10-01, from https://github.com/BerriAI/litellm/issues/14854

Wei Ji
info

本篇廢文沒什麼敘事結構,單純把週末的一些體驗記下來。

技能樹/科技樹

最近看了一個關於 Factorio 的影片1

但是因為「開源制約」的關係我不能直接玩 Factorio。

Details

標題:開源制約(誓約) 字號:願字 00014 號 級別:動作級願景

主文: 我希望只用開源軟體。

描述: 正如馬克思所批評的,當土地被地主持有、生產要素被企業主持有,就會造成人與人的不平等,從而產生特權階級。然而物質世界的特性就是如此,每個產品背後的生產成本,生產的人或是計畫生產的人期望報酬是天經地義的,但是當我們看向「人類智慧」的時候,走得是另外一種模式;當我們在基本教育中學到「牛頓第二定律」的時候,課本裡面寫的可不是「牛頓 © 第二定律™」,這是因為這些智慧被視為公共財,並且知識傳遞的成本相對於產品要低得多並沒有「這裡有 100 份牛頓第二定律,只有 100 個人可以使用牛頓第二定律」這種事。

軟體公司僱用勞工生產軟體,然後銷售軟體,並且處心積慮的透過各種設計與算計企圖榜定消費者,這是資本主義架構下的常態,無力研發軟體的弱勢經濟體在國際貿易的秩序下只能淪為被壓榨的一方,因為他們為了提高產能的關鍵生產要素只能來自第一世界。

開源軟體在這個架構下開啟新的規則,把「軟體商品」轉換成「人類智慧」,它跟企圖綁架使用者的企業的「惡意」(商用軟體)不同,它是來自第一世界的「善意」、它是第一世界自願獻給全體人類的過剩的產能,開源軟體能夠舒緩人與人的不平等、國際貿易造成的不平等。

我自認生於一個不算富裕的原生家庭,也使用過盜版軟體,但是自從抓住開源的橄欖枝,我認為這是一個即便貧窮也能活得公平、光明磊落的道路。

級別計算:

  • 投入規模:執行開源制約,動作級。
  • 影響規模:影響個人,動作級。
  • 綜合級數:動作級。

那...我把我的 HomeLab 的關聯性做成 Factorio 風格的科技樹好了!找一找還真的有人做過類似的東西:

不過安裝之後沒辦法用 Vite 正常 import,大概是 package.json 格式不支援的關係,畢竟這個專案的主要程式碼已經五年沒更新了。

後來 clone 下來試著自己打一些補丁,跑起來之後發現效果沒有到很好。

前情提要

最近因為工作需求開始玩 LLM,但是有時候 Agent 犯蠢我也不清楚到底是 Model 能力極限還是提示詞工程的鍋,因此我認為有必要來點可觀測性。

後來我只找了 Langfuse ,它確實能夠紀錄 request 和 response,但是它仰賴使用 SDK 作為呼叫其他 LLM API 的封裝。在諸如 Clien 之類的 Agent 工具是沒辦法輕易把 Langfuse SDK 注入進去的,我需要的是能夠作為 Proxy 伺服器擋在工具和 LLM API 之間。

接著我找到了 LiteLLM ,它確實能作為 Proxy 擋在工具和 LLM API 之間,並且支援 OpenAI Compatible 界面(目前 LLM API 的實質產業標準),不過問題是它不能紀錄詳細的 request 資訊,因此我無法得知

LiteLLM x Langfuse

後來我發現可以在 LiteLLM 設定 callback 來整合 Langfuse2,於是週末我就想說來試試看。

但是 LiteLLM 卻一直跟我抱怨:

Error decrypting value for key: LANGFUSE_SECRET_KEY, Did your master_key/salt key change recently? 

但是我甚至沒有設定任何的持久化,LANGFUSE_SECRET_KEY 也是第一次新增,怎麼會有「salt 變動」的問題?

後來我才知道這是某種 bug,LiteLLM 以明碼將資料寫入資料庫後卻試圖用 salt 將資料解密3,在這之前已經花了好幾個好時進行故障排除以及跟 LLM 對話的鬼打牆,十分高血壓。

LLM 會耍蠢 → 試著建立 LLM API 可觀測性 → 遇到問題 → 試著用 LLM 故障排除 → LLM 繼續耍蠢,啊啊啊啊啊 (#╯O皿O)╯┻━┻

替代方案

好,此路不通,換條路總可以了吧?於是我陸續嘗試了這些方案:

Helicone

它有一個「All in one」 Docker 映像檔4

docker pull helicone/helicone-all-in-one:v2025.08.08

然而問題是我的對外網路是無線(行動)網路,Registry 限流機制加上拉取大型映像檔,這種錯誤訊息對我而言是家常便飯:

Error: copying system image from manifest list: writing blob: storing blob to file "/var/tmp/container_images_storage2694550315/6": happened during read: Digest did not match, expected sha256:ceaab54d6be3e54965b66b4b01da68ebc45a6f4efeebb16cad2270a35281db35, got sha256:8aa0a595a4e118e8633d634f1b061f8824856dfbfdef65801198a647dfc00ab1

雖然我還是有方法可以拉取,但是資料進不了我的本地鏡像站,不過那是另外一個故事,總之映像檔過於肥大的方案對我而言不是一個可行方案。

官方文件上除了「All in one」沒有其他資訊了,於是我試著在它的 GitHub 上閒逛找到了:

  migrations:
build:
context: ../
dockerfile: docker/dockerfiles/dockerfile_migrations
jawn:
container_name: helicone-jawn
build:
context: ../
dockerfile: valhalla/dockerfile
web:
container_name: helicone-web
build:
context: ../
dockerfile: docker/dockerfiles/dockerfile_web
worker-openai-proxy:
image: worker-local
build:
context: ../worker
dockerfile: docker/dockerfiles/dockerfile_worker
worker-helicone-api:
image: worker-local
build:
context: ../worker
dockerfile: docker/dockerfiles/dockerfile_worker

沒有預編 image!? (#╯O皿O)╯┻━┻

DockerHub 下的帳號給 K8s 用的 Helm 其實有線索,只是當下我沒想到。

LangWatch

四個映像檔平均 1 GB 多,最大的有 2 GB,下載幾次沒成功就放棄了。

LLM Gateway

下載之後有成功執行,不過問題蠻多的:

  • 沒有內建 OpenRouter
  • 雖然可以透過 Custom Providers 加入,但是 UI 上只能加一個(不確定是不是 bug)
  • 加入、刪除後再加入會撞 ID 而發生錯誤,這應該是 bug
  • 確認可以 Proxy 把 request 打出去,但是沒有留下任何紀錄
    • 設定有 POSTHOG_HOST 之類的參數
    • Logging 有 Google Log API 的資訊
    • 推測可觀測日誌的持久化可能根本不在它的實做之中,需要仰賴外部(非 OSS 商業)服務完成。

Lunary

The Docker setup is available only with Lunary Enterprise Edition5

好喔。

Opik

因為 ghcr.io/comet-ml/opik/opik-guardrails-backend 太肥了,我一直拉不下來就放棄了。

Phoenix

官方文件有謎之 frontendbackend6

  backend:
build:
context: ./backend
dockerfile: Dockerfile
frontend:
build: frontend

這次我有先檢查 Docker Hub 的帳號,沒看到對應的映像檔就先跳過了。

TensorZero

它的設定方式不是很直覺:

# A function defines the task we're tackling (e.g. generating a haiku)...
[functions.generate_haiku]
type = "chat"

# ... and a variant is one of many implementations we can use to tackle it (a choice of prompt, model, etc.).
# Since we only have one variant for this function, the gateway will always use it.
[functions.generate_haiku.variants.gpt_4o_mini]
type = "chat_completion"
model = "openai::gpt-4o-mini"

而且還有不遵守 OpenAI 的奇怪 API:

curl -X POST "http://localhost:3000/inference" \
-H "Content-Type: application/json" \
-d '{
"function_name": "generate_haiku",
"input": {
"messages": [
{
"role": "user",
"content": "Write a haiku about artificial intelligence."
}
]
}
}'

Johnny Decimal

映像檔下載的等待時間,利用時間做點什麼好了。之前已經考慮使用 Johnny Decimal 來結構化硬碟上的資料很久了,來研究一下吧!

於是一邊下載映像檔,一邊跟 LLM 聊,最後生出了這個:

00-09	治理與策略 (Governance & Strategy)	高階決策、目標設定、公司文化與法規遵從。
00 公司治理與章程 (Governance & Charter) 公司章程、股東協議、組織架構文件
01 董事會與會議 (Board & Meetings) 董事會成員名單、會議議程與紀錄、決議事項
02 高階策略與規劃 (Executive Strategy) 年度/長期策略目標、年度業務規劃、執行報告
03 企業風險管理 企業風險管理框架、內部審查報告(非財會專屬)。所有非財會的合規文件應移到 64 法規遵循 (Finance & Legal)。04 應專注於宏觀風險框架(如自然災害、重大系統性風險)。
10-19 核心營運與交付 (Core Operations & Delivery) 產品/服務的生產、交付與維護(含硬體)。
10 標準作業流程 (SOPs & Work Instructions) 各部門的標準作業流程文件、工作指南
11 生產管理 (Production Management) 生產排程、物料需求計畫 (MRP)、產量報告
12 品管與品質保證 (Quality Control & QA) 產品/服務檢驗標準、不合格品報告、ISO認證文件
13 物流與倉儲 (Logistics & Warehousing) 成品出貨單、庫存管理、運輸安排文件
14 設備維護與校準 (Equipment Maint. & Calib.) 廠房或主要生產設備的定期維護紀錄、校準報告
20-29 市場與客戶獲取 (Market & Customer Acquisition) 外部溝通、品牌建立、收入產生、銷售。
20 行銷策略與計畫 (Marketing Strategy & Plans) 年度行銷計畫、預算、品牌指南
21 市場研究與分析 (Market Research & Analysis) 競爭者分析、消費者調研報告、市場趨勢報告
22 內容與素材 (Content & Collateral) 產品型錄、宣傳手冊、網站內容、廣告素材庫
23 銷售營運 (Sales Operations) 銷售預測、績效報告、佣金計畫、銷售工具
24 客戶關係管理 (CRM) 主要客戶檔案、客戶滿意度調查、銷售流程文件
30-39 系統與基礎設施 (IT & Infrastructure) 數位與物理支撐系統、網路、資料庫。
30 基礎設施 (Infrastructure) 伺服器、網路設備、機房配置
31 系統與應用 (Systems & Applications) 內部軟體、ERP、CRM 系統資料
32 服務台與支援 (Helpdesk & Support) 服務請求、故障排除文件、SLA
33 資訊安全 (Information Security) 資安政策、入侵偵測報告、備份計畫
34 IT 專案 (IT Projects) 進行中的重大系統升級、新系統導入文件
40-49 創新與開發 (Innovation & Development) 未來產品/服務的創造與研發。
40 研發策略與專案 (R&D Strategy & Projects) 研發預算、長期技術路線圖、專案啟動文件
41 概念與規格 (Concepts & Specifications) 產品需求文件 (PRD)、設計規範、功能藍圖
42 原型與測試 (Prototypes & Testing) 測試計畫、實驗結果、原型機設計文件
43 智慧財產權 (Intellectual Property - IP) 專利申請文件、商標文件、技術文件保護
44 產品發布與生命週期 (Launch & Lifecycle) 上市計畫、發布後評估、產品退役文件
50-59 供應鏈與外部資源 (Supply Chain & External Resources) 原料採購、供應商關係、庫存管理。
50 供應鏈策略與管理 (SCM Strategy & Mgt) 供應鏈風險評估、長期供應策略
51 供應商管理 (Supplier Management) 供應商合約、績效評估、合格供應商名單
52 直接物料採購 (Direct Material Procurement) 採購訂單 (PO)、詢價文件 (RFQ)、物料規格
53 間接物料採購 (Indirect Material Procurement) 非生產相關耗材、服務採購文件 (如顧問服務)
54 進出口與關務 (Import/Export & Customs) 報關文件、貿易法規、原產地證明
60-69 財務、會計與法務 (Finance, Accounting & Legal) 金流管理、預算、資產、合規性。
60 會計與總帳 (Accounting & General Ledger) 日常交易、科目表、會計政策
61 預算與規劃 (Budgeting & Planning) 年度預算文件、預測模型
62 稅務與審計 (Taxation & Audit) 稅務申報文件、內部/外部審計報告
63 法務與合約 (Legal & Contracts) 法律顧問文件、標準合約模板
64 法規遵循 (Compliance) 產業法規、隱私權政策、政府報告
65 資產與固定資本
70-79 人力資本 (Human Capital) 員工健康、培訓、福利、情感支持。
70 招募與入職 (Recruitment & Onboarding) 職位描述、面試指南、入職文件
71 薪酬與福利 (Payroll & Benefits) 薪資計算、健保/勞保文件、福利計畫
72 員工發展與培訓 (L&D) 培訓課程資料、績效評估文件
73 員工政策與手冊 (Policies & Manuals) 員工手冊、行為準則、請假規則
80-89 衡量與績效 (Measurement & Performance) 績效指標 (KPI) 追蹤、數據分析、反饋機制。
90-99 通用與個人化 (General & Personal) 無法分類的通用文件、個人專屬資料。

還有這個:

10	標準作業流程 (SOPs)	家務 SOP 與規範 (如:洗碗SOP、洗衣指南、緊急處理清單)
11 生產排程 (Production Mgt) 日常排程與執行 (如:每日/週家務排班表、任務追蹤)
12 品管與品質保證 (QC & QA) 服務品質檢查與標準 (如:清潔檢查表、用餐滿意度回饋)
13 物流與倉儲 (Logistics) 庫存與儲存管理 (如:食物、耗材庫存、儲物空間地圖)
14 設備維護與校準 (Equipment Maint.) 硬體維護紀錄 (如:電器保固卡、房屋定期檢查、維修紀錄)
60 會計與總帳 (Accounting & General Ledger) 家庭總帳、月度/年度收支表、交易紀錄。
61 預算與規劃 (Budgeting & Planning) 年度預算、突發基金目標、大額支出規劃。
62 投資組合與計畫 投資帳戶、投資策略、績效紀錄。
63 保險與風險保障 醫療、人壽、財產保險單、理賠文件。
64 稅務與法務文件 年度報稅文件、法律合約、遺囑、授權書。
65 房產與不動產資產 房屋所有權文件、房貸紀錄、物業稅單、租賃合約。
66 動產與淨值計算 車輛、貴重收藏、主要家具清單、家庭淨值計算表。
67 債務與貸款管理 房貸、車貸、其他借款、還款紀錄。
70 成員招募與入職 結婚證書、生育文件、新成員入家(入職)SOP、背景資料。
71 基礎健康管理 家庭病史、預防接種紀錄、體檢報告。
72 情感與心理支持 情感回饋機制 (問卷)、衝突處理SOP、諮詢紀錄。
73 教育與個人發展 學習計畫、課程報名、技能樹追蹤、履歷文件。
74 成員生命週期與檔案 身分證明文件、個人職責總綱、成員離家/離職(如成年獨立、過世)文件。
75 福利與休閒計畫 旅遊規劃、休閒活動清單、年度休假安排。
76 危機與應急準備 急救包清單、緊急聯絡人名單、災害應對計畫。

好像有奇怪的東西混進去了?喔,那又是另外一個關於「公司化家庭」的故事了。

弄著弄覺得我應該要用個表格來處理它,啊,該來在我的 Homelab 上安裝 Office 了。

Web Office

我之前已經試著架設 Collabora Online 了,但是因為它是無頭的伺服器,需要跟 Nextcloud 之類的東西做整合,但是我其實對於這種「All in One」 NAS 類的服務沒有很有興趣,於是就擱置了。

這次來試試 ONLYOFFICE 好了,於是又多了一個肥肥的映像檔要下載。

下載完後發現:

你也沒有頭啊!?(#╯O皿O)╯┻━┻

Footnotes

  1. E X P A N D I N G to THE STARS in Factorio - YouTube. Retrieved 2025-10-01, from https://youtu.be/hYcAsNCH7Zc?si=y-izHtLKDbKaoEqk

  2. Open Source Observability for LiteLLM Proxy - Langfuse. Retrieved 2025-10-01, from https://langfuse.com/integrations/gateways/litellm

  3. [Bug]: LangFuse callback failed to config in the LiteLLM Proxy Admin UI Panel · Issue #14854 · BerriAI/litellm. Retrieved 2025-10-01, from https://github.com/BerriAI/litellm/issues/14854

  4. Docker - Helicone OSS LLM Observability. Retrieved 2025-10-01, from https://docs.helicone.ai/getting-started/self-host/docker

  5. Docker - Lunary API Reference. Retrieved 2025-10-01, from https://docs.lunary.ai/docs/more/self-hosting/docker

  6. Docker | Arize Phoenix. Retrieved 2025-10-01, from https://arize.com/docs/phoenix/self-hosting/deployment-options/docker

Wei Ji

LLM 生成文件的能力似乎被不少工程師視作「自動補全文件」的解方,畢竟很多工程師都很懶得寫文件,但是我認為「作為 LLM context input 的文件」跟「給人類閱讀的文件」應該嚴格區分,因為 LLM 能夠很輕易的產生或更新大量的文件,但是人類的認知負荷容量並不會因此提昇,每個人能夠處理的資訊量依然是固定的,大量的甚至可能灌水的生成式內容反而會大幅度的消耗人類的處理量能並且提高認知負荷。

即便機械手臂在製造業能夠造成產能的提昇,實際上工廠依然是嚴格分離機械手臂和人類的工作區以免發生事故,只有特殊處理的「協作型機械手臂」能夠和人類直接處於同一個空間工作,這些協作型機械手臂透過特別的反饋來避免傷害工作人員。我認為 LLM 應該也有相同的問題,只是由比較不明顯的「精神傷害」取代傳統的「物理傷害」,因此不應該讓 LLM 的生成式內容「直接侵害人類的工作空間」。

Wei Ji

拖鞋普遍給人的觀感都是隨便、不正式。我其實也這麼認為,不過我試著從反向的角度看這件事。

台灣是四面環海的熱帶/副熱帶氣候,潮濕而且炎熱,硬要套上那種「西裝領帶」來自較為寒冷乾燥地區的文化似乎有點莫名其妙。

有些動物會築巢,巢穴的本質是「溫暖的小窩」,相對於「險惡的自然環境」的淨土,而「家」就是人類的巢穴,更有「家是最後的堡壘」這麼一個概念,是美國人習以為常的概念。私以為台灣以治安良好而聞名,人與人相處的距離十分的近,「家以外是險惡的自然環境」的概念幾乎從台灣人的腦中消失,那麼在「自己的巢穴穿著不那麼有保護機能的拖鞋」似乎也顯得沒這麼奇怪了。

※封面圖是 AI 生成的,沒有任何人類受到跟拍,提示詞在這裡

Wei Ji

最近在開發公司產品的 IAM,然後我覺得就像:

ReBAC 這個 ACM 似乎算是相對新興的模型,中文資料沒有很多。

名詞解釋

  • ACM (Access Control Model)
  • RBAC (Role-Based Access Control)
  • ABAC (Attribute-Based Access Control)
  • PBAC (Policy-Based Access Control)
  • ReBAC (Relationship-Based Access Control)
  • ACL (Access Control List)
  • IAM (Identity and Access Management)

Wei Ji

「根據 GDPR,你有權將數位足跡從我國的監控系統中消除,並且你提交的申請已經由賽博管理司通過核准。但是根據我國的交互觀測基本法,你在我國停留期間的所有記憶將會被消除,接下來我們將根據交互觀測施行細則第二十條對你執行記憶消除術。」

「道理很簡單,你不想被觀測,那你也不能觀測我們,彼此彼此。」

※關於人工消除記憶的科幻設定可以見:記憶裂痕 Paycheck (2003)

Wei Ji

仔細想想,目前的婚姻制度跟現代人價值觀或生活習慣有點脫節了吧? 應該立法建立不同的契約強度,例如: 婚姻 Education,婚姻 Trial,婚姻 Pro,婚姻 Enterprise(?)

Wei Ji

醫院的領藥等待區有一些桌椅,桌子上貼著「禁止飲食」。然後我剛剛看到有個人坐在那邊打開流質食物的罐頭倒進管子開始進食(?)

問:他有違反「禁止飲食」嗎?