桃子桃子快讯
返回首页
工具

SvelteChatKit:面向多后端的开源 SvelteKit 聊天 UI 套件

SvelteChatKit 是一个基于 SvelteKit 2 与 Svelte 5 的开源聊天界面组件,支持 Open…

2026.07.06 · 周一5 分钟阅读

SvelteChatKit 是一个面向 SvelteKit 2 与 Svelte 5(Runes 模式)的开源聊天界面工具包,主打「provider-agnostic」:通过统一的 ChatProvider 接口,开发者可以在不修改 UI 代码的情况下,将同一套前端界面切换到 OpenAI 兼容 API、Ollama、Dify 或自建后端。项目以零配置 Demo 模式开箱即用,无需 API Key 即可在本地启动。

核心特性

  • 流式输出:支持 SSE、NDJSON 与原始文本流,逐 token 渲染,并提供中断按钮,可在流式输出中途干净中止。
  • 持久化:基于 localStorage 的会话记忆,SSR 安全,支持 opt-in。
  • Markdown 与代码高亮:GFM 渲染,搭配 highlight.js 代码块,并通过 DOMPurify 做 HTML 清洗。
  • 智能滚动:自动跟随流式输出,用户上滑浏览历史时不强制滚动,并提供浮动「回到底部」按钮。
  • 错误处理:类型化的 ChatProviderError,支持行内可关闭的错误提示与逐条消息错误状态。
  • 移动端适配:在 375px 宽度下可用,输入框采用 16px 字号避免 iOS 自动缩放,文本框随内容自动增高。
  • TypeScript 严格模式:完整的类型化公共 API。

支持的后端

  • openai:兼容 OpenAI、OpenRouter、Groq、LM Studio、vLLM、llama.cpp、Azure 风格网关,传输协议为 SSE(POST {baseUrl}/chat/completions),需要 baseUrl、apiKey、model。
  • ollama:本地 Ollama,NDJSON(POST {baseUrl}/api/chat),浏览器侧调用需配置 OLLAMA_ORIGINS。
  • dify:面向 Dify 对话类应用,SSE 协议(POST {baseUrl}/chat-messages)。
  • custom:自定义端点,自动识别 SSE、流转文本或纯 JSON。
  • mock:内置演示提供方,纯前端模拟流式 Markdown 输出,无需网络。

快速上手

通过 git clonenpm install、复制 .env.example.env、运行 npm run dev 即可在本地启用演示。Demo 默认使用 mock 提供方,无需任何密钥;填入 .env 后可指向真实后端。要求 Node 20 及以上。

接入与扩展

开发者可通过 createProvider 创建提供方实例,配合 Chat 类与 <ChatWindow> 组件快速搭建聊天界面。Chat 暴露基于 runes 的响应式状态 messagesstatuserrorbusy,以及 send()stop()clear()setProvider() 等方法,便于在之上构建自定义 UI。

自定义后端只需实现 ChatProvider 接口,通过 registerProvider 注册后即可复用工厂方法;官方文档 docs/adding-a-provider.md 提供了完整示例,包含一个可工作的 Anthropic 提供方实现,典型写法在 20 行左右。

配置与安全注意

环境变量以 PUBLIC_ 前缀暴露,例如 PUBLIC_DEFAULT_PROVIDERPUBLIC_OPENAI_BASE_URLPUBLIC_OPENAI_API_KEYPUBLIC_OPENAI_MODELPUBLIC_DIFY_BASE_URLPUBLIC_DIFY_API_KEYPUBLIC_OLLAMA_BASE_URLPUBLIC_OLLAMA_MODELPUBLIC_CUSTOM_ENDPOINT,缺省时回退到 mock 提供方。需要特别注意的是,PUBLIC_* 变量会被打包进客户端代码并对访问者可见,仅适合本地开发或演示;生产环境应将密钥保留在服务端,通过 custom 端点指向一个加 Authorization 头的代理路由来转发请求。

信源