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 のエージェントおよびナレッジベースとの統合にも最適化されています。
例から始めましょう。
サンプルを実行するための前提条件を完了するには、このブログ投稿の **始める前に* セクションを参照してください。これには、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?
ちなみに、ドキュメントを使用してチャット機能は 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 つの一般的な使用例です。
私は以前、Go アプリケーションで RAG を使用する方法について説明しました。今回は以下を使用します:
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?
いつものように、何が起こっているのか見てみましょう。データのロードは以前と同様の方法で行われ、会話 (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 サイトの他の関連記事を参照してください。