Go용 AWS SDK와 함께 Amazon Bedrock에서 Mistral AI를 사용하는 방법 알아보기
Mistral AI는 성능, 비용 등 다양한 특성을 갖춘 모델을 제공합니다.
Go를 통해 Amazon Bedrock에서 이러한 Mistral AI 모델을 사용하는 방법을 살펴보고 그 과정에서 프롬프트 토큰에 대해서도 더 잘 이해해 보겠습니다.
Mistral 7B를 사용한 간단한 예부터 시작해 보겠습니다.
이 블로그 게시물의 **시작하기 전에* 섹션을 참조하여 예제 실행을 위한 전제 조건을 완료하세요. 여기에는 Go 설치, Amazon Bedrock 액세스 구성 및 필요한 IAM 권한 제공이 포함됩니다.*
여기에서 전체 코드를 참조할 수 있습니다
예제를 실행하려면:
git clone https://github.com/abhirockzz/mistral-bedrock-go cd mistral-bedrock-go go run basic/main.go
귀하의 경우 응답이 약간 다를 수도 있고 다를 수도 있습니다.
request payload: {"prompt":"\u003cs\u003e[INST] Hello, what's your name? [/INST]"} response payload: {"outputs":[{"text":" Hello! I don't have a name. I'm just an artificial intelligence designed to help answer questions and provide information. How can I assist you today?","stop_reason":"stop"}]} response string: Hello! I don't have a name. I'm just an artificial intelligence designed to help answer questions and provide information. How can I assist you today?
여기에서 전체 코드를 참조할 수 있습니다.
JSON 페이로드를 생성하는 것부터 시작합니다. 이는 구조체(MistralRequest)로 모델링됩니다. 또한 모델 ID mistral.mistral-7b-instruct-v0:2
를 확인하세요.
const modelID7BInstruct = "mistral.mistral-7b-instruct-v0:2" const promptFormat = "<s>[INST] %s [/INST]" func main() { msg := "Hello, what's your name?" payload := MistralRequest{ Prompt: fmt.Sprintf(promptFormat, msg), } //...
Mistral에는 다음과 같은 특정 프롬프트 형식이 있습니다.
위 출력 로그에서 토큰이 해석됩니다
다음은 필수 속성이 있는 MistralRequest 구조체입니다.
type MistralRequest struct { Prompt string `json:"prompt"` MaxTokens int `json:"max_tokens,omitempty"` Temperature float64 `json:"temperature,omitempty"` TopP float64 `json:"top_p,omitempty"` TopK int `json:"top_k,omitempty"` StopSequences []string `json:"stop,omitempty"` }
InvokeModel은 모델을 호출하는 데 사용됩니다. JSON 응답은 구조체(MistralResponse)로 변환되고 여기에서 텍스트 응답이 추출됩니다.
output, err := brc.InvokeModel(context.Background(), &bedrockruntime.InvokeModelInput{ Body: payloadBytes, ModelId: aws.String(modelID7BInstruct), ContentType: aws.String("application/json"), }) var resp MistralResponse err = json.Unmarshal(output.Body, &resp) fmt.Println("response string:\n", resp.Outputs[0].Text)
간단한 대화형 상호작용으로 넘어갑니다. 이것이 Mistral이 말하는 다회전 프롬프트이며 문자열의 끝 토큰입니다.
예제를 실행하려면:
go run chat/main.go
내 상호작용은 다음과 같습니다.
여기에서 전체 코드를 참조할 수 있습니다
이 예에서는 코드 자체가 지나치게 단순화되었습니다. 그러나 중요한 부분은 토큰을 사용하여 프롬프트 형식을 지정하는 방법입니다. 이 예에서는 Mixtral 8X7B(mistral.mixtral-8x7b-instruct-v0:1)를 사용하고 있습니다.
const userMessageFormat = "[INST] %s [/INST]" const modelID8X7BInstruct = "mistral.mixtral-8x7b-instruct-v0:1" const bos = "<s>" const eos = "</s>" var verbose *bool func main() { reader := bufio.NewReader(os.Stdin) first := true var msg string for { fmt.Print("\nEnter your message: ") input, _ := reader.ReadString('\n') input = strings.TrimSpace(input) if first { msg = bos + fmt.Sprintf(userMessageFormat, input) } else { msg = msg + fmt.Sprintf(userMessageFormat, input) } payload := MistralRequest{ Prompt: msg, } response, err := send(payload) fmt.Println("[Assistant]:", response) msg = msg + response + eos + " " first = false } }
문자열의 시작(bos) 토큰은 대화 시작 시 한 번만 필요하고, eos(문자열의 끝)은 끝을 표시합니다. 단일 대화 교환(사용자 및 보조자)입니다.
제 이전 블로그를 읽어보셨다면 저는 항상 "스트리밍" 예시를 포함하고 싶은 이유는 다음과 같습니다.
여기에서 전체 코드를 참조할 수 있습니다
이것을 시도해 보겠습니다. 이 예에서는 Mistral Large를 사용합니다. 모델 ID를 mistral.mistral-large-2402-v1:0으로 변경하면 됩니다. 예제를 실행하려면:
go run chat-streaming/main.go
InvokeModelWithResponseStream(Invoke 대신) 사용에 유의하세요.
output, err := brc.InvokeModelWithResponseStream(context.Background(), &bedrockruntime.InvokeModelWithResponseStreamInput{ Body: payloadBytes, ModelId: aws.String(modelID7BInstruct), ContentType: aws.String("application/json"), }) //...
출력을 처리하려면 다음을 사용합니다.
//... resp, err := processStreamingOutput(output, func(ctx context.Context, part []byte) error { fmt.Print(string(part)) return nil })
다음은 processStreamingOutput 함수의 몇 가지 비트입니다. 여기에서 코드를 확인할 수 있습니다. 이해해야 할 중요한 점은 부분 응답을 함께 수집하여 최종 출력(MistralResponse)을 생성하는 방법입니다.
func processStreamingOutput(output *bedrockruntime.InvokeModelWithResponseStreamOutput, handler StreamingOutputHandler) (MistralResponse, error) { var combinedResult string resp := MistralResponse{} op := Outputs{} for event := range output.GetStream().Events() { switch v := event.(type) { case *types.ResponseStreamMemberChunk: var pr MistralResponse err := json.NewDecoder(bytes.NewReader(v.Value.Bytes)).Decode(&pr) if err != nil { return resp, err } handler(context.Background(), []byte(pr.Outputs[0].Text)) combinedResult += pr.Outputs[0].Text op.StopReason = pr.Outputs[0].StopReason //... } op.Text = combinedResult resp.Outputs = []Outputs{op} return resp, nil }
기억하세요 - 대규모 언어 모델(예: Mistral, Meta Llama, Claude 등)을 사용하여 AI/ML 애플리케이션을 구축한다고 해서 Python을 사용해야 한다는 의미는 아닙니다. Amazon Bedrock과 같은 관리형 플랫폼은 Go!를 비롯한 다양한 프로그래밍 언어로 된 유연한 API를 사용하여 이러한 강력한 모델에 대한 액세스를 제공합니다. AWS SDK 지원 덕분에 원하는 프로그래밍 언어를 사용하여 Amazon Bedrock과 통합하고 생성적 AI 솔루션을 구축할 수 있습니다.
공식 Mistral 문서와 Amazon Bedrock 사용자 가이드를 탐색하여 자세히 알아볼 수 있습니다. 즐거운 빌딩 되세요!
위 내용은 Mistral AI를 사용하여 Go로 생성 AI 애플리케이션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!