作補(bǔ)全:短補(bǔ)全與靈感長(zhǎng)補(bǔ)全的實(shí)現(xiàn)原理、觸發(fā)策略與配置指南)
人工智能AI Agent自主智能體桌面應(yīng)用MCP Clients【免費(fèi)下載鏈接】KunLocal-first AI agent workspace for coding, writing, design, research, and automation — one runtime for desktop GUI and TUI.項(xiàng)目地址https://gitcode.com/gh_mirrors/de/Kun點(diǎn)擊查看免費(fèi)下載本文圍繞 Kun 項(xiàng)目中 Work 辦公模式文本寫(xiě)作場(chǎng)景的雙模式補(bǔ)全方案展開(kāi)它將原本單一路徑的 ghost text幽靈文本拆分為心流狀態(tài)下的「短補(bǔ)全」short與停頓思考時(shí)的「靈感長(zhǎng)補(bǔ)全」long兩者共享編輯器上下文與服務(wù)端請(qǐng)求鏈路但各自擁有獨(dú)立的觸發(fā)條件、prompt、token 預(yù)算與質(zhì)量過(guò)濾規(guī)則。讀完本文你將掌握兩種模式的判定邏輯、雙計(jì)時(shí)器調(diào)度機(jī)制、本地候選評(píng)分過(guò)濾原理、與 RAG 檢索的關(guān)系以及設(shè)置頁(yè)中每一項(xiàng)參數(shù)的默認(rèn)值與源碼出處能夠在實(shí)際部署與調(diào)參時(shí)做到有的放矢。為什么要拆成兩套補(bǔ)全策略寫(xiě)作補(bǔ)全天然存在兩個(gè)互相沖突的目標(biāo)心流輸入時(shí)用戶(hù)正在快速敲字需要的是低延遲、短、準(zhǔn)、不打擾的補(bǔ)全最好就像「下一串鍵入」。停頓思考時(shí)用戶(hù)停住筆頭等待靈感需要的是更完整的下一句或下一段幫助接住即將溜走的思路。如果只用一套策略會(huì)出現(xiàn)兩類(lèi)典型問(wèn)題觸發(fā)太積極長(zhǎng)補(bǔ)全打斷正在輸入的節(jié)奏用戶(hù)被迫頻繁按 Esc。觸發(fā)太保守用戶(hù)真正停住時(shí)只給一兩個(gè)詞缺少啟發(fā)價(jià)值。因此當(dāng)前自動(dòng)觸發(fā)的 ghost text 路徑被拆成short與long兩個(gè) mode它們共享編輯器上下文和同一套 IPC/service 請(qǐng)求鏈路但使用不同的觸發(fā)條件、prompt、token 預(yù)算和質(zhì)量過(guò)濾。同一套 IPC/service 還包含面向選區(qū)編輯的手動(dòng)editmode其行為由獨(dú)立的 inline edit 鏈路承載詳見(jiàn) docs/WRITE_INLINE_EDIT_RAG.zh-CN.md英文版見(jiàn) docs/WRITE_INLINE_EDIT_RAG.en.md。總體架構(gòu)雙模式補(bǔ)全的整體數(shù)據(jù)流如下核心實(shí)現(xiàn)分布在前端渲染進(jìn)程與主進(jìn)程兩層層次文件職責(zé)渲染進(jìn)程codemirror.tsCodeMirror 插件雙計(jì)時(shí)器、請(qǐng)求調(diào)度、ghost text 渲染、Tab/Esc 鍵綁定渲染進(jìn)程policy.ts短/長(zhǎng)補(bǔ)全的觸發(fā)判定函數(shù)渲染進(jìn)程prompt.ts構(gòu)造發(fā)往主進(jìn)程的補(bǔ)全請(qǐng)求 payload含 policy、signals渲染進(jìn)程feedback.ts候選質(zhì)量評(píng)分、邊界歸一化與拒絕決策渲染進(jìn)程context.ts從 CodeMirror state 抽取窗口化上下文與 Markdown 結(jié)構(gòu)信號(hào)主進(jìn)程write-inline-completion-service.tsservice 入口聚合主進(jìn)程write-inline-completion-request.tsFIM/chat completions 路由、token 預(yù)算、RAG 檢索、超時(shí)與 debug 記錄主進(jìn)程write-inline-completion-prompt.tsprompt/chat messages 構(gòu)建與響應(yīng)清洗共享write-inline-completion.ts模式、請(qǐng)求與結(jié)果類(lèi)型定義模式定義與請(qǐng)求協(xié)議模式類(lèi)型定義在 write-inline-completion.ts 中export type WriteInlineCompletionMode short | long | edit補(bǔ)全請(qǐng)求會(huì)攜帶{ mode?: short | long | edit }未傳 mode 時(shí)默認(rèn)視為short這一兼容邏輯在渲染進(jìn)程的buildInlineCompletionPayloadoptions.mode ?? short與主進(jìn)程的resolveMode見(jiàn) write-inline-completion-prompt.ts中雙重實(shí)現(xiàn)保證舊調(diào)用路徑不受影響。edit復(fù)用同一請(qǐng)求類(lèi)型僅用于顯式 inline replacement本文重點(diǎn)說(shuō)明兩個(gè)自動(dòng) ghost text 模式。請(qǐng)求體WriteInlineCompletionRequest除mode外還包含豐富的結(jié)構(gòu)化字段值得逐項(xiàng)了解prefix/suffix光標(biāo)前后窗口化文本服務(wù)端 FIM 引擎直接使用cursor光標(biāo)所在行號(hào)與列號(hào)context.signals一組布爾信號(hào)包括list、quote、heading、table、atLineEnd、endsWithSentencePunctuation、previousLineEndsWithSentencePunctuation、prefersNewLineCompletion、paragraphBreakOpportunity它們是觸發(fā)判定與 prompt 注入的核心依據(jù)policy由name、instruction、acceptanceCriteria、rejectionCriteria組成的策略對(duì)象隨請(qǐng)求注入模型editCandidate/recentEditsinline edit 模式使用的可編輯范圍與最近編輯歷史model可選的模型覆蓋。這些信號(hào)在渲染進(jìn)程由 context.ts 從 CodeMirror state 計(jì)算得出。值得注意的實(shí)現(xiàn)細(xì)節(jié)是上下文只取窗口而非整篇文檔——prefix窗口默認(rèn) 1600 字符、suffix窗口默認(rèn) 900 字符常量定義見(jiàn) constants.ts注釋明確指出在大文檔上直接切片窗口避免了每次觸發(fā)補(bǔ)全時(shí)復(fù)制全文檔的開(kāi)銷(xiāo)。短補(bǔ)全心流狀態(tài)下的「下一串鍵入」短補(bǔ)全面向心流輸入目標(biāo)是讓補(bǔ)全看起來(lái)像用戶(hù)接下來(lái)要打的幾個(gè)鍵。觸發(fā)條件短補(bǔ)全使用基礎(chǔ)策略shouldRequestInlineCompletion實(shí)現(xiàn)見(jiàn) policy.ts補(bǔ)全總開(kāi)關(guān)開(kāi)啟isEnabled回調(diào)為真當(dāng)前光標(biāo)不是選區(qū)selection 為空光標(biāo)后一個(gè)字符不是單詞字符nextCharIsWord為 false避免打斷正在拼寫(xiě)的詞當(dāng)前文檔有足夠上下文文檔非空、prefix 窗口去空白后非空不是 URL 尾部looksLikeUrlTail為 false空白行必須有結(jié)構(gòu)化上下文如列表、引用、標(biāo)題或段落機(jī)會(huì)才允許觸發(fā)局部信號(hào)與文檔信號(hào)至少要滿(mǎn)足其一當(dāng)前行前綴去空白后不少于 3 個(gè)字符或文檔預(yù)覽上下文不少于 16 個(gè)字符INLINE_COMPLETION_MIN_CONTEXT_CHARS或有結(jié)構(gòu)化上下文/段落機(jī)會(huì)。默認(rèn)參數(shù)參數(shù)默認(rèn)值含義源碼常量debounce650 ms停止輸入多久后請(qǐng)求INLINE_COMPLETION_DEBOUNCE_MS最小請(qǐng)求間隔1400 ms同模式兩次請(qǐng)求最小間隔INLINE_COMPLETION_MIN_REQUEST_INTERVAL_MSmax tokens96FIM 最大生成長(zhǎng)度DEFAULT_WRITE_INLINE_COMPLETION_MAX_TOKENSmin accept score0.52本地候選顯示閾值INLINE_COMPLETION_MIN_ACCEPT_SCOREmax visible chars220ghost text 最大字符數(shù)INLINE_COMPLETION_MAX_VISIBLE_CHARSmax visible lines6ghost text 最大行數(shù)INLINE_COMPLETION_MAX_VISIBLE_LINESRAG snippets3最多注入 3 個(gè)檢索片段request 服務(wù)中maxSnippetsPrompt 策略短補(bǔ)全的 prompt 強(qiáng)調(diào)渲染進(jìn)程的buildInlineCompletionPayload與主進(jìn)程的buildWriteInlineCompletionPrompt共同體現(xiàn)只返回插入文本不返回解釋、圍欄、XML 或 action 標(biāo)記局部上下文模糊時(shí)寧可返回空響應(yīng)不重復(fù)光標(biāo)后的 suffix 文本不發(fā)散新主題保持 Markdown 結(jié)構(gòu)、縮進(jìn)與當(dāng)前語(yǔ)氣。短補(bǔ)全對(duì)應(yīng)策略名precision-inline-v2其 rejection criteria 明確要求跳過(guò)「僅復(fù)述前文」「開(kāi)啟當(dāng)前塊未支撐的新主題」「過(guò)長(zhǎng)、泛化或推測(cè)性」的候選。質(zhì)量過(guò)濾短補(bǔ)全會(huì)更嚴(yán)格地懲罰見(jiàn) feedback.ts 的evaluateInlineCompletionCandidate過(guò)長(zhǎng)候選超過(guò) 140 字符或 3 行即施加 0.14 長(zhǎng)度懲罰與 suffix 重復(fù)的候選直接以already-in-suffix拒絕重復(fù)檢測(cè)redundancyPenalty命中即返回 1 分懲罰在完整句子后硬接詞的候選當(dāng)prefersNewLineCompletion為真且候選以詞字符開(kāi)頭時(shí)sentenceBoundaryPenalty達(dá) 0.42超過(guò) 0.4 拒絕線(xiàn)直接拒絕過(guò)于泛化的開(kāi)頭genericPenalty對(duì)以 the/this/that/it/然后/這里/這個(gè) 等泛化引導(dǎo)詞開(kāi)頭的候選施加 0.18 懲罰空響應(yīng)冷卻同一位置的空響應(yīng)會(huì)被記錄并進(jìn)入冷卻防止反復(fù)空請(qǐng)求詳見(jiàn)下文調(diào)度章節(jié)。這些懲罰讓短補(bǔ)全更像「下一串鍵入」而非 AI 主動(dòng)寫(xiě)作。靈感長(zhǎng)補(bǔ)全停頓后的「給我一點(diǎn)可繼續(xù)寫(xiě)的東西」靈感長(zhǎng)補(bǔ)全面向用戶(hù)停頓之后的啟發(fā)時(shí)刻。觸發(fā)條件長(zhǎng)補(bǔ)全基于短補(bǔ)全基礎(chǔ)條件再疊加額外限制shouldRequestLongInlineCompletion長(zhǎng)補(bǔ)全開(kāi)關(guān)開(kāi)啟isLongEnabled通過(guò)短補(bǔ)全基礎(chǔ)判定光標(biāo)必須在行尾isAtLineEnd當(dāng)前行后面沒(méi)有剩余文本currentLineSuffixTrimmed為空不在表格上下文中hasTableContext為 false不在標(biāo)題上下文中hasHeadingContext為 false當(dāng)前文檔或局部上下文達(dá)到更高信號(hào)量文檔上下文不少于 80 字符INLINE_LONG_COMPLETION_MIN_CONTEXT_CHARS或當(dāng)前行前綴不少于 12 字符或有結(jié)構(gòu)化上下文/段落機(jī)會(huì)當(dāng)前行以單詞字符結(jié)束時(shí)需要更長(zhǎng)的局部信號(hào)局部信號(hào) ≥ 12 字符避免在半個(gè)詞處觸發(fā)。這些限制確保長(zhǎng)補(bǔ)全只在「用戶(hù)真的停住了」的地方出現(xiàn)即行尾/段落邊界。默認(rèn)參數(shù)參數(shù)默認(rèn)值含義源碼常量debounce2800 ms更長(zhǎng)停頓后觸發(fā)INLINE_LONG_COMPLETION_DEBOUNCE_MS最小請(qǐng)求間隔4500 ms長(zhǎng)補(bǔ)全請(qǐng)求最小間隔INLINE_LONG_COMPLETION_MIN_REQUEST_INTERVAL_MSmax tokens256允許約一段的續(xù)寫(xiě)靈感DEFAULT_WRITE_INLINE_LONG_COMPLETION_MAX_TOKENSmin accept score0.36比短補(bǔ)全更寬松INLINE_LONG_COMPLETION_MIN_ACCEPT_SCOREmax visible chars900ghost text 最大字符數(shù)INLINE_LONG_COMPLETION_MAX_VISIBLE_CHARSmax visible lines14ghost text 最大行數(shù)INLINE_LONG_COMPLETION_MAX_VISIBLE_LINESRAG snippets5最多注入 5 個(gè)檢索片段request 服務(wù)中maxSnippetsPrompt 策略長(zhǎng)補(bǔ)全會(huì)在 prompt 前加入隱藏注釋主進(jìn)程buildWriteInlineCompletionPrompt中 mode 為 long 時(shí)注入!-- DeepSeek GUI inline completion mode: long inspiration. The user paused at the cursor. Continue the draft with a grounded next thought... Return only insertable text... --它明確告訴模型用戶(hù)是停頓尋求靈感可以給更完整的下一句或下一段仍然必須貼合當(dāng)前草稿不得總結(jié)文檔、不得生成整篇文章優(yōu)先一段緊湊的續(xù)寫(xiě)或短列表延續(xù)而非全文大綱或泛化頭腦風(fēng)暴檢索到的參考片段僅用于術(shù)語(yǔ)、事實(shí)連續(xù)性與風(fēng)格提示不得在返回文本中提及。長(zhǎng)補(bǔ)全對(duì)應(yīng)策略名inspiration-inline-v1其 acceptance criteria 額外允許「提供有用的下一個(gè)想法但不得接管整個(gè)草稿」。質(zhì)量過(guò)濾長(zhǎng)補(bǔ)全復(fù)用短補(bǔ)全的重復(fù)檢測(cè)、句邊界檢測(cè)和泛化懲罰但放寬長(zhǎng)度限制并降低初始閾值長(zhǎng)度懲罰放寬為超過(guò) 760 字符或 10 行才施加 0.08 懲罰評(píng)分基礎(chǔ)分從短補(bǔ)全的 0.34 降至 0.40結(jié)構(gòu)化 action 返回時(shí) 0.48顯示閾值從 0.52 降至 0.36。這樣長(zhǎng)補(bǔ)全可以顯示更完整的段落同時(shí)仍然避免重復(fù)現(xiàn)有 suffix、突然開(kāi)新主題、輸出過(guò)長(zhǎng)整篇內(nèi)容、在不適合的位置插入大段文本。雙計(jì)時(shí)器調(diào)度與過(guò)期保護(hù)編輯器插件內(nèi)部維護(hù)兩個(gè) timercodemirror.ts 的inlineCompletionControllershortTimerlongTimer每次文檔、選區(qū)或焦點(diǎn)變化時(shí)執(zhí)行調(diào)度流程sequence 1使所有在途請(qǐng)求的 id 失效清掉舊 timer重新計(jì)算上下文如果可短補(bǔ)全設(shè)置短 timer如果可長(zhǎng)補(bǔ)全設(shè)置長(zhǎng) timer長(zhǎng)補(bǔ)全 debounce 更長(zhǎng)因此兩個(gè) timer 可并存。請(qǐng)求返回時(shí)會(huì)執(zhí)行三重過(guò)期檢查當(dāng)前 request id 是否仍是最新sequence編輯器 state 是否仍是發(fā)起請(qǐng)求時(shí)的 state引用相等比較當(dāng)前光標(biāo)位置是否仍匹配發(fā)起時(shí)的 anchor。如果用戶(hù)繼續(xù)輸入舊請(qǐng)求自然失效不會(huì)把過(guò)期補(bǔ)全插入界面。除 debounce 外調(diào)度層還有一套「防打擾」節(jié)流機(jī)制這是原文檔之外源碼中非常關(guān)鍵的設(shè)計(jì)最小請(qǐng)求間隔short 1400 ms、long 4500 ms超頻時(shí)用setTimeout延遲到間隔滿(mǎn)足后再發(fā)同模式在途互斥inFlightModes集合防止同一模式并發(fā)請(qǐng)求若在途則記入pendingAfterInFlight返回后再重新調(diào)度空響應(yīng)冷卻同一上下文簽名mode、文件、光標(biāo)、行內(nèi)容等拼接而成返回空候選后進(jìn)入 10 秒冷卻INLINE_COMPLETION_EMPTY_COOLDOWN_MS30 秒窗口內(nèi)INLINE_COMPLETION_EMPTY_BURST_WINDOW_MS連續(xù) 3 次INLINE_COMPLETION_EMPTY_BURST_LIMIT空響應(yīng)觸發(fā) 8 秒全局冷卻INLINE_COMPLETION_EMPTY_GLOBAL_COOLDOWN_MS避免弱模型反復(fù)產(chǎn)生空結(jié)果造成無(wú)意義請(qǐng)求。本地候選質(zhì)量評(píng)分機(jī)制反饋與評(píng)分邏輯集中在 feedback.ts是「本地過(guò)濾不過(guò)時(shí)不展示」原則的落地。其核心是一個(gè)加權(quán)評(píng)分函數(shù)evaluateInlineCompletionCandidate加分項(xiàng)Boost連續(xù)性加分continuityBoost光標(biāo)前以詞字符結(jié)尾且候選以詞/字母/數(shù)字開(kāi)頭 0.2以標(biāo)點(diǎn)結(jié)尾且候選以標(biāo)點(diǎn)開(kāi)頭 0.08句末標(biāo)點(diǎn)后換行 0.12結(jié)構(gòu)加分structuralBoost結(jié)構(gòu)化上下文 0.12、列表上下文 0.1、引用上下文保持標(biāo)記 0.08、匹配當(dāng)前縮進(jìn) 0.08段落開(kāi)頭加分paragraphStartBoost段落機(jī)會(huì)處 0.22。減分/拒絕項(xiàng)Penalty冗余懲罰redundancyPenalty候選與 suffix 開(kāi)頭重復(fù) → 直接拒絕already-in-suffix與 prefix 尾部重復(fù) → 扣 0.45句邊界懲罰sentenceBoundaryPenalty完整句后硬接詞 → 扣 0.42≥0.4 拒絕泛化懲罰genericPenalty泛化引導(dǎo)詞開(kāi)頭扣 0.18無(wú)意義的 1~2 字符候選非有用單 token扣 0.22長(zhǎng)度懲罰lengthPenalty見(jiàn)上文短/長(zhǎng)兩套閾值。防御性校驗(yàn)空文本、純空白 →empty-candidate/blank-candidate拒絕協(xié)議標(biāo)記殘留正則/[ \t]*(?:SHORT|LONG|EDIT|PREFIX|SUFFIX|EDIT_SCOPE)\b/i命中即按marker-artifact拒絕——即使后端已清洗防御縱深確?;螛?biāo)記骨架絕不進(jìn)入 ghost text 渲染normalizeCompletionBoundary當(dāng)光標(biāo)前后均為詞字符時(shí)自動(dòng)在候選前補(bǔ)一個(gè)空格避免「詞黏詞」長(zhǎng)度/行數(shù)超限拒絕short 220 字符/6 行、long 900 字符/14 行。最終得分低于minAcceptScoreshort 0.52 / long 0.36時(shí)以low-confidence拒絕每次決策都會(huì)通過(guò)onFeedback上報(bào)phase: candidate的反饋記錄含決策、原因、分?jǐn)?shù)與預(yù)覽供 UI 與后續(xù)調(diào)參使用。與 RAG 的關(guān)系雙模式補(bǔ)全和跨文本檢索是兩層正交能力雙模式?jīng)Q定「什么時(shí)候補(bǔ)、補(bǔ)多長(zhǎng)、用什么策略補(bǔ)」RAG 決定「補(bǔ)全前參考哪些跨文本片段」。在主進(jìn)程 write-inline-completion-request.ts 中檢索由retrieveWriteInlineCompletionContext完成短補(bǔ)全maxSnippets 3注重局部流暢候選更短長(zhǎng)補(bǔ)全 / editmaxSnippets 5注重靈感連續(xù)prompt 明確提示停頓續(xù)寫(xiě)。檢索到的片段在 write-inline-completion-prompt.ts 的buildRetrievalPromptBlock中注入 prompt包含索引文件/塊統(tǒng)計(jì)、查詢(xún)關(guān)鍵詞以及每個(gè)片段的精確位置PDF 按頁(yè)碼、文本按行號(hào)區(qū)間同時(shí)明確約束模型「僅將片段用于術(shù)語(yǔ)、事實(shí)連續(xù)性與風(fēng)格不得在返回中提及片段」。若用戶(hù)在設(shè)置中關(guān)閉檢索則請(qǐng)求退化為純 FIM 補(bǔ)全。設(shè)置項(xiàng)與默認(rèn)值設(shè)置頁(yè)提供以下開(kāi)關(guān)與參數(shù)啟用幽靈文本補(bǔ)全write.inlineCompletion.enabled跨文本檢索增強(qiáng)write.inlineCompletion.retrievalEnabledFIM API 地址write.inlineCompletion.baseUrl默認(rèn)為 DeepSeek 兼容地址補(bǔ)全模型write.inlineCompletion.model默認(rèn)deepseek-v4-flash可inheritModel繼承全局模型短補(bǔ)全觸發(fā)延遲debounceMs短補(bǔ)全顯示嚴(yán)格度minAcceptScore短補(bǔ)全最大長(zhǎng)度maxTokens靈感長(zhǎng)補(bǔ)全開(kāi)關(guān)longCompletionEnabled靈感長(zhǎng)補(bǔ)全觸發(fā)延遲longDebounceMs靈感長(zhǎng)補(bǔ)全最大長(zhǎng)度longMaxTokens另含longMinAcceptScore。默認(rèn)值定義在 app-settings-types-provider.ts與原文檔中引用的src/shared/app-settings.ts同屬設(shè)置類(lèi)型體系DEFAULT_WRITE_INLINE_COMPLETION_DEBOUNCE_MS 650DEFAULT_WRITE_INLINE_COMPLETION_MAX_TOKENS 96DEFAULT_WRITE_INLINE_COMPLETION_MIN_ACCEPT_SCORE 0.52DEFAULT_WRITE_INLINE_LONG_COMPLETION_DEBOUNCE_MS 2_800DEFAULT_WRITE_INLINE_LONG_COMPLETION_MAX_TOKENS 256DEFAULT_WRITE_INLINE_LONG_COMPLETION_MIN_ACCEPT_SCORE 0.36設(shè)置的規(guī)范化與解析邏輯見(jiàn) app-settings-write.tsnormalizeWriteInlineCompletionModel、resolveWriteInlineCompletionBaseUrl等舊版本設(shè)置的默認(rèn)值遷移由 settings-store.test.ts 驗(yàn)證加載后longCompletionEnabled true、longMaxTokens 256等。服務(wù)端請(qǐng)求鏈路FIM 與 Chat Completions 的選擇主進(jìn)程 write-inline-completion-request.ts 的requestWriteInlineCompletion是請(qǐng)求出口其路由邏輯決定了兩條不同的補(bǔ)全通道const useChatCompletions mode edit || actionMayEdit const useFimCompletions !useChatCompletions configuredEndpointFormat chat_completions isDeepSeekInlineCompletionBaseUrl(baseUrl)自動(dòng) short/long ghost text當(dāng)端點(diǎn)為 DeepSeek 兼容地址且格式為 chat_completions 時(shí)直接請(qǐng)求 FIM/beta/completionsupstreamDeepSeekFimCompletionsUrlprompt 以「指令注釋塊 raw prefix」拼接顯式mode: edit或可能返回 action 的請(qǐng)求走 chat completionsmessages 形式使用 TextIDE 風(fēng)格的動(dòng)作塊協(xié)議SHORT ... /LONG ... /EDIT ... 讓模型自行決定返回類(lèi)型自定義端點(diǎn)支持/chat/completions、/completions、/responses、/messages四種結(jié)尾格式自定義完整端點(diǎn) URL 若不匹配其中一種會(huì)直接返回錯(cuò)誤Responses Lite對(duì) Codex/ChatGPT 等responsesMode: lite的 provider 走 Responses API 輕量通道。token 預(yù)算同樣按模式區(qū)分mode long || mode edit || actionMayEdit時(shí)使用longMaxTokens256否則使用maxTokens96。整個(gè)請(qǐng)求有 12 秒超時(shí)INLINE_COMPLETION_TIMEOUT_MS每次請(qǐng)求都會(huì)寫(xiě)入 debug 條目最多保留 120 條prompt/響應(yīng)文本裁剪至 8 萬(wàn)字符供listWriteInlineCompletionDebugEntries排查。響應(yīng)清洗同樣按模式處理cleanCompletionText會(huì)剝掉模型誤包的三重反引號(hào)圍欄與成對(duì)引號(hào)extractWriteInlineAction負(fù)責(zé)解析 action 塊并剔除純協(xié)議骨架回顯弱模型逐字復(fù)述占位符的情況永遠(yuǎn)不會(huì)成為真實(shí)建議。用戶(hù)體驗(yàn)原則這套設(shè)計(jì)的核心是「不搶筆」用戶(hù)正在快速輸入時(shí)只出現(xiàn)短補(bǔ)全用戶(hù)停頓較久2800 ms時(shí)才出現(xiàn)長(zhǎng)補(bǔ)全長(zhǎng)補(bǔ)全只在行尾/段落邊界出現(xiàn)Tab 接受Esc 隱藏本地過(guò)濾不過(guò)時(shí)不展示API 或檢索失敗時(shí)靜默消失不打斷輸入。渲染層將補(bǔ)全實(shí)現(xiàn)為 CodeMirror 的WidgetTypeInlineCompletionWidget以cm-inline-completion樣式渲染 ghost textedit模式的替換預(yù)覽則用箭頭指示替換位置。鍵位綁定Prec.highest保證 Tab/Esc 優(yōu)先于其他默認(rèn)鍵位。失敗降級(jí)任意環(huán)節(jié)失敗都不會(huì)影響編輯器輸入設(shè)置關(guān)閉不請(qǐng)求enabled false直接返回失敗并記錄 preflightAPI Key 缺失返回失敗不顯示檢索失敗retrieveWriteInlineCompletionContext(...).catch(() null)退化為普通 FIMFIM 失敗不顯示候選低分本地過(guò)濾拒絕不顯示用戶(hù)繼續(xù)輸入sequence推進(jìn)導(dǎo)致舊請(qǐng)求失效。測(cè)試覆蓋相關(guān)測(cè)試集中在三個(gè)文件write-inline-completion-service.test.tsapp-ipc-schemas.test.tssettings-store.test.ts重點(diǎn)覆蓋的行為包括自動(dòng) short/long ghost text 請(qǐng)求走 FIM/completions測(cè)試斷言 URL 為https://api.deepseek.com/beta/completions且不含/chat/completions顯式mode: edit或可能返回 action 的請(qǐng)求走 chat completions斷言 body 含messages而無(wú)prompt短補(bǔ)全默認(rèn) mode請(qǐng)求未傳 mode 時(shí)按 short 處理長(zhǎng)補(bǔ)全使用獨(dú)立 prompt 與 token budget設(shè)置默認(rèn)值遷移舊配置加載后長(zhǎng)補(bǔ)全開(kāi)關(guān)與longMaxTokens 256生效自定義端點(diǎn)的格式校驗(yàn)必須以/chat/completions、/completions、/responses或/messages結(jié)尾IPC schema 接受mode: long與mode: edit后者由 inline edit 測(cè)試與文檔docs/WRITE_INLINE_EDIT_RAG.zh-CN.md覆蓋。后續(xù)優(yōu)化方向原文檔列出的演進(jìn)方向在實(shí)現(xiàn)中已有部分雛形其余仍待落地給長(zhǎng)補(bǔ)全增加單獨(dú)的顯示樣式區(qū)別「下一串鍵入」與「靈感續(xù)寫(xiě)」增加「只在空行觸發(fā)長(zhǎng)補(bǔ)全」的更安靜模式當(dāng)前已具備空響應(yīng)冷卻與全局冷卻的節(jié)流基礎(chǔ)用接受率反饋?zhàn)詣?dòng)調(diào)整長(zhǎng)補(bǔ)全 debounceonFeedback已上報(bào)phase: interaction的 accept/dismiss 數(shù)據(jù)可作為調(diào)參輸入為不同工作空間保存獨(dú)立補(bǔ)全偏好在 RAG 命中較弱時(shí)提高長(zhǎng)補(bǔ)全閾值減少發(fā)散長(zhǎng)補(bǔ)全已有獨(dú)立的longMinAcceptScore配置位可在此基礎(chǔ)上按檢索強(qiáng)度動(dòng)態(tài)調(diào)整。贊分享人工智能AI Agent自主智能體桌面應(yīng)用MCP Clients【免費(fèi)下載鏈接】KunLocal-first AI agent workspace for coding, writing, design, research, and automation — one runtime for desktop GUI and TUI.項(xiàng)目地址https://gitcode.com/gh_mirrors/de/Kun點(diǎn)擊查看免費(fèi)下載相關(guān)推薦arduino-cli 命令行補(bǔ)全Tab 補(bǔ)全配置與實(shí)現(xiàn)原理指南arduino cli 命令行補(bǔ)全Tab 補(bǔ)全配置與實(shí)現(xiàn)原理指南 arduino cli 內(nèi)置了面向 bash 、 zsh 、 fish 、 powersh開(kāi)發(fā)工具嵌入式Kun Work 跨文本 BM25 關(guān)鍵詞檢索 RAG本地寫(xiě)作補(bǔ)全的輕量檢索增強(qiáng)實(shí)現(xiàn)解析Kun Work 跨文本 BM25 關(guān)鍵詞檢索 RAG本地寫(xiě)作補(bǔ)全的輕量檢索增強(qiáng)實(shí)現(xiàn)解析 導(dǎo)讀 本文講解 Kun 桌面應(yīng)用中 Work 辦公模式的 跨文本人工智能AI Agent自主智能體桌面應(yīng)用MCP ClientsBazel 命令行補(bǔ)全Tab 補(bǔ)全配置指南Bash、Zsh 完整安裝與源碼級(jí)原理Bazel 命令行補(bǔ)全Tab 補(bǔ)全配置指南Bash、Zsh 完整安裝與源碼級(jí)原理 本篇技術(shù)指南圍繞 Bazel 的命令行補(bǔ)全Command Line C構(gòu)建工具上一篇CKEditor 5 Undo 撤銷(xiāo)/重做功能完全指南選擇性撤銷(xiāo)、命令 API 與底層實(shí)現(xiàn)原理下一篇upb util 庫(kù)解析基于公開(kāi) API 構(gòu)建的 def_to_proto 與 required_fields 工具集創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考