Files
MyGoNavi/internal/ai/types.go

223 lines
8.0 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"`
}
// UserPromptSettings 表示用户级自定义提示词配置
type UserPromptSettings struct {
Global string `json:"global"`
Database string `json:"database"`
JVM string `json:"jvm"`
JVMDiagnostic string `json:"jvmDiagnostic"`
}
// MCPTransport 表示 MCP 服务的传输方式
type MCPTransport string
const (
MCPTransportStdio MCPTransport = "stdio"
)
// MCPServerConfig 表示一个可配置的 MCP 服务
type MCPServerConfig struct {
ID string `json:"id"`
Name string `json:"name"`
Transport MCPTransport `json:"transport"`
Command string `json:"command"`
Args []string `json:"args,omitempty"`
Env map[string]string `json:"env,omitempty"`
Enabled bool `json:"enabled"`
TimeoutSeconds int `json:"timeoutSeconds"`
}
// MCPToolDescriptor 表示暴露给模型和前端的 MCP 工具描述
type MCPToolDescriptor struct {
Alias string `json:"alias"`
ServerID string `json:"serverId"`
ServerName string `json:"serverName"`
OriginalName string `json:"originalName"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
InputSchema map[string]any `json:"inputSchema,omitempty"`
}
// MCPToolCallResult 表示一次 MCP 工具调用的结果
type MCPToolCallResult struct {
Alias string `json:"alias"`
ServerID string `json:"serverId"`
ServerName string `json:"serverName"`
OriginalName string `json:"originalName"`
Title string `json:"title,omitempty"`
Content string `json:"content"`
StructuredContent any `json:"structuredContent,omitempty"`
IsError bool `json:"isError"`
}
// MCPClientInstallResult 表示安装 GoNavi 到外部 MCP 客户端配置文件的结果。
type MCPClientInstallResult struct {
Success bool `json:"success"`
Client string `json:"client,omitempty"`
Message string `json:"message"`
ConfigPath string `json:"configPath,omitempty"`
Command string `json:"command,omitempty"`
Args []string `json:"args,omitempty"`
}
// MCPClientInstallStatus 表示 GoNavi MCP 在外部客户端中的当前安装状态。
type MCPClientInstallStatus struct {
Client string `json:"client"`
DisplayName string `json:"displayName"`
Installed bool `json:"installed"`
MatchesCurrent bool `json:"matchesCurrent"`
ClientDetected bool `json:"clientDetected"`
ClientCommand string `json:"clientCommand,omitempty"`
ClientPath string `json:"clientPath,omitempty"`
Message string `json:"message"`
ConfigPath string `json:"configPath,omitempty"`
Command string `json:"command,omitempty"`
Args []string `json:"args,omitempty"`
}
// ClaudeCodeMCPInstallResult 兼容旧命名,便于平滑迁移到通用结果类型。
type ClaudeCodeMCPInstallResult = MCPClientInstallResult
// SkillScope 表示 Skill 的适用场景
type SkillScope string
const (
SkillScopeGlobal SkillScope = "global"
SkillScopeDatabase SkillScope = "database"
SkillScopeJVM SkillScope = "jvm"
SkillScopeJVMDiagnostic SkillScope = "jvmDiagnostic"
)
// SkillConfig 表示一个可配置的 Skill
type SkillConfig struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description,omitempty"`
SystemPrompt string `json:"systemPrompt"`
Enabled bool `json:"enabled"`
Scopes []string `json:"scopes,omitempty"`
RequiredTools []string `json:"requiredTools,omitempty"`
}
// 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"`
}