基于 RAG(Retrieval-Augmented Generation)技术的智能问答服务,支持流式响应和思考内容展示。
git clone <repository-url>
cd knowledge-maker
go mod tidy
# 编辑配置文件
vim config.yml
go run cmd/server/main.go
服务将在 http://localhost:8082 启动。
# 服务器配置
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"
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 # 配置文件
internal/service/ 中添加业务逻辑internal/handler/ 中添加 HTTP 处理internal/model/ 中定义数据结构本项目采用 GPL-3.0 许可证。详见 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!
如有问题,请提交 Issue 或联系维护者。