2026-06-27 22:28:01 +08:00
2026-01-11 14:11:14 +00:00

LLM in Text - 智能写作助手

基于 Vue3 和 FastAPI 的智能 Markdown 编辑器,集成大语言模型(LLM)实时补全建议功能。

功能特性

Markdown 编辑器

  • 基于 Milkdown Crepe 的所见即所得编辑体验
  • 支持 Markdown 语法和 LaTeX 公式
  • 支持 Mermaid 图表渲染
  • 导入/导出 Markdown 文件
  • 导出 DOCX 和 PDF 格式

AI 智能补全

  • 实时生成文本补全建议(灰色显示)
  • 流式响应,低延迟体验
  • 多种交互方式:Tab接受、Esc拒绝、点击接受

功能块系统

编辑器提供三种功能块,统一为顶层原子节点(atom: true, isolating: true),通过 ProseMirror schema 强制禁止互相嵌套,无数量限制。导入 Markdown 后自动解析还原为交互卡片,导出后可完整复原:

功能块 Markdown 语法 作用
文档块 (doc_block) ```llm-file fenced code / <doc_type=...> legacy HTML tag 上传的 PDF/DOCX/PPTX/TXT 等文件以可折叠卡片嵌入编辑器,支持内联编辑和 AI 补全
PRO 块 (pro_block) [PRO] / [PRO]{指令} 基于全文上下文进行深度 AI 思考并流式生成 MarkdownCtrl+Shift+P 快速插入
上传块 (upload_block) {{{}}} / {{{upload file type:pdf,docx}}} 文件上传占位符,支持按类型过滤(PDF/DOCX/PPTX/TXT/JSON/YAML/图片等)

文档处理(历史名称,已整合入功能块系统)

  • OCR 图片识别:上传图片自动识别文字(OCR 结果注入 AI 补全和 PRO 块上下文)
  • 智能大小限制:32KB自动禁用AI

设置面板

  • 外观主题:亮色/暗色/跟随系统
  • 背景模式:默认/暖色/阅读灯/自定义图片
  • 模型智能:低/中/高思考级别
  • 隐私控制:隐私模式防止发送IP
  • 多语言界面:中英日韩德法

语音功能

  • TTS文字转语音(macOS优化,支持Apple Silicon M1/M2/M3
  • STT语音转文字(支持多种模型大小和量化)
  • 自动设备检测(MPS/CUDA/CPU智能切换)
  • 离线模式支持(模型缓存检查)

技术架构

前端: Vue3 + Vite + Milkdown/Crepe + ProseMirror 后端: FastAPI + PythonOpenAI 兼容端点)

功能块架构

三种功能块统一为顶层原子节点(atom: true, isolating: true),通过 ProseMirror schema 强制禁止嵌套:

  • 文档块 (doc_block) — src/plugins/docBlockPlugin.tsMarkdown 语法:```llm-file fenced code block
  • PRO 块 (pro_block) — src/plugins/proBlockPlugin.tsMarkdown 语法:[PRO] / [PRO]{指令}
  • 上传块 (upload_block) — src/plugins/uploadBlockPlugin.tsMarkdown 语法:{{{}}} / {{{upload file type:...}}}

每个功能块配备独立的 Remark 解析器和序列化器,确保 Markdown 导入导出时自动识别和还原。

快速开始

环境: Node.js 18+、Python 3.8+

安装:

  • 前端: npm install
  • 后端: pip install -r backend/requirements.txt

启动:

  • 后端: python backend/main.py (端口8001)
  • 前端: npm run dev (端口5173)

Docker 部署

将整个项目目录放进本机 ~/lit/llm-in-text 后,在项目根目录执行:

cp backend/.env.example backend/.env
docker compose up -d --build

默认对外端口:

  • 前端: http://localhost:8080
  • 后端: http://localhost:8001

持久化目录全部位于当前项目下的 docker-data/

  • PostgreSQL: docker-data/postgres
  • Redis: docker-data/redis
  • 任务共享临时目录: docker-data/jobs

部署前至少需要修改这些环境变量:

  • backend/.env 中的 LLM_BASE_URL
  • backend/.env 中的 LLM_API_KEY
  • backend/.env 或 shell 环境中的 DATABASE_URL
  • backend/.env 中的 API_KEY

API接口

  • POST /v1/completions 流式补全建议
  • POST /v1/ocr 图片文字识别
  • POST /v1/convert 文档转换
  • POST /v1/completions/cancel 取消请求
  • GET /v1/docs/nodes 文档空间节点列表
  • POST /v1/docs/folders 创建文件夹
  • POST /v1/docs/files/text 创建文本文件
  • POST /v1/docs/files/upload 上传文件到文档空间
  • PATCH /v1/docs/nodes/{id} 更新节点
  • PUT /v1/docs/files/{id}/blob 替换文件二进制内容
  • DELETE /v1/docs/nodes/{id} 删除节点
  • GET /v1/docs/files/{id}/blob 下载或预览原文件
  • GET /v1/tts-asr/status TTS/ASR状态
  • GET /v1/tts-asr/config TTS/ASR配置信息
  • POST /v1/tts-asr/tts 文字转语音
  • POST /v1/tts-asr/asr 语音转文字

TTS/ASR环境变量配置

支持以下环境变量来配置TTS/ASR模块:

变量名 说明 默认值
LLM_BASE_URL OpenAI-compatible 上游地址 必填
LLM_API_KEY OpenAI-compatible 上游密钥 必填
TTS_MODEL_ID TTS 模型名 Qwen3-TTS-12Hz-1.7B-VoiceDesign-8bit
ASR_MODEL_ID ASR 模型名 Qwen3-ASR-0.6B-8bit
TTS_ASR_TTS_TIMEOUT_SECONDS TTS 上游超时(秒) 180
TTS_ASR_ASR_TIMEOUT_SECONDS ASR 上游超时(秒) 300
TTS_ASR_MAX_CONNECTIONS Speech API 连接池上限 24
TTS_ASR_MAX_KEEPALIVE_CONNECTIONS Speech API keepalive 连接数 12

核心实现

后端

  • main.py: FastAPI服务器、SSE流式响应
  • llm.py: 异步LLM调用(OpenAI兼容)、超时控制
  • prompt.py: 7条Prompt规则
  • tts_asr.py: 基于共享 OpenAI-compatible Speech API 的 TTS/ASR 适配层
    • 统一使用 LLM_BASE_URLLLM_API_KEY
    • 通过 /audio/speech/audio/transcriptions 调用上游
    • 内建连接池、超时、音频时长估算和上游请求 ID 透传

前端

  • copilotPlugin.ts: ProseMirror Mark系统
  • 关键函数: scheduleFetch、insertGhostText
  • Pinia Store状态管理

设计亮点

  1. 前后端分离
  2. 低延迟优化:防抖+SSE+AbortController
  3. ProseMirror Mark系统
  4. 多种交互方式
  5. 智能大小限制
  6. 隐私保护
  7. 多语言支持
  8. 主题定制
  9. 文档处理
  10. 语音功能

开发指南

代码风格: Python(4空格,snake_case) JS/TS(2空格,camelCase) 测试: pytest 构建: npm run build

运行测试

项目提供完整的测试套件,包括单元测试、集成测试和macOS环境模拟测试:

# 快速运行单元测试
python backend/tests/run_tests.py unit

# 运行集成测试(需要启动后端服务)
python backend/tests/run_tests.py integration

# 运行macOS环境模拟测试(在非Mac环境测试)
python backend/tests/run_tests.py simulate

# 运行所有测试
python backend/tests/run_tests.py all

详细测试说明请参考: 测试指南

许可证

MIT License

S
Description
No description provided
Readme MIT 34 MiB
Languages
Python 35%
Vue 31.8%
JavaScript 16.2%
TypeScript 12.8%
CSS 2.5%
Other 1.6%