首頁  >  文章  >  後端開發  >  使用 Amazon Titan Text Premier 模型在 Go 中建立生成式 AI 應用程式

使用 Amazon Titan Text Premier 模型在 Go 中建立生成式 AI 應用程式

WBOY
WBOY原創
2024-09-03 14:52:49707瀏覽

將 Amazon Titan Text Premier 模型與 langchaingo 套件結合使用

在本部落格中,我將引導您了解如何透過 langchaingo 在 Go 應用程式中使用 Amazon Titan Text Premier 模型,langchaingo 是 langchain 的 Go 連接埠(最初是為 Python 和 JS/TS 編寫的)。

Amazon Titan Text Premier 是 Amazon Titan Text 系列中的高級法學碩士。它適用於各種任務,包括 RAG、代理、聊天、思想鏈、開放式文字生成、腦力激盪、總結、程式碼生成、表格創建、資料格式化、釋義、重寫、提取和問答。 Titan Text Premier 也針對與 Amazon Bedrock 的代理和知識庫整合進行了最佳化。

將 Titan Text Premier 與 langchaingo 結合使用

讓我們從一個例子開始。

請參閱本部落格文章中的**開始之前*部分,以完成運行範例的先決條件。這包括安裝 Go、配置 Amazon Bedrock 存取以及提供必要的 IAM 權限。 *

完整程式碼可以參考這裡。運行範例:

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

go run basic/main.go

針對「用 100 個字或更少的內容解釋 AI」提示,我得到了以下回复,但您的情況可能有所不同:

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 實例 - 請注意,我們指定的 modelID 是 Titan Text Premier 的 modelID,即 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)
}

現在來看最後一個例子 - 另一個流行的用例。

RAG - 檢索增強生成

我之前介紹過如何在 Go 應用程式中使用 RAG。這次我們將使用:

  • 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

此範例使用 Amazon Bedrock Studio 頁面作為來源文件 (HTML),但您可以隨意使用任何其他來源:

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 部分略有不同。我們使用帶有自訂提示的 RetrievelQA 鏈(類似於 Amazon Bedrock 知識庫使用的提示):

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,
    )
}

結論

我介紹了 Amazon Titan Text Premier,它是 Titan 系列中的多種文字生成模型之一。除了文字生成之外,Amazon Titan 還具有嵌入模型(文字和多模式)和圖像生成。您可以透過探索 Amazon Bedrock 文件中的所有內容來了解更多資訊。快樂建造!

以上是使用 Amazon Titan Text Premier 模型在 Go 中建立生成式 AI 應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn