feat(collector): workers-ai 路改吃共用契約——免金鑰預設路的卡跟 BYOK 一樣完整(Arcrun#134)
InkStoneCo#44 ④ 只修了 gemma BYOK 路(JSON 契約+wikishape 機械組卡), 免金鑰預設路(多數用戶實際走的)仍吃雲端舊 prompt 的舊格式卡 ⇒ 走預設路 拿到次級知識庫。 修法=契約單一真相源:wikiExtractPrompt(原 gemmaPrompt 改名,因為它已是 兩條路共用)由 daemon 整段帶上雲(request prompt 欄位),雲端只當執行器回 模型原文(response output),解析(parseWikiExtractJSON)與組卡(BuildWikiDoc) 回到本 package 與 gemma 路同一段程式碼——同形不再靠「兩邊要一起改」的叮嚀。 版本歪斜兩向都有路:舊雲端忽略 prompt 回 card ⇒ fallback 走 legacy 落卡 (#60 前綴/不覆蓋保護原封不動,收端 lint 新舊雙軌);舊 daemon 不帶 prompt ⇒ 雲端 legacy 行為不變(對向修法在 Arcrun work/extract-wiki-json-0815)。 測試:+2——①request 的 prompt 必須是 wikiExtractPrompt 本人(不是手抄第二份) ②同原稿+同判斷走兩條路,.wiki/ 產物逐位元組相同(卡+00-INDEX+manifest)。 既有兩則(stub 回 card)自動變成舊雲端 fallback 的守衛。go test ./... 全綠。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+8
-3
@@ -27,12 +27,17 @@ const defaultLLMModel = "gemma-4-31b-it"
|
||||
|
||||
var gemmaHTTP = &http.Client{Timeout: 120 * time.Second}
|
||||
|
||||
// gemmaPrompt 組出「文件卡+N 張原子概念卡」的結構化萃取指令(InkStoneCo#44 ④)。
|
||||
// wikiExtractPrompt 組出「文件卡+N 張原子概念卡」的結構化萃取指令(InkStoneCo#44 ④)。
|
||||
//
|
||||
// 🔴 這是**全部萃取路共用的唯一一份**提示詞(Arcrun#134 起原名 gemmaPrompt 改此名):
|
||||
// gemma 路自己打 Gemini 用它;workers-ai 路把它整段帶去雲端(`prompt` 欄位)給
|
||||
// env.AI 跑。契約(提示詞+parseWikiExtractJSON+BuildWikiDoc)同住本 package
|
||||
// ⇒ 兩條路的卡片形狀由同一份程式碼保證,不再靠「兩邊要一起改」的叮嚀。
|
||||
//
|
||||
// 🔴 分工:模型只回 JSON(判斷),格式與落點全由 wikishape.go 機械組裝——
|
||||
// 模型不寫 markdown、不決定檔名、不碰路徑。Luhmann ②(一卡一概念)在**萃取端**做,
|
||||
// 否則 place_card 只會一直回 orphan(規範待裁 6 的裁定理由)。
|
||||
func gemmaPrompt(pageName, content string) string {
|
||||
func wikiExtractPrompt(pageName, content string) string {
|
||||
return `你是知識整理員。讀完原稿後,把它整理成「一份文件的總覽+N 個原子概念」。只輸出一個 JSON 物件,不要任何說明、markdown 圍欄或思考過程。
|
||||
|
||||
規則(違反任何一條都算失敗):
|
||||
@@ -109,7 +114,7 @@ func ExtractWithGemma(apiKey, model, absRoot, relPath string) ([]string, error)
|
||||
|
||||
reqBody, _ := json.Marshal(map[string]any{
|
||||
"contents": []map[string]any{
|
||||
{"parts": []map[string]any{{"text": gemmaPrompt(pageName, srcText)}}},
|
||||
{"parts": []map[string]any{{"text": wikiExtractPrompt(pageName, srcText)}}},
|
||||
},
|
||||
"generationConfig": map[string]any{"temperature": 0.2, "maxOutputTokens": 8192},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user