kopenai

package module
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2023 License: Apache-2.0 Imports: 15 Imported by: 0

README

K-Openai

K-openai는 OpenAI의 API 사용을 위한 프롬프트 작성 시 파파고 번역기능을 통해 Token 사용량 최소화와 서비스 형태에 맞는 응답을 하기 위해 제작하게 되었습니다.

목차

사전 준비

  • go version >= 1.18 이상 설치 되어 있어야합니다.
  • OpenAI 에서 API Key를 발급 받아야합니다.
  • Naver Developers에서 client를 발급 받아야합니다.

설치 방법

터미널 또는 명령 프롬프트를 열고 다음 명령어를 실행하여 의존성을 설치합니다.

go get -u github.com/bluecheat/k-openai@v0.1.1

Config 설정 방법

1. yaml 파일을 읽어서 설정하는 방법
config, err := kopenai.LoadConfiguration("./kopenai_env.yml")
if err != nil {
    log.Fatal(err)
}
2. 변수 직접 선언 방법
config := kopenai.Config{
    Openai: kopenai.OpenAiConfig{
        ApiKey: "apikey",
    },
    Naver: kopenai.NaverOpenApiConfig{
        ClientId:     "clinetId",
        ClientSecret: "clientSecret",
    },
}

사용 방법

1. Chat API kopenai.Chat ( GPT 채팅 API )

Chat API에서 사용하는 요청값, 응답값은 동일하고 추가적으로 번역 옵션을 넣어서 처리합니다.

파라미터 정보
  • openai.ChatCompletionRequest: 기존의 openai의 Chat 호출 시 사용되는 요청값
  • kopenai.ChatTransOption: 프롬프트 번역 시 사용하는 Option
    • InputPrompt: 프롬프트에 대한 번역 ( source: 기존 언어, target: 번역할 언어 )
    • OutputPrompt: 프롬프트 결과에 대한 번역 ( source: 기존 언어, target: 번역할 언어 )
예제 코드
...

client := kopenai.NewKopenAiGpt(config)

ctx := context.Background()
resp, err := client.Chat(ctx, openai.ChatCompletionRequest{
    Model: openai.GPT3Dot5Turbo,
    Messages: []openai.ChatCompletionMessage{
        {
            Role:    openai.ChatMessageRoleUser,
            Content: "안녕 너의 이름은 뭐니?",
        },
    },
}, kopenai.ChatTransOption{
    InputPrompt: &kopenai.TransOption{
        Source: kopenai.KO,
        Target: kopenai.EN,
    },
    OutputPrompt: &kopenai.TransOption{
        Source: kopenai.EN,
        Target: kopenai.KO,
    },
})
if err != nil {
    t.Error(err)
    return
}
fmt.Println(resp.Choices[0].Message)
2. ImageGenerate API kopenai.ImageGenerate ( 이미지 생성 API )

ImageGenerate API에서 사용하는 요청값, 응답값은 동일하고 추가적으로 번역 옵션을 넣어서 처리합니다.

파라미터 정보
  • openai.ImageRequest: 기존의 openai의 ImageGenerate 호출 시 사용되는 요청값
  • kopenai.ImageTransOption: 프롬프트 번역 시 사용하는 Option
    • InputPrompt: 프롬프트에 대한 번역 ( source: 기존 언어, target: 번역할 언어 )
예제 코드
...
client := kopenai.NewKopenAiGpt(config)

ctx := context.Background()
resp, err := client.ImageGenerate(ctx, openai.ImageRequest{
    Prompt:         "업무, 개발, AI개발",
    N:              1,
    Size:           openai.CreateImageSize256x256,
    ResponseFormat: openai.CreateImageResponseFormatB64JSON,
}, kopenai.ImageTransOption{
    InputPrompt: &kopenai.TransOption{
        Source: kopenai.KO,
        Target: kopenai.EN,
    },
})
if err != nil {
    t.Error(err)
    return
}

// Open output file
dec, err := base64.StdEncoding.DecodeString(resp.Data[0].B64JSON)
if err != nil {
    panic(err)
}
output, err := os.Create("created-image-" + time.Now().UTC().String() + ".png")
if err != nil {
    panic(err)
}
// Close output file
defer output.Close()

if _, err := output.Write(dec); err != nil {
    panic(err)
}
if err := output.Sync(); err != nil {
    panic(err)
}
이미지 생성 결과

image

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	DefaultChatRequest = openai.ChatCompletionRequest{
		Model: openai.GPT3Dot5Turbo,
		Messages: []openai.ChatCompletionMessage{
			{
				Role: openai.ChatMessageRoleUser,
			},
		},
	}

	DefaultImageRequest = openai.ImageRequest{
		N:              1,
		ResponseFormat: openai.CreateImageResponseFormatB64JSON,
		Size:           openai.CreateImageSize512x512,
	}
)

Functions

func PrettyPrint

func PrettyPrint(obj interface{})

func StructToUrlValues

func StructToUrlValues(i interface{}) (values url.Values)

Types

type ChatTransOption

type ChatTransOption struct {
	InputPrompt  *TransOption
	OutputPrompt *TransOption
}

type Config

type Config struct {
	Openai OpenAiConfig       `yaml:"openai"`
	Naver  NaverOpenApiConfig `yaml:"naver"`
}

func LoadConfiguration

func LoadConfiguration(envFile string) (*Config, error)

type ErrorPapaoResponse

type ErrorPapaoResponse struct {
	ErrorCode    string `json:"errorCode"`
	ErrorMessage string `json:"errorMessage"`
}

type ImageTransOption

type ImageTransOption struct {
	InputPrompt *TransOption
}

type KopenAiGpt

type KopenAiGpt struct {
	// contains filtered or unexported fields
}

func NewKopenAiGpt

func NewKopenAiGpt(config *Config) *KopenAiGpt

func (*KopenAiGpt) Chat

func (k *KopenAiGpt) Chat(ctx context.Context, request openai.ChatCompletionRequest, option ChatTransOption) (resp openai.ChatCompletionResponse, err error)

Chat https://platform.openai.com/docs/api-reference/chat

func (*KopenAiGpt) ImageGenerate

func (k *KopenAiGpt) ImageGenerate(ctx context.Context, request openai.ImageRequest, option ImageTransOption) (resp openai.ImageResponse, err error)

ImageGenerate https://platform.openai.com/docs/api-reference/images/create

type Lang

type Lang string
const (
	KO   Lang = "ko"
	EN   Lang = "en"
	JA   Lang = "ja"
	ZHCN Lang = "zh-CN"
	ZHTW Lang = "zh-TW"
	VI   Lang = "vi"
	ID   Lang = "id"
	TH   Lang = "th"
	DE   Lang = "de"
	RU   Lang = "ru"
	ES   Lang = "es"
	IT   Lang = "it"
	FR   Lang = "fr"
)

func (Lang) String

func (l Lang) String() string
type NaverOpenApi struct {
	// contains filtered or unexported fields
}

func NewNaverOpenApiClient

func NewNaverOpenApiClient(config NaverOpenApiConfig) *NaverOpenApi
func (c *NaverOpenApi) Transition(ctx context.Context, request *TranslationRequest) (response *TranslationResponse, err error)
type NaverOpenApiConfig struct {
	ClientId     string `yaml:"clientId"`
	ClientSecret string `yaml:"clientSecret"`
}

type OpenAiConfig

type OpenAiConfig struct {
	ApiKey string `yaml:"apiKey"`
}

type RequestBuilder

type RequestBuilder struct{}

func NewRequestBuilder

func NewRequestBuilder() *RequestBuilder

func (*RequestBuilder) Build

func (b *RequestBuilder) Build(
	ctx context.Context,
	method string,
	url string,
	body any,
	header http.Header,
) (req *http.Request, err error)

type TransOption

type TransOption struct {
	Source Lang
	Target Lang
}

type TranslationRequest

type TranslationRequest struct {
	Source Lang   `json:"source"`
	Target Lang   `json:"target"`
	Text   string `json:"text"`
}

type TranslationResponse

type TranslationResponse struct {
	Message struct {
		Type    string `json:"@type"`
		Service string `json:"@service"`
		Version string `json:"@version"`
		Result  TranslationResult
	} `json:"message"`
}

type TranslationResult

type TranslationResult struct {
	SrcLangType    string `json:"srcLangType"`
	TarLangType    string `json:"tarLangType"`
	TranslatedText string `json:"translatedText"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL