Mistral AI를 사용하여 Go로 생성 AI 애플리케이션 구축
Go용 AWS SDK와 함께 Amazon Bedrock에서 Mistral AI를 사용하는 방법 알아보기
Mistral AI는 성능, 비용 등 다양한 특성을 갖춘 모델을 제공합니다.
- Mistral 7B - Mistral AI가 출시한 최초의 고밀도 모델로 실험, 사용자 정의 및 빠른 반복에 적합합니다.
- Mixtral 8x7B - 전문가 모델이 드물게 혼합되어 있습니다.
- Mistral Large - 대규모 추론 기능이 필요하거나 고도로 전문화된 복잡한 작업(합성 텍스트 생성, 코드 생성, RAG 또는 에이전트)에 이상적입니다.
Go를 통해 Amazon Bedrock에서 이러한 Mistral AI 모델을 사용하는 방법을 살펴보고 그 과정에서 프롬프트 토큰에 대해서도 더 잘 이해해 보겠습니다.
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에는 다음과 같은 특정 프롬프트 형식이 있습니다.
-
문자열의 시작 토큰을 나타냅니다.
- 사용자 역할에 대한 텍스트는 [INST]...[/INST] 토큰 안에 있습니다
- 외부 문자는 보조역할
위 출력 로그에서 토큰이 해석됩니다
다음은 필수 속성이 있는 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(문자열의 끝)은 끝을 표시합니다. 단일 대화 교환(사용자 및 보조자)입니다.
스트리밍으로 채팅
제 이전 블로그를 읽어보셨다면 저는 항상 "스트리밍" 예시를 포함하고 싶은 이유는 다음과 같습니다.
- 클라이언트 애플리케이션 관점에서 더 나은 경험을 제공합니다
- InvokeModelWithResponseStream 함수(InvokeModel의 비동기 대응)를 간과하는 것은 흔한 실수입니다
- 부분 모델 페이로드 응답은 흥미롭고 때로는 까다로울 수 있습니다
여기에서 전체 코드를 참조할 수 있습니다
이것을 시도해 보겠습니다. 이 예에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

Golang은 동시성에서 C보다 낫고 C는 원시 속도에서 Golang보다 낫습니다. 1) Golang은 Goroutine 및 Channel을 통해 효율적인 동시성을 달성하며, 이는 많은 동시 작업을 처리하는 데 적합합니다. 2) C 컴파일러 최적화 및 표준 라이브러리를 통해 하드웨어에 가까운 고성능을 제공하며 극도의 최적화가 필요한 애플리케이션에 적합합니다.

goisidealforbeginnersandsuitableforcloudandnetworkservicesduetoitssimplicity, 효율성, 및 콘크리 론 피처

Golang은 빠른 개발 및 동시 시나리오에 적합하며 C는 극도의 성능 및 저수준 제어가 필요한 시나리오에 적합합니다. 1) Golang은 쓰레기 수집 및 동시성 메커니즘을 통해 성능을 향상시키고, 고전성 웹 서비스 개발에 적합합니다. 2) C는 수동 메모리 관리 및 컴파일러 최적화를 통해 궁극적 인 성능을 달성하며 임베디드 시스템 개발에 적합합니다.

Golang과 Python은 각각 고유 한 장점이 있습니다. Golang은 고성능 및 동시 프로그래밍에 적합하지만 Python은 데이터 과학 및 웹 개발에 적합합니다. Golang은 동시성 모델과 효율적인 성능으로 유명하며 Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명합니다.

Golang과 C의 성능 차이는 주로 메모리 관리, 컴파일 최적화 및 런타임 효율에 반영됩니다. 1) Golang의 쓰레기 수집 메커니즘은 편리하지만 성능에 영향을 줄 수 있습니다. 2) C의 수동 메모리 관리 및 컴파일러 최적화는 재귀 컴퓨팅에서 더 효율적입니다.

Golang과 C는 각각 공연 경쟁에서 고유 한 장점을 가지고 있습니다. 1) Golang은 높은 동시성과 빠른 발전에 적합하며 2) C는 더 높은 성능과 세밀한 제어를 제공합니다. 선택은 프로젝트 요구 사항 및 팀 기술 스택을 기반으로해야합니다.

golangisidealforbuildingscalablesystemsdueToitsefficiencyandconcurrency
