Go + Gin + SQLite 的流式聊天后端,配套一个 Vite + React 的 Web 聊天 UI。后端通过 langchaingo 走 OpenAI 兼容接口(OpenAI / Kimi / DeepSeek / 智谱 / 通义 / Ollama 等),并用 SSE 实时推送生成内容。
- SSE 流式输出(
/api/chat/stream),前端边生成边显示 - 会话/消息持久化(SQLite:
chat.db) - Web 端可配置 Provider / Base URL / Model / API Key
- Markdown 渲染(GFM)+ 代码块高亮
- 创建配置文件:
- 复制
.env.example为.env - 填好
AI_BASE_URL / AI_MODEL / AI_API_KEY
- 复制
- 启动后端:
- PowerShell:
go run . - 启动后默认监听:
http://localhost:8080
- PowerShell:
验证:GET http://localhost:8080/health 返回 {"status":"ok"}
cd web
npm install
npm run dev- 前端默认:
http://localhost:5173 web/vite.config.ts已将/api代理到http://localhost:8080
见 .env.example。
SERVER_PORT:后端端口(默认8080)DATABASE_DSN:SQLite 文件路径(默认chat.db)AI_PROVIDER:仅用于记录(当前实现走 OpenAI 兼容接口)AI_MODEL:模型名(如gpt-4o-mini/deepseek-chat/moonshot-v1-32k/llama3)AI_BASE_URL:OpenAI 兼容 Base URL(如https://api.openai.com/v1/http://localhost:11434/v1)AI_API_KEY:API Key(启动时会同步设置到OPENAI_API_KEY以供langchaingo使用)
GET /health:健康检查POST /api/chat/stream:SSE 流式聊天- 请求:
{ "conversation_id": 0, "message": "..." } - SSE 事件
data:JSON:{"type":"start","conversation_id":123}{"type":"content","content":"..."}(多次){"type":"done","conversation_id":123}{"type":"error","error":"..."}
- 请求:
GET /api/conversations:会话列表GET /api/conversations/:id/messages:会话消息GET /api/settings/POST /api/settings:读取/更新 AI 设置GET /api/providers:预设 Provider 列表(前端“AI 设置”面板使用)
main.go:后端入口routes/:路由handlers/:HTTP 处理器(包含 SSE)services/ai_service.go:LLM 调用与流式回调database/+models/:Gorm + SQLite 表结构web/:前端(Vite + React + Tailwind)
- 前端:
cd web && npm run build(产物在web/dist) - 后端:
go build -o app .
本仓库当前不自动由 Go 服务托管 web/dist;你可以用 Nginx/静态文件服务器托管前端,后端独立部署即可。
- 不要提交
.env(已在.gitignore中忽略);如果你曾把真实 Key 推到远端,请立即轮换。