mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-14 08:37:35 +08:00
- Oracle `SELECT *` 改写时使用合法源表别名 `gonavi_query_source` - 让自动注入的 `ROWID` 绑定到源表别名,避免 `ORA-00911` - 保留显式字段查询的 `ROWID` 追加逻辑 - 新增回归测试覆盖 `SELECT * FROM EDC_LOG` 的执行 SQL - 校验生成 SQL 不再包含非法自动别名
124 lines
4.4 KiB
Go
124 lines
4.4 KiB
Go
package ai
|
|
|
|
// ToolCall 表示 AI 发出的工具调用
|
|
type ToolCall struct {
|
|
ID string `json:"id"`
|
|
Type string `json:"type"` // "function"
|
|
Function ToolCallFunction `json:"function"`
|
|
}
|
|
|
|
// ToolCallFunction 表示单次工具调用的函数信息
|
|
type ToolCallFunction struct {
|
|
Name string `json:"name"`
|
|
Arguments string `json:"arguments"`
|
|
}
|
|
|
|
// ToolFunction 表示可使用的函数定义
|
|
type ToolFunction struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Parameters any `json:"parameters"` // JSON Schema definitions
|
|
}
|
|
|
|
// Tool 工具申明
|
|
type Tool struct {
|
|
Type string `json:"type"` // "function"
|
|
Function ToolFunction `json:"function"`
|
|
}
|
|
|
|
// Message 表示一条对话消息
|
|
type Message struct {
|
|
Role string `json:"role"` // "system" | "user" | "assistant" | "tool"
|
|
Content string `json:"content"`
|
|
Images []string `json:"images,omitempty"` // base64 encoded images with data:image/png;base64,... prefix
|
|
ToolCallID string `json:"tool_call_id,omitempty"` // 当 role 为 "tool" 时必须传递
|
|
ToolCalls []ToolCall `json:"tool_calls,omitempty"` // 当 role 为 "assistant" 并试图调工具时传递
|
|
ReasoningContent string `json:"reasoning_content,omitempty"` // DeepSeek thinking mode 工具调用链路要求原样回传
|
|
}
|
|
|
|
// ChatRequest AI 对话请求
|
|
type ChatRequest struct {
|
|
Messages []Message `json:"messages"`
|
|
Temperature float64 `json:"temperature"`
|
|
MaxTokens int `json:"maxTokens"`
|
|
Tools []Tool `json:"tools,omitempty"`
|
|
}
|
|
|
|
// ChatResponse AI 对话响应
|
|
type ChatResponse struct {
|
|
Content string `json:"content"`
|
|
ReasoningContent string `json:"reasoning_content,omitempty"`
|
|
TokensUsed TokenUsage `json:"tokensUsed"`
|
|
ToolCalls []ToolCall `json:"tool_calls,omitempty"`
|
|
}
|
|
|
|
// TokenUsage token 用量统计
|
|
type TokenUsage struct {
|
|
PromptTokens int `json:"promptTokens"`
|
|
CompletionTokens int `json:"completionTokens"`
|
|
TotalTokens int `json:"totalTokens"`
|
|
}
|
|
|
|
// StreamChunk 流式响应片段
|
|
type StreamChunk struct {
|
|
Content string `json:"content"`
|
|
Thinking string `json:"thinking,omitempty"`
|
|
ReasoningContent string `json:"reasoning_content,omitempty"`
|
|
Done bool `json:"done"`
|
|
Error string `json:"error,omitempty"`
|
|
ToolCalls []ToolCall `json:"tool_calls,omitempty"`
|
|
}
|
|
|
|
// ProviderConfig AI Provider 配置
|
|
type ProviderConfig struct {
|
|
ID string `json:"id"`
|
|
Type string `json:"type"` // openai | anthropic | gemini | custom
|
|
Name string `json:"name"`
|
|
APIKey string `json:"apiKey"`
|
|
SecretRef string `json:"secretRef,omitempty"`
|
|
HasSecret bool `json:"hasSecret,omitempty"`
|
|
BaseURL string `json:"baseUrl"`
|
|
Model string `json:"model"`
|
|
Models []string `json:"models,omitempty"`
|
|
APIFormat string `json:"apiFormat,omitempty"` // custom 专用: openai | anthropic | gemini | claude-cli
|
|
Headers map[string]string `json:"headers,omitempty"`
|
|
MaxTokens int `json:"maxTokens"`
|
|
Temperature float64 `json:"temperature"`
|
|
}
|
|
|
|
// SQLPermissionLevel AI SQL 执行权限级别
|
|
type SQLPermissionLevel string
|
|
|
|
const (
|
|
PermissionReadOnly SQLPermissionLevel = "readonly"
|
|
PermissionReadWrite SQLPermissionLevel = "readwrite"
|
|
PermissionFull SQLPermissionLevel = "full"
|
|
)
|
|
|
|
// ContextLevel AI 上下文传递级别
|
|
type ContextLevel string
|
|
|
|
const (
|
|
ContextSchemaOnly ContextLevel = "schema_only"
|
|
ContextWithSamples ContextLevel = "with_samples"
|
|
ContextWithResults ContextLevel = "with_results"
|
|
)
|
|
|
|
// SQLOperationType SQL 操作类型
|
|
type SQLOperationType string
|
|
|
|
const (
|
|
SQLOpQuery SQLOperationType = "query" // SELECT, SHOW, DESCRIBE, EXPLAIN
|
|
SQLOpDML SQLOperationType = "dml" // INSERT, UPDATE, DELETE
|
|
SQLOpDDL SQLOperationType = "ddl" // CREATE, ALTER, DROP, TRUNCATE
|
|
SQLOpOther SQLOperationType = "other"
|
|
)
|
|
|
|
// SafetyResult 安全检查结果
|
|
type SafetyResult struct {
|
|
Allowed bool `json:"allowed"`
|
|
OperationType SQLOperationType `json:"operationType"`
|
|
RequiresConfirm bool `json:"requiresConfirm"`
|
|
WarningMessage string `json:"warningMessage,omitempty"`
|
|
}
|