go get github.com/kingfs/godifyimport "github.com/kingfs/godify"
// Service API 客户端 (面向开发者)
serviceClient := dify.NewServiceClient("your-app-api-token", "https://api.dify.ai")
// Web API 客户端 (面向最终用户)
webClient := dify.NewWebClient("your-web-api-key", "https://api.dify.ai")Service API 面向开发者,需要使用应用的 API Token 进行认证。
appInfo, err := serviceClient.GetAppInfo(ctx)params, err := serviceClient.GetAppParameters(ctx)meta, err := serviceClient.GetAppMeta(ctx)req := &service.CompletionRequest{
Inputs: map[string]interface{}{
"query": "你的问题",
},
Query: "你的问题",
User: "user-123",
ResponseMode: models.ResponseModeBlocking, // 或 ResponseModeStreaming
}
resp, err := serviceClient.Completion(ctx, req)req := &service.ChatRequest{
Inputs: map[string]interface{}{},
Query: "你好",
User: "user-123",
ConversationID: "existing-conversation-id", // 可选,继续已有对话
AutoGenerateName: true,
}
resp, err := serviceClient.Chat(ctx, req)// 停止文本补全
err := serviceClient.CompletionStop(ctx, taskID, userID)
// 停止聊天
err := serviceClient.ChatStop(ctx, taskID, userID)Web API 面向最终用户,需要使用 Web API Key 进行认证。
meta, err := webClient.GetAppMeta(ctx)params, err := webClient.GetAppParameters(ctx)accessMode, err := webClient.GetWebAppAccessMode(ctx, "app-id", "")permission, err := webClient.CheckWebAppPermission(ctx, "app-id")req := &web.CompletionRequest{
Inputs: map[string]interface{}{
"query": "你的问题",
},
Query: "你的问题",
ResponseMode: models.ResponseModeBlocking,
}
resp, err := webClient.Completion(ctx, req)req := &web.ChatRequest{
Inputs: map[string]interface{}{},
Query: "你好",
ConversationID: "existing-conversation-id", // 可选
}
resp, err := webClient.Chat(ctx, req)conversations, err := webClient.GetConversations(ctx, "", 20, nil, "-updated_at")newName := "新的对话名称"
req := &models.ConversationRenameRequest{
Name: &newName,
}
conv, err := webClient.RenameConversation(ctx, "conversation-id", req)// 置顶
err := webClient.PinConversation(ctx, "conversation-id")
// 取消置顶
err := webClient.UnpinConversation(ctx, "conversation-id")err := webClient.DeleteConversation(ctx, "conversation-id")messages, err := webClient.GetMessages(ctx, "conversation-id", "", 20)rating := "like"
content := "很有帮助"
feedback := &models.MessageFeedbackRequest{
Rating: &rating,
Content: &content,
}
err := webClient.SendMessageFeedback(ctx, "message-id", feedback)resp, err := webClient.GetMessageMoreLikeThis(ctx, "message-id", models.ResponseModeBlocking)questions, err := webClient.GetSuggestedQuestions(ctx, "message-id")fileData := []byte("file content")
file, err := webClient.UploadFile(ctx, "filename.txt", fileData, "datasets")audioData := []byte("audio file content")
result, err := webClient.AudioToText(ctx, audioData, "audio.wav")req := &web.TextToAudioRequest{
Text: "要转换的文字",
Voice: "default",
}
result, err := webClient.TextToAudio(ctx, req)SDK 提供了详细的错误处理机制:
import "github.com/kingfs/godify/errors"
resp, err := client.Chat(ctx, req)
if err != nil {
if errors.IsAPIError(err) {
apiErr := errors.GetAPIError(err)
fmt.Printf("API错误: %s (状态码: %d)\n", apiErr.Message, apiErr.StatusCode)
// 检查特定错误类型
switch apiErr.Code {
case "app_unavailable":
// 处理应用不可用错误
case "conversation_not_exists":
// 处理对话不存在错误
}
} else {
// 处理其他类型错误
fmt.Printf("其他错误: %v\n", err)
}
}ErrAppUnavailable- 应用不可用ErrNotChatApp- 不是聊天应用ErrNotCompletionApp- 不是补全应用ErrConversationNotExists- 对话不存在ErrMessageNotExists- 消息不存在ErrProviderQuotaExceeded- 提供商配额超限ErrInvokeRateLimit- 调用频率限制ErrFileTooLarge- 文件过大ErrUnsupportedFileType- 不支持的文件类型
type AppInfo struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Tags []string `json:"tags"`
Mode AppMode `json:"mode"`
AuthorName string `json:"author_name"`
}type GenerateResponse struct {
Event string `json:"event,omitempty"`
MessageID string `json:"message_id,omitempty"`
ConversationID string `json:"conversation_id,omitempty"`
Answer string `json:"answer,omitempty"`
TaskID string `json:"task_id,omitempty"`
CreatedAt int64 `json:"created_at,omitempty"`
}type Conversation struct {
ID string `json:"id"`
Name string `json:"name"`
Inputs map[string]interface{} `json:"inputs"`
Introduction string `json:"introduction"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}type Message struct {
ID string `json:"id"`
ConversationID string `json:"conversation_id"`
Query string `json:"query"`
Answer string `json:"answer"`
MessageFiles []MessageFile `json:"message_files"`
Feedback *MessageFeedback `json:"feedback"`
CreatedAt time.Time `json:"created_at"`
Status string `json:"status"`
}AppModeCompletion- 文本补全AppModeChat- 聊天对话AppModeAgentChat- Agent聊天AppModeAdvancedChat- 高级聊天AppModeWorkflow- 工作流
ResponseModeBlocking- 阻塞模式ResponseModeStreaming- 流式模式
AccessModePublic- 公开访问AccessModePrivate- 私有访问