Documentation
¶
Overview ¶
Package dq 是 gf-mate 插件的对外门面。
使用方式(嵌入 GoFrame 宿主):
dq.Init(g.DB(), nil) // 初始化,使用默认配置
dq.Register(model.Dataset{...}) // 注册数据集(白名单模式的唯一入口)
dq.Bind(ctx, group) // 挂载路由到宿主 server group
Index ¶
- Constants
- func AddSource(name string, db gdb.DB) error
- func Bind(ctx context.Context, group *ghttp.RouterGroup, server ...*ghttp.Server) error
- func BindWidget(group *ghttp.RouterGroup) error
- func Engine() (*queryengine.Engine, error)
- func FromStruct(s interface{}, opts ...func(*FromStructOptions)) (*model.Dataset, error)
- func Init(db gdb.DB, cfg *Config) error
- func Inspect(ctx context.Context, table string) (*model.Dataset, error)
- func InspectAndRegister(ctx context.Context, table string) error
- func Register(ds model.Dataset) error
- func SetMode(mode string) error
- func WidgetJS() []byte
- type AssistantConfig
- type Config
- type Dataset
- type EnumItem
- type Field
- type FromStructOptions
- type LLMEndpoint
- type RawSQLConfig
- type RenderConfig
Constants ¶
const ( RoleDimension = model.RoleDimension RoleMeasure = model.RoleMeasure )
RoleDimension / RoleMeasure 字段角色。
const (
// DefaultMode 默认白名单模式:只开放显式 Register 的数据集。
DefaultMode = "whitelist"
)
默认配置常量。
Variables ¶
This section is empty.
Functions ¶
func AddSource ¶ added in v0.4.0
AddSource 注册命名数据源(多数据库支持)。 例如宿主配置了两个库:dq.AddSource("go", g.DB("go")), 之后 Register 的数据集声明 Source: "go" 即自动路由到该库。 必须在 Init 之后调用;重复注册同名源返回错误。
func Bind ¶
Bind 挂载路由到宿主 server group,prefix 如 "/dq"。
鉴权说明:插件不负责鉴权,路由直接挂到传入的 group; 宿主应自行在 group 上挂中间件(如 g.Middleware.CORS、登录鉴权), 插件只提供数据能力,不做任何权限判断。
静态资源:可选传入 server(如 g.Server())用于把 frontend/ 目录 挂到 group 前缀下(AddStaticPath)。不传 server 时跳过静态资源挂载。 注意:ghttp 的静态文件优先级高于动态路由,因此 /dq/ 会命中静态首页。
func BindWidget ¶ added in v0.5.0
func BindWidget(group *ghttp.RouterGroup) error
BindWidget 把内嵌的 widget 脚本挂到 group 下的 /dist/dq-widget.js。
与 Bind 分开挂载:<script> 标签加载脚本时带不了 Authorization 头,宿主通常把 脚本挂到不鉴权的分组,对话与数据集接口仍由 Bind 挂到鉴权分组。脚本本身不含 任何数据与配置,公开访问不泄露业务信息。
func FromStruct ¶
func FromStruct(s interface{}, opts ...func(*FromStructOptions)) (*model.Dataset, error)
FromStruct 从 GoFrame entity(ORM struct)反射生成 Dataset 草稿,零手写字段。
小白快速集成:把 model 指针传入即得字段定义,无需手写 Fields 列表。 反射规则见 model.FromStruct 文档:
- orm tag 取真实列名;无 orm tag 用字段名 snake_case。
- Go 类型映射 Field.Type(string→string、数值→number、时间→datetime)。
- 数值字段默认 measure(count/sum/avg/max/min),其余 dimension。
- dq tag 覆盖语义:dq:"label=状态,role=dimension,type=enum,enum=paid:已支付"。
- dq:"-" 跳过字段;默认跳过 *_json 与 DeletedAt。
返回的 Dataset 仅含元数据,未注册;调用 Register 注册。
func Init ¶
Init 初始化插件。db 传宿主的 g.DB() 或 g.DB("name");cfg 可为 nil 用默认值。 重复调用返回错误(幂等保护)。 当 cfg.Mode == "all" 时,初始化后自动执行全库表注册(见 SetMode)。
func InspectAndRegister ¶
InspectAndRegister 读表结构生成 Dataset 草稿并直接注册(all 模式的核心动作)。
func Register ¶
Register 注册数据集(白名单模式的唯一入口)。 多数据源场景:ds.Source 填逻辑源名(对应 AddSource 注册的名称),空 = 默认源。 必须在 Init 之后调用。
Types ¶
type AssistantConfig ¶
type AssistantConfig struct {
Enabled bool `json:"enabled"`
BaseURL string `json:"baseUrl"`
APIKey string `json:"apiKey"`
Model string `json:"model"`
MaxToolCallsPerTurn int `json:"maxToolCallsPerTurn"`
RequestTimeoutSec int `json:"requestTimeoutSec"`
MaxContextChars int `json:"maxContextChars"`
EnableThinking *bool `json:"enableThinking,omitempty"` // 是否开启深度思考(默认开启)
ReasoningEffort string `json:"reasoningEffort,omitempty"` // 思考强度:low / high / max
// SystemPromptAppend 宿主自定义提示词,拼到内置 system prompt 末尾。
// 用于声明方言语法、业务口径、字段约定等,减少模型试错、提升响应速度。
SystemPromptAppend string `json:"systemPromptAppend,omitempty"`
// Resolver 每次对话前动态解析 LLM 端点(宿主从后台配置中心读取凭据时使用,
// 改配置无需重启)。非 nil 时视为已启用,并优先于 BaseURL/APIKey/Model 静态配置;
// 返回 error 时对话接口返回 503,错误文案原样透出(宿主应保证文案不含密钥)。
Resolver func(ctx context.Context) (LLMEndpoint, error) `json:"-"`
}
AssistantConfig AI 助手配置。
type Config ¶
type Config struct {
Mode string `json:"mode"` // whitelist|all
ExcludeTables []string `json:"excludeTables"`
IncludeSchemas []string `json:"includeSchemas"`
// CORSOrigins 跨域来源白名单。非空时只回显列表内的 Origin;
// 为空(默认)回显任意 Origin 并允许携带 Cookie——仅建议内网/开发环境使用。
CORSOrigins []string `json:"corsOrigins"`
RawSQL RawSQLConfig `json:"rawSql"` // 原生 SQL 模式(默认开启,AI 唯一查数通道)
Assistant AssistantConfig `json:"assistant"`
Render RenderConfig `json:"render"`
}
Config 插件配置。
type FromStructOptions ¶
type FromStructOptions = model.FromStructOptions
FromStructOptions 反射选项,见 model.FromStructOptions。
type LLMEndpoint ¶ added in v0.5.0
LLMEndpoint 动态解析出的 OpenAI 兼容端点。 BaseURL 可以是根路径(如 https://api.deepseek.com/v1,自动拼 /chat/completions), 也可以是以 /chat/completions 结尾的完整地址(原样使用)。
type RawSQLConfig ¶
type RawSQLConfig struct {
Enabled *bool `json:"enabled,omitempty"` // nil = 默认开启;显式 false 才关闭
MaxRows int `json:"maxRows"` // 强制行数上限,默认 500
TimeoutSec int `json:"timeoutSec"` // 单条 SQL 超时(秒),默认 30
}
RawSQLConfig 原生 SQL 模式配置(AI 写 SQL、只读门禁,默认开启——这是 AI 的唯一查数通道)。 开启后 AI 助手可通过 sql_query 工具提交任意复杂度的只读 SELECT (JOIN/窗口函数/CTE/子查询均可),过五道安全防线后执行。 注意:此模式绕过 RowScope 行级权限与字段白名单,仅建议可信内网环境开启。
type RenderConfig ¶
type RenderConfig struct {
EnabledTypes []string `json:"enabledTypes"`
}
RenderConfig 渲染模板配置。
Directories
¶
| Path | Synopsis |
|---|---|
|
examples
|
|
|
server
command
gf-mate 演示宿主(demo host)。
|
gf-mate 演示宿主(demo host)。 |
|
internal
|
|
|
controller
Package controller 提供 gf-mate 插件的 HTTP API 层。
|
Package controller 提供 gf-mate 插件的 HTTP API 层。 |
|
logic/assistant
Package assistant AI 助手:LLM 工具调用循环 → 查询引擎 → 组织回答。
|
Package assistant AI 助手:LLM 工具调用循环 → 查询引擎 → 组织回答。 |
|
logic/queryengine
sqlguard.go AI 原生 SQL 门禁:只读校验。
|
sqlguard.go AI 原生 SQL 门禁:只读校验。 |
|
logic/registry
Package registry 数据集注册表:内存存储 + 读写锁,白名单模式的唯一入口。
|
Package registry 数据集注册表:内存存储 + 读写锁,白名单模式的唯一入口。 |
|
model
Package model 定义数据查询插件的数据模型:数据集元数据(表白名单 + schema 来源)与查询结果。
|
Package model 定义数据查询插件的数据模型:数据集元数据(表白名单 + schema 来源)与查询结果。 |
|
render
Package render 定义 AI 助手渲染协议:5 种渲染模板的 JSON 结构常量与校验。
|
Package render 定义 AI 助手渲染协议:5 种渲染模板的 JSON 结构常量与校验。 |