Amazon Titan Text Premier モデルを使用して Go で生成 AI アプリケーションを構築する

WBOY
リリース: 2024-09-03 14:52:49
オリジナル
707 人が閲覧しました

langchaingo パッケージで Amazon Titan Text Premier モデルを使用する

このブログでは、langchain の Go ポートである langchaingo を使用して Go アプリケーションで Amazon Titan Text Premier モデルを使用する方法を説明します (元々は Python および JS/TS 用に作成されました)。

Amazon Titan Text Premier は、Amazon Titan Text ファミリー内の高度な LLM です。 RAG、エージェント、チャット、思考連鎖、自由形式のテキスト生成、ブレインストーミング、要​​約、コード生成、テーブル作成、データの書式設定、言い換え、書き換え、抽出、Q&A などの幅広いタスクに役立ちます。 Titan Text Premier は、Amazon Bedrock のエージェントおよびナレッジベースとの統合にも最適化されています。

langchaingo での Titan Text Premier の使用

例から始めましょう。

サンプルを実行するための前提条件を完了するには、このブログ投稿の **始める前に* セクションを参照してください。これには、Go のインストール、Amazon Bedrock アクセスの構成、必要な IAM 権限の付与が含まれます。*

完全なコードはここで参照できます。例を実行するには:

git clone https://github.com/abhirockzz/titan-premier-bedrock-go
cd titan-premier-bedrock-go

go run basic/main.go
ログイン後にコピー

「AI について 100 語以内で説明してください」というプロンプトに対して次のような応答が得られましたが、あなたの場合は異なるかもしれません:

Artificial Intelligence (AI) is a branch of computer science that focuses on creating intelligent machines that can think, learn, and act like humans. It uses advanced algorithms and machine learning techniques to enable computers to recognize patterns, make decisions, and solve problems. AI has the potential to revolutionize various industries, including healthcare, finance, transportation, and entertainment, by automating tasks, improving efficiency, and providing personalized experiences. However, there are also concerns about the ethical implications and potential risks associated with AI, such as job displacement, privacy, and bias.
ログイン後にコピー

コードの簡単な説明は次のとおりです:

まず、bedrockruntime.Client のインスタンスを取得します:

cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region))
client = bedrockruntime.NewFromConfig(cfg)
ログイン後にコピー

これを使用して langchaingo llm.Model インスタンスを作成します。指定するモデル ID は Titan Text Premier のモデル ID、つまり amazon.titan-text-premier-v1:0 であることに注意してください。

llm, err := bedrock.New(bedrock.WithClient(client), bedrock.WithModel(modelID))
ログイン後にコピー

llms.MessageContent を作成し、LLM の呼び出しは llm.GenerateContent によって行われます。 Titan Text Premier 固有のリクエスト/レスポンス ペイロードについて考える必要がないことに注目してください。これは langchaingo:
によって抽象化されています。

    msg := []llms.MessageContent{
        {
            Role: llms.ChatMessageTypeHuman,
            Parts: []llms.ContentPart{
                llms.TextPart("Explain AI in 100 words or less."),
            },
        },
    }

    resp, err := llm.GenerateContent(context.Background(), msg, llms.WithMaxTokens(maxTokenCountLimitForTitanTextPremier))
ログイン後にコピー

ドキュメントを使ってチャットする

これも非常に一般的なシナリオです。 langchaingo は、テキスト、PDF、HTML (さらには Notion!) を含む多数のタイプをサポートしています。

完全なコードはここで参照できます。この例を実行するには:

go run doc-chat/main.go
ログイン後にコピー

この例では、Amazon Bedrock ユーザーガイドのこのページをソースドキュメント (HTML) として使用していますが、他のソースを自由に使用してください:

export SOURCE_URL=<enter URL>
go run doc-chat/main.go
ログイン後にコピー

質問を入力するように求められます:

loaded content from https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html

Enter your message: 
ログイン後にコピー

これらの質問を試してみたところ、かなり正確な回答が得られました:

1. tell me the names of the supported providers
2. tell me the model ID for titan text premier
3. give me the list of Amazon Titan family of models
4. What is the titan text premier model ID for a provisioned throughput customer?
ログイン後にコピー

Build generative AI applications in Go using Amazon Titan Text Premier model

ちなみに、ドキュメントを使用してチャット機能は Amazon Bedrock でもネイティブに利用できます。

コードを簡単に見てみましょう。まず、ソース URL からコンテンツをロードします:

func getDocs(link string) []schema.Document {
    //...
    resp, err := http.Get(link)
    docs, err := documentloaders.NewHTML(resp.Body).Load(context.Background())
    return docs
}
ログイン後にコピー

次に、簡単な for ループを使用して会話を開始します。

    //...
    for {
        fmt.Print("\nEnter your message: ")
        input, _ := reader.ReadString('\n')
        input = strings.TrimSpace(input)

        answer, err := chains.Call(
            context.Background(),
            docChainWithCustomPrompt(llm),
            map[string]any{
                "input_documents": docs,
                "question":        input,
            },
            chains.WithMaxTokens(maxTokenCountLimitForTitanTextPremier))
        //...
    }
ログイン後にコピー

使用するチェーンは、カスタム プロンプト (このガイドラインに基づいて) で作成されます。langchaingo のデフォルトの動作をオーバーライドします。

func docChainWithCustomPrompt(llm *bedrock_llm.LLM) chains.Chain {

    ragPromptTemplate := prompts.NewPromptTemplate(
        promptTemplateString,
        []string{"context", "question"},
    )

    qaPromptSelector := chains.ConditionalPromptSelector{
        DefaultPrompt: ragPromptTemplate,
    }

    prompt := qaPromptSelector.GetPrompt(llm)

    llmChain := chains.NewLLMChain(llm, prompt)
    return chains.NewStuffDocuments(llmChain)
}
ログイン後にコピー

さあ、最後の例です。もう 1 つの一般的な使用例です。

RAG - 検索拡張生成

私は以前、Go アプリケーションで RAG を使用する方法について説明しました。今回は以下を使用します:

  • LLM としての Titan Text Premier、
  • 埋め込みモデルとして Titan Embeddings G1、
  • pgvector 拡張機能を使用したベクター ストアとしての PostgreSQL (Docker を使用してローカルで実行)。

Docker コンテナを開始します:

docker run --name pgvector --rm -it -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres ankane/pgvector
ログイン後にコピー

別の端末から PostgreSQL に (psql を使用して) ログインして、pgvector 拡張機能をアクティブにします。

# enter postgres when prompted for password
psql -h localhost -U postgres -W

CREATE EXTENSION IF NOT EXISTS vector;
ログイン後にコピー

完全なコードはここで参照できます。この例を実行するには:

go run rag/main.go
ログイン後にコピー

この例ではソースドキュメント (HTML) として Amazon Bedrock Studio ページを使用していますが、他のソースを自由に使用してください:

export SOURCE_URL=<enter URL>
go run rag/main.go
ログイン後にコピー

出力が表示され、質問を入力するよう求められます。これらを試してみました:

what is bedrock studio?
how do I enable bedrock studio?
ログイン後にコピー

Build generative AI applications in Go using Amazon Titan Text Premier model

いつものように、何が起こっているのか見てみましょう。データのロードは以前と同様の方法で行われ、会話 (for ループ) にも同じことが当てはまります:

    for {
        fmt.Print("\nEnter your message: ")
        question, _ := reader.ReadString('\n')
        question = strings.TrimSpace(question)

        result, err := chains.Run(
            context.Background(),
            retrievalQAChainWithCustomPrompt(llm, vectorstores.ToRetriever(store, numOfResults)),
            question,
            chains.WithMaxTokens(maxTokenCountLimitForTitanTextPremier),
        )
    //....
    }
ログイン後にコピー

RAG部分が少し異なります。カスタム プロンプト (Amazon Bedrock のナレッジベースで使用されるものと同様) を持つ RetrievelQA チェーンを使用します。

func retrievalQAChainWithCustomPrompt(llm *bedrock_llm.LLM, retriever vectorstores.Retriever) chains.Chain {

    ragPromptTemplate := prompts.NewPromptTemplate(
        ragPromptTemplateString,
        []string{"context", "question"},
    )

    qaPromptSelector := chains.ConditionalPromptSelector{
        DefaultPrompt: ragPromptTemplate,
    }

    prompt := qaPromptSelector.GetPrompt(llm)

    llmChain := chains.NewLLMChain(llm, prompt)
    stuffDocsChain := chains.NewStuffDocuments(llmChain)

    return chains.NewRetrievalQA(
        stuffDocsChain,
        retriever,
    )
}
ログイン後にコピー

結論

私は、Titan ファミリーの複数のテキスト生成モデルの 1 つである Amazon Titan Text Premier について説明しました。テキスト生成に加えて、Amazon Titan には埋め込みモデル (テキストおよびマルチモーダル) と画像生成もあります。 Amazon Bedrock ドキュメントでこれらすべてを調べることで、さらに詳しく学ぶことができます。楽しく建築しましょう!

以上がAmazon Titan Text Premier モデルを使用して Go で生成 AI アプリケーションを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート