AWS SDK for Go を使用して 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 misstral.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)
簡単な会話のやり取りに移ります。これは、ミストラルが マルチターン プロンプト と呼ぶもので、 を追加します。これは文字列の終わりトークンです。
例を実行するには:
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) トークンは会話の開始時に 1 回のみ必要ですが、eos (文字列の終わり) は終了を示します。単一の会話交換 (ユーザーとアシスタント)。
私の以前のブログを読んでいるなら、私は常に「ストリーミング」の例を含めたいと思っています。その理由は次のとおりです。
完全なコードはここで参照できます
これを試してみましょう。この例では、Mistral Large を使用します。モデル ID を mistral.mistral-large-2402-v1:0 に変更するだけです。例を実行するには:
go run chat-streaming/main.go
(Invoke の代わりに) InvokeModelWithResponseStream を使用していることに注意してください。
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 中国語 Web サイトの他の関連記事を参照してください。