Mistral AI を使用して Go で生成 AI アプリケーションを構築する
AWS SDK for Go を使用して 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 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 には特定のプロンプト形式があります。
-
文字列の先頭トークンを参照します
- ユーザー ロールのテキストは [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)
チャットの例
簡単な会話のやり取りに移ります。これは、ミストラルが マルチターン プロンプト と呼ぶもので、 を追加します。これは文字列の終わりトークンです。
例を実行するには:
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 (文字列の終わり) は終了を示します。単一の会話交換 (ユーザーとアシスタント)。
ストリーミングでチャットする
私の以前のブログを読んでいるなら、私は常に「ストリーミング」の例を含めたいと思っています。その理由は次のとおりです。
- クライアント アプリケーションの観点からより優れたエクスペリエンスを提供します
- InvokeModelWithResponseStream 関数 (InvokeModel の非同期関数) を見落とすのはよくある間違いです
- 部分モデルのペイロード応答は興味深い場合があります (時には注意が必要です)
完全なコードはここで参照できます
これを試してみましょう。この例では、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 サイトの他の関連記事を参照してください。

ホット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
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

GolangisidealforBuildingsCalables Systemsduetoitsefficiency andConcurrency、Whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityand vastecosystem.golang'ssignencouragesclean、readisinediteNeditinesinedinediseNabletinedinedinedisedisedioncourase
