Skip to content

RhythmicWave/Insight

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Insight

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 + test
  • internal/platform/* 承载共享基础设施
  • internal/app 作为唯一装配入口
  • user / chat / knowledge / image 做 feature 聚合
  • file/ 保留为旧链路兼容能力,不再作为新的知识库主模块继续演进

功能概览

用户与鉴权

  • 邮箱验证码发送
  • 用户注册与登录
  • JWT 鉴权
  • Redis 验证码存储与 Lua 原子校验删除

AI 对话

  • 多会话聊天管理
  • 空会话创建
  • SSE 流式响应
  • 流式中断
  • 会话与消息持久化
  • 会话级知识授权
  • 回答中返回 usedKnowledge / citations / thinkingContent
  • 思考模式:支持模型时可显式开启 thinkingEnabled

知识库

  • 创建、更新、删除知识库
  • 上传 .md/.txt 文档
  • 异步解析、切块、向量索引
  • 查看文档详情与 chunk 预览
  • 删除文档、重建索引
  • 按会话授权知识库并参与隐式检索

MCP

  • 在 AI 对话中触发 MCP 工具调用
  • 当前实现包含天气查询工具链路
  • 通过两阶段提示完成“识别工具调用意图 -> 调用工具 -> 汇总回答”

图片识别

  • 上传图片
  • 使用 ONNXRuntime + MobileNetV2 本地推理
  • 返回分类结果

TTS

  • 创建语音任务
  • 查询任务状态与语音结果 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
Loading

项目结构

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/models
  • GET /api/v1/AI/chat/sessions
  • POST /api/v1/AI/chat/create-session
  • POST /api/v1/AI/chat/send-new-session
  • POST /api/v1/AI/chat/send
  • POST /api/v1/AI/chat/send-stream-new-session
  • POST /api/v1/AI/chat/send-stream
  • POST /api/v1/AI/chat/history
  • POST /api/v1/AI/chat/delete-session
  • GET /api/v1/AI/chat/session/{sessionId}/knowledge-grants
  • POST /api/v1/AI/chat/session/{sessionId}/knowledge-grants
  • POST /api/v1/AI/chat/tts
  • GET /api/v1/AI/chat/tts/query

知识库

  • GET /api/v1/knowledge-bases
  • POST /api/v1/knowledge-bases
  • POST /api/v1/knowledge-bases/{kbId}/update
  • POST /api/v1/knowledge-bases/{kbId}/delete
  • GET /api/v1/knowledge-bases/{kbId}/documents
  • POST /api/v1/knowledge-bases/{kbId}/documents/upload
  • GET /api/v1/knowledge-documents/{documentId}
  • GET /api/v1/knowledge-documents/{documentId}/chunks
  • POST /api/v1/knowledge-documents/{documentId}/reindex
  • POST /api/v1/knowledge-documents/{documentId}/delete

启动方式

1. 使用 Docker 启动依赖

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;"

2. 准备后端配置

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

3. 启动后端

cd server
go run ./cmd/server

4. 启动 MCP 服务(可选)

cd server
go run ./cmd/mcp-server

默认监听:

  • http://127.0.0.1:8081/mcp

5. 启动前端

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
}

流式 SSE 事件示例

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

About

基于 Go 实现 AI 应用服务平台

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors