Files
chatgpt-dingtalk/pkg/chatgpt/export.go
2023-09-07 23:01:14 +08:00

84 lines
1.8 KiB
Go

package chatgpt
import (
"context"
"time"
"github.com/avast/retry-go"
"github.com/eryajf/chatgpt-dingtalk/pkg/logger"
"github.com/eryajf/chatgpt-dingtalk/public"
)
// SingleQa 单聊
func SingleQa(question, userId string) (answer string, err error) {
chat := New(userId)
defer chat.Close()
// 定义一个重试策略
retryStrategy := []retry.Option{
retry.Delay(100 * time.Millisecond),
retry.Attempts(3),
retry.LastErrorOnly(true),
}
// 使用重试策略进行重试
err = retry.Do(
func() error {
answer, err = chat.ChatWithContext(question)
if err != nil {
return err
}
return nil
},
retryStrategy...)
return
}
// ContextQa 串聊
func ContextQa(question, userId string) (chat *ChatGPT, answer string, err error) {
chat = New(userId)
if public.UserService.GetUserSessionContext(userId) != "" {
err := chat.ChatContext.LoadConversation(userId)
if err != nil {
logger.Warning("load station failed: %v\n", err)
}
}
retryStrategy := []retry.Option{
retry.Delay(100 * time.Millisecond),
retry.Attempts(3),
retry.LastErrorOnly(true)}
// 使用重试策略进行重试
err = retry.Do(
func() error {
answer, err = chat.ChatWithContext(question)
if err != nil {
return err
}
return nil
},
retryStrategy...)
return
}
// ImageQa 生成图片
func ImageQa(ctx context.Context, question, userId string) (answer string, err error) {
chat := New(userId)
defer chat.Close()
// 定义一个重试策略
retryStrategy := []retry.Option{
retry.Delay(100 * time.Millisecond),
retry.Attempts(3),
retry.LastErrorOnly(true),
}
// 使用重试策略进行重试
err = retry.Do(
func() error {
answer, err = chat.GenreateImage(ctx, question)
if err != nil {
return err
}
return nil
},
retryStrategy...)
return
}