AI 聊天后端,集知识库问答、MCP 工具与 OAuth 认证于一体。
- 从表格(CSV)导入知识库文档,保存到 PostgreSQL
- 基于文档标题和内容,使用 Embedding API 生成文档向量
- 使用 Embedding API 生成文档向量
- 基于向量搜索实现高质量问答
- 欢迎消息和预设消息
- 基于 Redis 的对话历史
- RESTful API
- 支持 text/event-stream 流式响应
- OAuth2 客户端登录认证
- 内置 MCP(Model Context Protocol)工具支持
GET /api/session
无
返回当前登录状态和用户信息。若未登录且
auth为 true,前端应跳转到data.uri进行 OAuth 登录。
http 状态码 content-type 响应 200application/json{"status":"Success","data":{"auth":false,"user":{...}}}(已登录)200application/json{"status":"Success","data":{"auth":true,"uri":"/api/auth/login"}}(未登录)
GET /api/me
无
http 状态码 content-type 响应 200application/json{"data": {"avatar": "", "name": "name", "uid": "uid"}}401application/json{"error": "", "message": ""}
POST /api/chat-sse 或 /api/chat 搭配 {stream: true}
名称 类型 数据类型 描述 csid可选 string 会话 ID prompt必填 string 提问消息 stream可选 bool 启用 event-stream,在 /api/chat-sse中强制开启
http 状态码 content-type 响应 200text/event-stream{"delta": "消息片段", "id": "会话 ID"}401application/json{"status": "Unauthorized", "message": ""}
# 安装依赖(包含 forego 用于加载环境变量)
make deps
# 或手动执行
go mod tidy
go install github.com/ddollar/forego@latest
# 从示例创建 .env 并配置(更新 PG/Redis URL、API Key 等)
test -e .env || cp .env.example .env
# 使用 .env 中的环境变量启动服务器
forego start
# 或直接运行(开发模式)
forego run go run . web
welcome: "你好,我是你的虚拟助手。有什么可以帮助你的吗?"
systemPrompt: "你是一位有用的助手。"
toolsPrompt: "根据用户问题选择合适的工具并调用来解决问题。"
# 或配置自定义工具描述
tools:
kb_search: "在知识库中搜索相关内容。当遇到未知或不确定的问题时,优先查阅知识库。"
kb_create: "创建新的知识库文档,所有参数必填。注意:除非用户明确要求补充内容,否则不要调用。"
fetch: "从互联网获取 URL 内容并可选地提取为 markdown 格式"
memory_list: "列出所有已存储的记忆"
memory_recall: "通过关键词搜索记忆"
memory_store: "存储新的记忆"
memory_forget: "根据 key 删除记忆"welcome: 显示给用户的欢迎消息systemPrompt: AI 对话的系统提示toolsPrompt: 工具使用说明(当 MCP 工具可用时使用)tools: 自定义工具描述(可选,覆盖内置默认值) 注意:记忆工具 (memory_*) 与登录身份绑定并隔离。
完整示例请参考 data/preset.example.yaml
CREATE USER morign WITH LOGIN PASSWORD 'mydbusersecret';
CREATE DATABASE morign WITH OWNER = morign ENCODING = 'UTF8';
GRANT ALL PRIVILEGES ON DATABASE morign to morign;
\c morign
# 安装扩展 https://github.com/pgvector/pgvector
CREATE EXTENSION vector;
USAGE:
morign [全局选项] 命令 [命令选项] [参数...]
COMMANDS:
usage, env 显示用法
initdb 初始化数据库模式
import 从 csv 导入文档
export 导出文档到 csv/jsonl
embedding, embedding-prompt 读取提示文档并生成嵌入
agent, llm, chat 测试 LLM 功能
web, run 运行 Web 服务器
version, ver 显示版本
help, h 显示命令帮助
GLOBAL OPTIONS:
--help, -h 显示帮助
测试 LLM 功能的命令行工具:
# 非流式对话
./morign agent -m "你好"
# 流式对话
./morign agent -m "你好" -s
# 显示详细日志
./morign agent -m "你好" -v参数:
-m, --message: 发送的消息 (必填)-s, --stream: 启用流式响应-v, --verbose: 显示日志 (默认关闭)
./morign usage# HTTP 服务器
MORIGN_HTTP_LISTEN=:3002
# 可选:预设数据
MORIGN_PRESET_FILE=./data/preset.yaml
# 可选:OAuth2 登录
MORIGN_AUTH_REQUIRED=true
OAUTH_PREFIX=https://portal.my-company.xyz
# 可选:代理
HTTPS_PROXY=socks5://proxy.my-company.xyz:1081| 变量 | 默认值 | 说明 |
|---|---|---|
MORIGN_PG_STORE_DSN |
postgres://morign@localhost/morign | PostgreSQL 连接串 |
MORIGN_REDIS_URI |
redis://localhost:6379/1 | Redis 连接串 |
MORIGN_HTTP_LISTEN |
:5001 | HTTP 监听地址 |
MORIGN_AUTH_REQUIRED |
false | 是否启用认证 |
MORIGN_KEEPER_ROLE |
keeper | 写操作工具需要的角色 |
MORIGN_VECTOR_THRESHOLD |
0.39 | 向量相似度阈值 |
MORIGN_VECTOR_LIMIT |
5 | 向量匹配数量 |
每个 Provider 需要 API_KEY 和 MODEL,可选 URL 和 TYPE 用于自定义端点:
| Provider | 用途 | 必需变量 |
|---|---|---|
INTERACT |
对话/补全 | API_KEY, MODEL |
EMBEDDING |
向量嵌入 | API_KEY, MODEL |
SUMMARIZE |
文本摘要 | API_KEY, MODEL |
支持的 Provider Type: openai, anthropic, openrouter, ollama
示例:
# Interact provider (支持 openai/anthropic/openrouter/ollama)
MORIGN_INTERACT_API_KEY=sk-xxx
MORIGN_INTERACT_MODEL=gpt-4o-mini
MORIGN_INTERACT_TYPE=openai # 可选,默认 openai
# 使用 Anthropic
MORIGN_INTERACT_TYPE=anthropic
MORIGN_EMBEDDING_API_KEY=sk-xxx
MORIGN_EMBEDDING_API_KEY=sk-xxx
MORIGN_EMBEDDING_MODEL=text-embedding-3-small
MORIGN_SUMMARIZE_API_KEY=sk-xxx
MORIGN_SUMMARIZE_MODEL=gpt-4o-mini
提示:运行
./morign usage可查看当前所有配置
- 准备 CSV 文件作为语料库文档
- 导入文档
- 使用 Completion 从文档生成问答
- 使用 Embedding 从问答生成提示和向量
- 完成,开始聊天
| title | heading | content |
|---|---|---|
| 我的公司 | 简介 | 一家伟大的公司源于一个天才的想法。 |
./morign initdb
./morign import mycompany.csv
./morign embedding- 进入前端项目目录
- 构建前端页面和静态资源
- 复制到 ./htdocs
示例:
cd ../Calisyn
npm run build
rsync -a --delete dist/* ../morign/htdocs/
cd -在开发和调试阶段,你仍可以使用代理与前端项目协作。

