# Inline Autocomplete Suggestions 实现计划 ## 技术栈确认 - **前端**: Vue3 + Milkdown Editor - **后端**: Python FastAPI - **LLM**: OpenAI API(流式响应) - **范围**: 基础流式补全,无需复杂缓存机制 ## 系统架构 ```mermaid flowchart TB subgraph 前端 [Vue3 + Milkdown] E[Milkdown Editor] I[InlineSuggestionPlugin
输入监听+防抖] G[GhostTextOverlay
虚影渲染层] end subgraph 后端 [FastAPI] API[/v1/completions
补全接口] P[PromptBuilder
上下文构建] L[OpenAI Client
LLM调用] end I -- "输入事件" --> G G -- "POST {prefix, suffix}" --> API API -- "流式响应" --> G ``` ## 实现步骤 ### 1. 前端:创建 Inline Suggestion Plugin **文件**: `src/plugins/inlineSuggestionPlugin.ts` - 监听编辑器输入事件 - 防抖处理(150ms) - 调用后端 API 获取补全建议 - 管理 GhostText 显示状态 ### 2. 前端:GhostText 渲染组件 **文件**: `src/components/GhostTextOverlay.vue` 或内联样式 - 在光标位置显示灰色虚影文本 - 处理 Tab 键接受补全 - ESC 键取消显示 ### 3. 修改 MilkdownEditor 集成插件 **文件**: `src/components/MilkdownEditor.vue` - 注册 InlineSuggestionPlugin 到 Crepe 实例 - 配置 API 地址 ### 4. 后端:FastAPI 服务 **文件**: `backend/main.py` - POST `/v1/completions` 流式接口 - 请求体验证和解析 ### 5. 后端:Prompt 构建和 LLM 调用 **文件**: `backend/prompt.py`, `backend/llm.py` - 构建补全 Prompt(参考 completions-sample-code 的 extractPrompt) - OpenAI API 流式调用 - 返回 SSE 格式响应 ## 文件结构 ``` llm-in-text/ ├── src/ │ ├── components/ │ │ └── MilkdownEditor.vue [修改] │ ├── plugins/ │ │ └── inlineSuggestionPlugin.ts [新建] │ └── ... └── backend/ ├── main.py [新建] ├── prompt.py [新建] ├── llm.py [新建] └── requirements.txt [新建] ``` ## API 设计 ### 请求 ```json POST /v1/completions { "prefix": "# Hello\n\nThis is ", "suffix": "", "languageId": "markdown" } ``` ### 响应(流式 SSE) ``` data: {"content": "a "} data: {"content": "a te"} data: {"content": "a test"} data: [DONE] ``` ## 参考代码映射 | completions-sample-code | 本项目实现 | |------------------------|-----------| | `ghostText.ts getGhostText()` | 后端 LLM 调用逻辑 | | `inlineCompletion.ts GhostText` | 前端 Plugin 核心逻辑 | | `networking.ts postRequest()` | 后端 API 接口 | | `prompt/extractPrompt()` | 后端 Prompt 构建 | ## 下一步 确认计划后切换到 Code 模式开始实现。