logo
0
0
WeChat Login

Knowledge Maker - RAG 知识库问答服务

基于 RAG(Retrieval-Augmented Generation)技术的智能问答服务,支持流式响应和思考内容展示。

✨ 主要特性

  • 🤖 智能问答:基于知识库检索的 AI 问答服务
  • 🌊 流式响应:支持实时流式输出,提升用户体验
  • 🧠 思考过程展示:支持 reasoning_content 解析,展示 AI 思考过程
  • 📝 统一日志系统:配置化的日志管理,支持按日期分文件存储
  • 🔒 CORS 安全配置:支持配置化的跨域访问控制
  • 🛡️ 验证码支持:支持腾讯云验证码、极验验证码、Google reCAPTCHA、Cloudflare Turnstile 和阿里云验证码,采用 Header 传输方式
  • ⚙️ 灵活配置:支持配置文件和环境变量双重配置方式

🚀 快速开始

环境要求

  • 支持的 AI 服务(如 DeepSeek、混元等)
  • 知识库服务

安装运行

  1. 克隆项目
git clone <repository-url>
cd knowledge-maker
  1. 安装依赖
go mod tidy
  1. 配置服务
# 编辑配置文件
vim config.yml
  1. 启动服务
go run cmd/server/main.go

服务将在 http://localhost:8082 启动。

⚙️ 配置说明

配置文件 (config.yml)

# 服务器配置
server:
  port: "8082"                    # 服务端口
  mode: "debug"                   # 运行模式: debug, release, test
  # 支持多个域名配置,留空表示允许所有域名
  allow_domains:
    - "https://www.mintimate.cc"
    - "https://mintimate.cc"

# AI 服务配置
ai:
  base_url: "https://api.example.com/v1"  # AI 服务地址
  api_key: "your-api-key"                 # API 密钥
  model: "your-model"                     # 使用的模型

# 知识库配置
knowledge:
  base_url: "https://knowledge.example.com/query"  # 知识库查询地址
  token: "your-knowledge-token"                     # 知识库访问令牌
  top_k: 5                                          # 单次查询返回的最大结果数量

# RAG 配置
rag:
  system_prompt: |
    你是 AI 助手,专门检索相关内容...
    # 系统提示词配置

# 日志配置
log:
  dir: "logs"          # 日志目录
  level: "info"        # 日志级别: debug, info, warn, error

# 验证码配置
captcha:
  type: "tencent"      # 验证码类型: tencent(腾讯云)、geetest(极验)、google_v2(Google reCAPTCHA v2)、google_v3(Google reCAPTCHA v3)、cloudflare(Cloudflare Turnstile)或 aliyun(阿里云);留空表示不启用
  
  # 腾讯云验证码配置(当 type 为 tencent 时使用)
  secret_id: "your-tencent-cloud-secret-id"
  secret_key: "your-tencent-cloud-secret-key"
  captcha_app_id: 66666666
  app_secret_key: "your-captcha-app-secret-key"
  endpoint: "captcha.tencentcloudapi.com"
  captcha_type: 9      # 验证码类型:9为滑动验证码
  
  # 极验验证码配置(当 type 为 geetest 时使用)
  geetest_id: "your-geetest-id"      # 极验公钥
  geetest_key: "your-geetest-key"    # 极验密钥
  geetest_url: "http://gcaptcha4.geetest.com/validate"  # 极验验证接口地址
  
  # Google reCAPTCHA 配置(当 type 为 google_v2 或 google_v3 时使用)
  google_recaptcha_site_key: "goooooooooooogleIdkey"   # 客户端密钥(Site Key)
  google_recaptcha_secret_key: "goooooooooooogleSecretKey" # 服务端密钥(Secret Key)
  google_recaptcha_url: "https://www.recaptcha.net/recaptcha/api/siteverify" # 验证接口 URL
  google_min_score: 0.5                                                    # 最小分数阈值(仅 v3 使用,默认 0.5)
  
  # Cloudflare Turnstile 配置(当 type 为 cloudflare 时使用)
  cloudflare_site_key: "0x4AAAAAAABkMYinukE_rfkH"     # 客户端密钥(Site Key)
  cloudflare_secret_key: "0x4AAAAAAABkMYinukE_rfkI"   # 服务端密钥(Secret Key)
  cloudflare_url: "https://challenges.cloudflare.com/turnstile/v0/siteverify" # 验证接口 URL
  
  # 阿里云验证码配置(当 type 为 aliyun 时使用)
  aliyun_access_key_id: "your-aliyun-access-key-id"       # 阿里云访问密钥 ID
  aliyun_access_key_secret: "your-aliyun-access-key-secret" # 阿里云访问密钥 Secret
  aliyun_captcha_app_id: "your-aliyun-captcha-app-id"     # 阿里云验证码应用 ID
  aliyun_endpoint: "captcha-dualstack.cn-shanghai.aliyuncs.com" # 阿里云验证码服务端点

环境变量配置

环境变量优先级高于配置文件:

# 服务器配置
export SERVER_PORT="8082"
export GIN_MODE="release"
# 支持多个域名,用逗号分隔
export ALLOW_DOMAINS="https://www.mintimate.cc,https://mintimate.cc"
# 向后兼容:单域名配置(如果没有设置 ALLOW_DOMAINS)
export ALLOW_DOMAIN="https://yourdomain.com"

# AI 服务配置
export AI_BASE_URL="https://api.example.com/v1"
export AI_API_KEY="your-api-key"
export AI_MODEL="your-model"

# 知识库配置
export KNOWLEDGE_BASE_URL="https://knowledge.example.com/query"
export KNOWLEDGE_TOKEN="your-knowledge-token"
export KNOWLEDGE_TOP_K="5"

# RAG 配置
export RAG_SYSTEM_PROMPT="你是 AI 助手..."

# 日志配置
export LOG_DIR="./logs"

# 验证码配置
export CAPTCHA_TYPE="tencent"  # 或 "geetest" 或 "google_v2" 或 "google_v3" 或 "cloudflare" 或 "aliyun"

# 腾讯云验证码配置
export TENCENTCLOUD_SECRET_ID="your-secret-id"
export TENCENTCLOUD_SECRET_KEY="your-secret-key"
export CAPTCHA_APP_ID="66666666"
export CAPTCHA_APP_SECRET_KEY="your-app-secret-key"
export CAPTCHA_ENDPOINT="captcha.tencentcloudapi.com"
export TENCENT_CAPTCHA_TYPE="9"

# 极验验证码配置
export GEETEST_ID="your-geetest-id"
export GEETEST_KEY="your-geetest-key"
export GEETEST_URL="http://gcaptcha4.geetest.com/validate"

# Google reCAPTCHA 配置
export GOOGLE_RECAPTCHA_SITE_KEY="goooooooooooogleIdkey"
export GOOGLE_RECAPTCHA_SECRET_KEY="goooooooooooogleSecretKey"
export GOOGLE_RECAPTCHA_URL="https://www.recaptcha.net/recaptcha/api/siteverify"
export GOOGLE_MIN_SCORE="0.5"

# Cloudflare Turnstile 配置
export CLOUDFLARE_SITE_KEY="0x4AAAAAAABkMYinukE_rfkH"
export CLOUDFLARE_SECRET_KEY="0x4AAAAAAABkMYinukE_rfkI"
export CLOUDFLARE_URL="https://challenges.cloudflare.com/turnstile/v0/siteverify"

# 阿里云验证码配置
export ALIYUN_ACCESS_KEY_ID="your-aliyun-access-key-id"
export ALIYUN_ACCESS_KEY_SECRET="your-aliyun-access-key-secret"
export ALIYUN_CAPTCHA_APP_ID="your-aliyun-captcha-app-id"
export ALIYUN_ENDPOINT="captcha-dualstack.cn-shanghai.aliyuncs.com"

📡 API 接口

健康检查

GET /api/v1/health

普通问答

POST /api/v1/chat
Content-Type: application/json
# 验证码信息通过 Header 传输(根据配置的验证码类型选择相应 Header)
X-Captcha-Ticket: 验证码票据                    # 腾讯云验证码
X-Captcha-Randstr: 验证码随机字符串              # 腾讯云验证码
X-Geetest-Lot-Number: 验证流水号                # 极验验证码
X-Geetest-Captcha-Output: 验证输出              # 极验验证码
X-Geetest-Pass-Token: 通行令牌                  # 极验验证码
X-Geetest-Gen-Time: 生成时间                    # 极验验证码
X-Recaptcha-Token: Google reCAPTCHA 响应令牌     # Google reCAPTCHA
X-Recaptcha-Action: reCAPTCHA 动作(可选)       # Google reCAPTCHA
X-Cf-Turnstile-Token: Cloudflare Turnstile 响应令牌  # Cloudflare Turnstile
X-Aliyun-Captcha-Token: 阿里云验证码响应令牌      # 阿里云验证码

{
  "Query": "你的问题",
  "History": []  // 可选的对话历史
}

流式问答

POST /api/v1/chat/stream
Content-Type: application/json
# 验证码信息通过 Header 传输(根据配置的验证码类型选择相应 Header)
X-Captcha-Ticket: 验证码票据                    # 腾讯云验证码
X-Captcha-Randstr: 验证码随机字符串              # 腾讯云验证码
X-Geetest-Lot-Number: 验证流水号                # 极验验证码
X-Geetest-Captcha-Output: 验证输出              # 极验验证码
X-Geetest-Pass-Token: 通行令牌                  # 极验验证码
X-Geetest-Gen-Time: 生成时间                    # 极验验证码
X-Recaptcha-Token: Google reCAPTCHA 响应令牌     # Google reCAPTCHA
X-Recaptcha-Action: reCAPTCHA 动作(可选)       # Google reCAPTCHA
X-Cf-Turnstile-Token: Cloudflare Turnstile 响应令牌  # Cloudflare Turnstile
X-Aliyun-Captcha-Token: 阿里云验证码响应令牌      # 阿里云验证码

{
  "Query": "你的问题",
  "History": []  // 可选的对话历史
}

流式响应格式:

event: data
data: {"content": "<think>"}

event: data
data: {"content": "AI 的思考内容..."}

event: data
data: {"content": "</think>"}

event: data
data: {"content": "<answer>"}

event: data
data: {"content": "AI 的回答内容..."}

event: done
data: {"success": true, "message": "回答完成"}

🛠️ 开发指南

项目结构

knowledge-maker/
├── cmd/server/          # 主程序入口
├── internal/
│   ├── config/         # 配置管理
│   ├── handler/        # HTTP 处理器
│   ├── logger/         # 日志系统
│   ├── model/          # 数据模型
│   └── service/        # 业务逻辑
├── logs/               # 日志文件
├── static/             # 静态资源
└── config.yml          # 配置文件

添加新功能

  1. internal/service/ 中添加业务逻辑
  2. internal/handler/ 中添加 HTTP 处理
  3. internal/model/ 中定义数据结构
  4. 更新配置文件和环境变量支持

📄 许可证

本项目采用 GPL-3.0 许可证。详见 LICENSE 文件。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📞 支持

如有问题,请提交 Issue 或联系维护者。

About

基于知识库 API 和 OpenAI 格式 AI 调用接口实现 RAG 检索流式返回 🚀

RAG知识库