Heim >Backend-Entwicklung >Golang >Erstellen Sie generative KI-Anwendungen in Go mit dem Amazon Titan Text Premier-Modell

Erstellen Sie generative KI-Anwendungen in Go mit dem Amazon Titan Text Premier-Modell

WBOY
WBOYOriginal
2024-09-03 14:52:49737Durchsuche

Verwenden Sie das Amazon Titan Text Premier-Modell mit dem langchaingo-Paket

In diesem Blog werde ich Sie durch die Verwendung des Amazon Titan Text Premier-Modells in Ihren Go-Anwendungen mit langchaingo führen, einem Go-Port von langchain (ursprünglich für Python und JS/TS geschrieben).

Amazon Titan Text Premier ist ein erweitertes LLM innerhalb der Amazon Titan Text-Familie. Es ist für eine Vielzahl von Aufgaben nützlich, darunter RAG, Agenten, Chat, Gedankenkette, offene Textgenerierung, Brainstorming, Zusammenfassung, Codegenerierung, Tabellenerstellung, Datenformatierung, Paraphrasierung, Umschreiben, Extrahieren und Fragen und Antworten. Titan Text Premier ist außerdem für die Integration mit Agenten und Wissensdatenbanken für Amazon Bedrock optimiert.

Verwendung von Titan Text Premier mit langchaingo

Beginnen wir mit einem Beispiel.

Lesen Sie den Abschnitt **Bevor Sie beginnen* in diesem Blogbeitrag, um die Voraussetzungen für die Ausführung der Beispiele zu erfüllen. Dazu gehört die Installation von Go, die Konfiguration des Amazon Bedrock-Zugriffs und die Bereitstellung der erforderlichen IAM-Berechtigungen.*

Den vollständigen Code finden Sie hier. Um das Beispiel auszuführen:

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

go run basic/main.go

Ich habe die folgende Antwort auf die Aufforderung „Erklären Sie KI in 100 Wörtern oder weniger“ erhalten, aber in Ihrem Fall kann es anders sein:

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.

Hier ist ein kurzer Überblick über den Code:

Wir beginnen mit der Instanziierung von bedrockruntime.Client:

cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region))
client = bedrockruntime.NewFromConfig(cfg)

Wir verwenden dies, um die langchaingo llm.Model-Instanz zu erstellen. Beachten Sie, dass die von uns angegebene Modell-ID die von Titan Text Premier ist, also amazon.titan-text-premier-v1:0.

llm, err := bedrock.New(bedrock.WithClient(client), bedrock.WithModel(modelID))

Wir erstellen einen llms.MessageContent und der LLM-Aufruf erfolgt durch llm.GenerateContent. Beachten Sie, dass Sie nicht über die spezifische Anforderungs-/Antwortnutzlast von Titan Text Premier nachdenken müssen – diese wird von langchaingo abstrahiert:

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

Chatten Sie mit Ihren Dokumenten

Dies ist auch ein ziemlich häufiges Szenario. langchaingo unterstützt eine Reihe von Typen, darunter Text, PDF, HTML (und sogar Notion!).

Den vollständigen Code finden Sie hier. Um dieses Beispiel auszuführen:

go run doc-chat/main.go

Das Beispiel verwendet diese Seite aus dem Amazon Bedrock-Benutzerhandbuch als Quelldokument (HTML), Sie können jedoch auch jede andere Quelle verwenden:

export SOURCE_URL=<enter URL>
go run doc-chat/main.go

Sie sollten aufgefordert werden, Ihre Frage einzugeben:

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

Enter your message: 

Ich habe diese Fragen ausprobiert und ziemlich genaue Antworten erhalten:

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

Übrigens ist die Funktion „Mit Ihrem Dokument chatten“ auch nativ in Amazon Bedrock verfügbar.

Lassen Sie uns den Code kurz durchgehen. Wir beginnen mit dem Laden des Inhalts von der Quell-URL:

func getDocs(link string) []schema.Document {
    //...
    resp, err := http.Get(link)
    docs, err := documentloaders.NewHTML(resp.Body).Load(context.Background())
    return docs
}

Dann beginnen wir das Gespräch mit einer einfachen for-Schleife:

    //...
    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))
        //...
    }

Die von uns verwendete Kette wird mit einer benutzerdefinierten Eingabeaufforderung erstellt (basierend auf dieser Richtlinie) – wir überschreiben das Standardverhalten in 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)
}

Nun zum letzten Beispiel – ein weiterer beliebter Anwendungsfall.

RAG – Retrieval Augmented Generation

Ich habe zuvor erläutert, wie Sie RAG in Ihren Go-Anwendungen verwenden. Dieses Mal verwenden wir:

  • Titan Text Premier als LLM,
  • Titan Embeddings G1 als Einbettungsmodell,
  • PostgreSQL als Vektorspeicher (lokal mit Docker ausgeführt) unter Verwendung der pgvector-Erweiterung.

Starten Sie den Docker-Container:

docker run --name pgvector --rm -it -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres ankane/pgvector

Aktivieren Sie die pgvector-Erweiterung, indem Sie sich von einem anderen Terminal aus bei PostgreSQL anmelden (mit psql):

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

CREATE EXTENSION IF NOT EXISTS vector;

Den vollständigen Code finden Sie hier. Um dieses Beispiel auszuführen:

go run rag/main.go

Das Beispiel verwendet die Amazon Bedrock Studio-Seite als Quelldokument (HTML), Sie können jedoch auch jede andere Quelle verwenden:

export SOURCE_URL=<enter URL>
go run rag/main.go

Sie sollten eine Ausgabe sehen und aufgefordert werden, Ihre Fragen einzugeben. Ich habe Folgendes ausprobiert:

what is bedrock studio?
how do I enable bedrock studio?

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

Mal sehen wie immer, was los ist. Das Laden der Daten erfolgt auf ähnliche Weise wie zuvor, und das Gleiche gilt für die Konversation (for-Schleife):

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

Der RAG-Teil ist etwas anders. Wir verwenden eine RetrievelQA-Kette mit einer benutzerdefinierten Eingabeaufforderung (ähnlich der, die von Knowledge Bases für Amazon Bedrock verwendet wird):

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

Abschluss

Ich habe über Amazon Titan Text Premier berichtet, eines von mehreren Textgenerierungsmodellen der Titan-Familie. Neben der Textgenerierung verfügt Amazon Titan auch über Einbettungsmodelle (Text und multimodal) und Bildgenerierung. Weitere Informationen finden Sie in der Amazon Bedrock-Dokumentation. Viel Spaß beim Bauen!

Das obige ist der detaillierte Inhalt vonErstellen Sie generative KI-Anwendungen in Go mit dem Amazon Titan Text Premier-Modell. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn