Appearance
AI 平台层
面向 AI Agent 的企业运行时平台(Enterprise Agent Runtime)
让任何大模型都能安全地连接企业系统、执行企业任务、调用企业能力,而不是仅仅回答问题。
sss-run 不是 ChatGPT,不是 Dify,是企业 AI 的执行层。它不回答问题,它执行任务。
平台将所有能力自动暴露为 AI 可调用的 Tool,任意 LLM(OpenAI / Claude / DeepSeek / Qwen / Gemini / Ollama)通过 OpenAI 兼容协议或 MCP 即可调用——查询数据库、发送邮件、生成报表、调用支付,全部经过风险分级、人机审批与操作审计。
核心理念
- Tool 是一等公民:写一个接口 = 自动发布为 REST / MCP / OpenAI Tool / Dify Tool / n8n Node / LangGraph Tool
- 平台中立:不绑定任何 AI 平台,Dify、n8n、Claude Desktop、Cursor、OpenAI SDK 均可接入
- 零侵入:AI 层位于
internal/ai/,关闭后平台退回普通 API 平台 - 单 EXE 零依赖:默认 SQLite + 进程内 LRU,无需 redis/Milvus,私有化一键部署
- 安全执行:危险操作人机审批、全量审计日志、权限强制校验(企业运行时底线)
与同类产品的差异
| 对比 | 它们 | sss-run |
|---|---|---|
| ChatGPT | 聊天应用 | 执行引擎 |
| Dify | AI 应用搭建器 | 能力供给层 |
| Magic-API | API 平台 | Tool 平台 |
| n8n | 流程编排器 | 能力供给方(n8n 调用我们) |
快速开始
1. 配置 LLM
在「设置 → AI 配置」中填写 API Key、Base URL、Model(默认 DeepSeek)。配置后 Gateway 自动初始化。
2. OpenAI 兼容端点
直接把 https://你的域名/v1 作为 OpenAI base_url 接入任意客户端:
bash
curl -X POST http://localhost:9301/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [{"role":"user","content":"查询 test_demo 表前 5 条数据"}],
"stream": false
}'请求可不带 tools 字段,Gateway 自动注入平台全部启用工具。LLM 决定调用哪个工具时,平台自动执行并回灌结果,最多循环 8 轮。
API 列表
Tool Registry
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /ai/tools | 列出所有已注册工具 |
| GET | /ai/tools/:name | 获取工具详情 |
| POST | /ai/tools/:name/invoke | 调用工具,body: {"args":{...}} |
| POST | /ai/tools/reload | 重新扫描加载工具 |
| GET | /ai/export/openapi | 导出 OpenAPI 3.0(Dify 可导入) |
OpenAI 兼容
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /v1/chat/completions | 对话(含 Tool Calling,支持 stream) |
| GET | /v1/tools | OpenAI tools schema 导出 |
| POST | /v1/embeddings | 文本向量化 |
Plugin Marketplace
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /ai/marketplace/plugins | 列出已安装插件 |
| GET | /ai/marketplace/plugins/:name | 获取插件详情 |
| POST | /ai/marketplace/plugins/upload | 上传 .wasm + manifest 安装(multipart) |
| POST | /ai/marketplace/plugins/install | JSON 方式安装(wasm 为 base64) |
| DELETE | /ai/marketplace/plugins/:name | 卸载插件 |
| POST | /ai/marketplace/plugins/:name/reload | 重载插件缓存 |
| POST | /ai/marketplace/plugins/:name/dispatch | 调用插件函数,body: {"function":"add","args":[1,2]} |
| GET | /ai/marketplace/keys | 查看公钥/私钥 |
| GET | /ai/marketplace/categories | 列出所有插件分类(含插件数量) |
| POST | /ai/marketplace/categories | 创建分类,body: {"name":"database","label":"数据库","sort":1} |
| PUT | /ai/marketplace/categories/:name | 更新分类(label/sort/remark) |
| DELETE | /ai/marketplace/categories/:name | 删除分类 |
接入各 AI 平台
Dify
- 调用
GET /ai/export/openapi获取 OpenAPI YAML - 在 Dify「工具 → 自定义工具」中粘贴导入
- 在 Agent 应用中启用该工具集
n8n
把 /v1/chat/completions 作为 OpenAI 节点的 base_url,API Key 用平台认证 token。
LangChain / LangGraph
python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:9301/v1", api_key="<token>")
# tools 自动注入,无需手动传 tools 参数Claude Desktop / Cursor(MCP)
在客户端 MCP 配置中添加:
json
{
"mcpServers": {
"sss-run": {
"url": "http://localhost:9301/mcp"
}
}
}MCP 工具从 Tool Registry 动态生成,与 OpenAI 端点共享同一来源。
Tool 自动注册
平台启动时自动扫描 s_sss_sss 表中启用的 api/function 脚本,注册为 Tool(命名 api_<key>)。开发者无需任何额外配置,写完脚本即自动成为 AI Tool。
支持的 Tool 来源:
| 来源 | 说明 |
|---|---|
| script | s_sss_sss 表 JS/Go 脚本(自动扫描) |
| builtin | Go 内建函数(registry.RegisterBuiltin) |
| wasm | WASM 插件 |
| rest | 外部 REST 接口 |
部署形态
单 EXE + sss-run.db + config.yaml,零安装零外部依赖。默认 SQLite,无需 redis/Milvus。
Agent Runtime
Agent 是带 system prompt + 工具子集 + 记忆策略的执行单元。平台预置 4 个模板,开箱即用。
预置 Agent
| 名称 | 用途 |
|---|---|
data-analyst | 数据分析师:查询数据库、分析数据 |
ops-assistant | 运维助手:系统巡检、日志排查 |
general-assistant | 通用助手(含长期记忆) |
finance-assistant | 财务助手:对账、报表 |
运行 Agent
bash
curl -X POST http://localhost:9301/ai/agents/data-analyst/run \
-H "Content-Type: application/json" \
-d '{"input":"查询 test_demo 表前 5 条数据并总结"}'返回结果含 run_id、session_id、output、trace。传入相同 session_id 可延续上下文。
三层记忆
- 短期:进程内 LRU,保留最近 20 条对话
- 工作:Session 状态(跨请求保持任务变量)
- 长期:向量化持久(
general-assistant启用),Agent 跨会话记住事实
自定义 Agent
bash
curl -X POST http://localhost:9301/ai/agents \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"description": "我的助手",
"system_prompt": "你是一名...",
"model": "deepseek-chat",
"memory_policy": "short",
"max_steps": 8
}'tools 留空表示使用全部启用工具;指定数组则限定工具子集。
RAG 知识库
零依赖向量检索:文档向量化后存 SQLite BLOB,纯 Go 余弦相似度检索。
创建知识库 + 上传文档
bash
# 创建知识库
curl -X POST http://localhost:9301/ai/knowledge \
-d '{"name":"产品手册","embedding_model":"bge-large-zh"}'
# 上传文档(自动切片+向量化)
curl -X POST http://localhost:9301/ai/knowledge/<id>/documents \
-F "file=@manual.txt"检索
bash
curl -X POST http://localhost:9301/ai/knowledge/<id>/search \
-d '{"query":"如何配置数据源","top_k":5}'Agent 自动调用
knowledge_search 自动注册为 Tool,Agent 回答需要文档支持的问题时会自动检索知识库。
Embedding 模型:默认
bge-large-zh,需在 LLM 配置中支持。本地部署可用 Ollama 运行bge-large/nomic-embed-text。
插件市场(WASM Marketplace)
平台内置 WASM 插件市场,支持上传、签名、安装、卸载、调用 WASM 插件。所有插件使用 Ed25519 算法签名,确保插件完整性与来源可信。
密钥管理
首次启动时自动在 plugins/keys/ 目录生成 Ed25519 密钥对:
ed25519.pub:公钥(hex 编码,可分发给客户端校验)ed25519.priv:私钥(hex 编码,用于签名上传的 .wasm 文件)
bash
# 查看当前密钥对
curl http://localhost:9301/ai/marketplace/keys上传安装插件
通过 multipart 上传 .wasm 文件 + manifest JSON:
bash
curl -X POST http://localhost:9301/ai/marketplace/plugins/upload \
-F "file=@math-util.wasm" \
-F 'manifest={
"name": "math-util",
"version": "1.0.0",
"display_name": "数学工具集",
"author": "dev",
"description": "提供加减乘除等数学运算",
"category": "util",
"functions": ["add", "sub", "mul", "div"],
"permissions": []
}'若 manifest 中
signature留空,服务端会自动用私钥签名;若填写,则校验签名是否匹配。
列出已安装插件
bash
curl http://localhost:9301/ai/marketplace/plugins调用插件函数
bash
curl -X POST http://localhost:9301/ai/marketplace/plugins/math-util/dispatch \
-d '{"function":"add","args":[1,2]}'
# 返回 {"result":3}卸载插件
bash
curl -X DELETE http://localhost:9301/ai/marketplace/plugins/math-util前端使用
左侧导航栏点击「插件」图标进入插件市场,分为左右两栏:
左边栏:分类管理
- 顶部「全部插件」节点显示所有插件总数
- 分类列表(数据库/文件/HTTP/工具等),每项显示分类名 + 插件数量徽标
- 点击工具栏「+」按钮添加分类
- 右键分类节点弹出菜单:修改分类 / 删除分类
- 点击分类节点 → 右侧主面板过滤显示该分类下的插件
右侧主面板:插件列表
- 卡片式插件展示(名称、版本、作者、函数列表、签名状态)
- 上传安装对话框(填写 manifest + 选择 .wasm 文件,分类从已管理分类中选择)
- 在线调用任意插件函数
- 一键重载 / 卸载
- 查看公钥/私钥
分类管理
分类作为独立的一等公民管理(表 s_ai_plugin_categories),首次启动自动种子 7 个默认分类:数据库、文件、HTTP、工具、AI、安全、邮件。
bash
# 列出所有分类
curl http://localhost:9301/ai/marketplace/categories
# 创建分类
curl -X POST http://localhost:9301/ai/marketplace/categories \
-d '{"name":"excel","label":"Excel","sort":8,"remark":"Excel 处理插件"}'
# 更新分类
curl -X PUT http://localhost:9301/ai/marketplace/categories/excel \
-d '{"label":"Excel 工具","sort":9,"remark":"更新备注"}'
# 删除分类
curl -X DELETE http://localhost:9301/ai/marketplace/categories/excelWASM 插件开发约定
插件需导出以下函数:
alloc(size i32) -> i32:分配内存dealloc(ptr i32):释放内存(可选)__dispatch(fn_ptr i32, fn_len i32, args_ptr i32, args_len i32) -> i64:统一调度入口,返回(ptr << 32) | len__functions() -> i64:返回函数列表 JSON
AI Chat 三种模式
工作台左侧 AI 面板支持三种工作模式,可通过顶部切换:
| 模式 | 用途 | 端点 | 特性 |
|---|---|---|---|
| 聊天 | 自由对话,问答解惑 | /sss/sss/ai/chat | 不注入编辑器上下文,不显示代码插入按钮 |
| 编码 | 生成脚本代码 | /sss/sss/ai/chat | 注入当前编辑器内容,支持插入/替换代码到编辑器 |
| Agent | 自动调用工具执行任务 | /v1/chat/completions | 自动注入 Registry 全部工具,服务端执行 Tool Calling 循环(最多 8 轮),可执行任意脚本 |
Agent 模式工作流
- 用户描述任务(如"查询用户表前 10 条数据")
- LLM 分析需求,返回
tool_calls(如调用db_query工具) - 服务端
gateway.ChatWithTools自动执行工具,结果回灌给 LLM - LLM 根据结果继续推理或生成最终回答
- 前端实时展示工具调用过程与最终结果
Agent 模式下所有工具调用都会真实执行,请谨慎操作危险动作(如删除数据)。