Insight 是一个面向实际业务场景的 AI 应用服务平台,提供:
- 用户注册、登录与 JWT 鉴权
- 多会话 AI 聊天
- 固定流式响应与中断
- 思考模式与 reasoning 摘要展示
- 知识库管理、会话级知识授权与隐式知识增强
- MCP 工具调用
- 图片识别
- TTS 语音任务
- 前端亮色 / 暗色主题切换
项目当前由两个主要子项目组成:
frontend/: React + Vite 前端server/: Go 后端服务
当前 Insight 已经从“聊天 + 单文件 RAG 演示”演进为“AI 助手 + 知识库”产品形态,核心能力包括:
- 用户注册、登录、邮箱验证码与 JWT 鉴权
- 多会话 AI 对话与历史持久化
- 固定流式响应、流式中断与 SSE 元事件消费
- 思考模式开关与
reasoning_content展示 - 知识库、文档、chunk、索引任务与授权策略管理
- 会话级知识库授权与隐式知识增强
- MCP 工具模式
- 图片识别
- TTS 任务创建与查询
在工程结构上,后端采用:
cmd + internal + configs + testinternal/platform/*承载共享基础设施internal/app作为唯一装配入口- 按
user / chat / knowledge / image做 feature 聚合 file/保留为旧链路兼容能力,不再作为新的知识库主模块继续演进
- 邮箱验证码发送
- 用户注册与登录
- JWT 鉴权
- Redis 验证码存储与 Lua 原子校验删除
- 多会话聊天管理
- 空会话创建
- SSE 流式响应
- 流式中断
- 会话与消息持久化
- 会话级知识授权
- 回答中返回
usedKnowledge / citations / thinkingContent - 思考模式:支持模型时可显式开启
thinkingEnabled
- 创建、更新、删除知识库
- 上传
.md/.txt文档 - 异步解析、切块、向量索引
- 查看文档详情与 chunk 预览
- 删除文档、重建索引
- 按会话授权知识库并参与隐式检索
- 在 AI 对话中触发 MCP 工具调用
- 当前实现包含天气查询工具链路
- 通过两阶段提示完成“识别工具调用意图 -> 调用工具 -> 汇总回答”
- 上传图片
- 使用 ONNXRuntime + MobileNetV2 本地推理
- 返回分类结果
- 创建语音任务
- 查询任务状态与语音结果 URL
flowchart LR
Client["客户端 / 前端"] --> HTTP["HTTP API app + handlers"]
subgraph Services["业务服务"]
direction LR
UserSvc["用户服务"]
ChatSvc["AI 对话服务"]
KnowledgeSvc["知识库服务"]
ImageSvc["图片识别服务"]
end
subgraph Platform["平台能力"]
direction LR
Auth["JWT / Web 中间件"]
AI["AI Runtime / Model Factory"]
MQ["MQ Broker\nKafka / RabbitMQ / Direct"]
TTS["TTS Client"]
KBRAG["Knowledge Index / Retrieval"]
ONNX["ONNX Recognizer"]
Mail["Email"]
RedisCap["Redis Captcha Store"]
UserRepo["User MySQL Repo"]
ChatRepo["Chat MySQL Repo"]
KBRepo["Knowledge MySQL Repo"]
FileStore["Local File Store"]
end
subgraph Infra["基础设施"]
direction LR
MySQL[(MySQL)]
Redis[(Redis Stack)]
Kafka[(Kafka)]
RabbitMQ[(RabbitMQ)]
end
subgraph ThirdParty["第三方平台"]
direction LR
OpenAI["OpenAI Compatible API"]
Ollama["Ollama"]
MCP["MCP Tools"]
Baidu["Baidu TTS"]
end
HTTP --> UserSvc
HTTP --> ChatSvc
HTTP --> KnowledgeSvc
HTTP --> ImageSvc
UserSvc --> Auth
UserSvc --> Mail
UserSvc --> RedisCap
UserSvc --> UserRepo
ChatSvc --> AI
ChatSvc --> MQ
ChatSvc --> TTS
ChatSvc --> ChatRepo
ChatSvc --> KnowledgeSvc
KnowledgeSvc --> FileStore
KnowledgeSvc --> KBRAG
KnowledgeSvc --> KBRepo
KnowledgeSvc --> MQ
ImageSvc --> ONNX
UserRepo --> MySQL
ChatRepo --> MySQL
KBRepo --> MySQL
RedisCap --> Redis
KBRAG --> Redis
MQ --> Kafka
MQ --> RabbitMQ
AI --> OpenAI
AI --> Ollama
AI --> MCP
TTS --> Baidu
Insight/
├── frontend/
│ ├── src/
│ ├── package.json
│ └── vite.config.ts
├── server/
│ ├── cmd/
│ │ ├── mcp-server/
│ │ └── server/
│ ├── configs/
│ │ ├── config.example.toml
│ │ └── config.toml
│ ├── internal/
│ │ ├── app/
│ │ ├── platform/
│ │ ├── user/
│ │ ├── chat/
│ │ ├── knowledge/
│ │ ├── image/
│ │ └── file/ # 旧上传链路兼容保留
│ ├── go.mod
│ └── test/
├── docs/
├── docImgs/
├── docker-compose.yml
└── Makefile
GET /api/v1/AI/chat/modelsGET /api/v1/AI/chat/sessionsPOST /api/v1/AI/chat/create-sessionPOST /api/v1/AI/chat/send-new-sessionPOST /api/v1/AI/chat/sendPOST /api/v1/AI/chat/send-stream-new-sessionPOST /api/v1/AI/chat/send-streamPOST /api/v1/AI/chat/historyPOST /api/v1/AI/chat/delete-sessionGET /api/v1/AI/chat/session/{sessionId}/knowledge-grantsPOST /api/v1/AI/chat/session/{sessionId}/knowledge-grantsPOST /api/v1/AI/chat/ttsGET /api/v1/AI/chat/tts/query
GET /api/v1/knowledge-basesPOST /api/v1/knowledge-basesPOST /api/v1/knowledge-bases/{kbId}/updatePOST /api/v1/knowledge-bases/{kbId}/deleteGET /api/v1/knowledge-bases/{kbId}/documentsPOST /api/v1/knowledge-bases/{kbId}/documents/uploadGET /api/v1/knowledge-documents/{documentId}GET /api/v1/knowledge-documents/{documentId}/chunksPOST /api/v1/knowledge-documents/{documentId}/reindexPOST /api/v1/knowledge-documents/{documentId}/delete
docker compose up -d
docker compose ps当前依赖包括:
- MySQL:
127.0.0.1:3307 - Redis Stack:
127.0.0.1:6380 - Kafka:
127.0.0.1:9092
如果启用了 RabbitMQ,还会额外使用:
- RabbitMQ:
127.0.0.1:5672 - RabbitMQ 管理后台:
http://127.0.0.1:15672
首次使用时,请确保存在 Insight 数据库:
docker exec insight-mysql mysql -uroot -p123456 -e "CREATE DATABASE IF NOT EXISTS Insight CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"Copy-Item server/configs/config.example.toml server/configs/config.toml然后按自己的环境填写:
- SMTP 邮箱账号和授权码
- MySQL / Redis / Kafka / RabbitMQ 连接信息
- JWT 密钥
- Snowflake 节点号
chatModels / embeddingModels / ragConfig / mcpConfig- 语音服务密钥
当前前端用户可见的聊天模式只有:
chat: AI 助手mcp: 工具模式
知识增强不再作为前端显式 rag 模式暴露,而是通过:
- 会话级知识授权
- 后端隐式检索
来参与回答。
对于支持 reasoning 的 OpenAI 兼容模型:
- 前端可开启思考模式
- 请求体会传
thinkingEnabled - 对于 SiliconFlow 支持思考的模型,会显式下发
enable_thinking / thinking_budget - SSE 流中会返回正文 chunk、reasoning chunk,以及收尾
meta
cd server
go run ./cmd/servercd server
go run ./cmd/mcp-server默认监听:
http://127.0.0.1:8081/mcp
cd frontend
npm install
npm run dev默认访问地址:
- 前端:
http://127.0.0.1:5173 - 后端:
http://127.0.0.1:9090
POST /api/v1/AI/chat/create-session
{
"title": "新会话"
}POST /api/v1/AI/chat/session/{sessionId}/knowledge-grants
{
"kbIds": ["296632358033952768"],
"policy": "auto"
}POST /api/v1/AI/chat/send
{
"question": "总结当前知识库内容",
"chatModelId": "deepseek-ai/DeepSeek-V3.2",
"mode": "chat",
"sessionId": "06fa52f4-b3db-4ff0-b85a-c7f0961a35fd",
"thinkingEnabled": true
}data: {"sessionId":"..."}
data: {"type":"chunk","delta":"你好"}
data: {"type":"reasoning","delta":"先分析用户意图..."}
data: {"type":"meta","usedKnowledge":true,"citations":[...],"thinkingContent":"完整 reasoning 汇总"}
data: [DONE]
make deps-up
make deps-down
make server-run
make mcp-run
make server-test
make server-race
make frontend-build后端:
cd server
go test ./...
go test -race ./...前端:
cd frontend
npm run build