Maison > développement back-end > Golang > le corps du texte

Créez des applications d'IA génératives dans Go à l'aide du modèle Amazon Titan Text Premier

WBOY
Libérer: 2024-09-03 14:52:49
original
703 Les gens l'ont consulté

Utilisez le modèle Amazon Titan Text Premier avec le package langchaingo

Dans ce blog, je vais vous expliquer comment utiliser le modèle Amazon Titan Text Premier dans vos applications Go avec langchaingo qui est un port Go de langchain (écrit à l'origine pour Python et JS/TS).

Amazon Titan Text Premier est un LLM avancé au sein de la famille Amazon Titan Text. Il est utile pour un large éventail de tâches, notamment RAG, agents, chat, chaîne de pensée, génération de texte ouverte, brainstorming, résumé, génération de code, création de tableaux, formatage de données, paraphrase, réécriture, extraction et questions-réponses. Titan Text Premier est également optimisé pour l'intégration avec les agents et les bases de connaissances pour Amazon Bedrock.

Utiliser Titan Text Premier avec langchaingo

Commençons par un exemple.

Reportez-vous à la section **Avant de commencer* de cet article de blog pour remplir les conditions préalables à l'exécution des exemples. Cela inclut l'installation de Go, la configuration de l'accès à Amazon Bedrock et la fourniture des autorisations IAM nécessaires.*

Vous pouvez vous référer au code complet ici. Pour exécuter l'exemple :

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

go run basic/main.go
Copier après la connexion

J'ai reçu la réponse ci-dessous pour l'invite "Expliquez l'IA en 100 mots ou moins", mais elle peut être différente dans votre cas :

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.
Copier après la connexion

Voici un aperçu rapide du code :

Nous commençons par instancier le bedrockruntime.Client :

cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region))
client = bedrockruntime.NewFromConfig(cfg)
Copier après la connexion

Nous l'utilisons pour créer l'instance langchaingo llm.Model - notez que modelID que nous spécifions est celui de Titan Text Premier qui est amazon.titan-text-premier-v1:0.

llm, err := bedrock.New(bedrock.WithClient(client), bedrock.WithModel(modelID))
Copier après la connexion

Nous créons un llms.MessageContent et l'invocation du LLM est effectuée par llm.GenerateContent. Remarquez que vous n'avez pas à penser à la charge utile de requête/réponse spécifique de Titan Text Premier - qui est résumée par 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))
Copier après la connexion

Discutez avec vos documents

C'est également un scénario assez courant. langchaingo prend en charge de nombreux types, notamment le texte, le PDF, le HTML (et même Notion !).

Vous pouvez vous référer au code complet ici. Pour exécuter cet exemple :

go run doc-chat/main.go
Copier après la connexion

L'exemple utilise cette page du guide de l'utilisateur Amazon Bedrock comme document source (HTML), mais n'hésitez pas à utiliser n'importe quelle autre source :

export SOURCE_URL=<enter URL>
go run doc-chat/main.go
Copier après la connexion

Vous devriez être invité à saisir votre question :

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

Enter your message: 
Copier après la connexion

J'ai essayé ces questions et j'ai obtenu des réponses assez précises :

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?
Copier après la connexion

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

À propos, la fonctionnalité Discuter avec votre document est également disponible nativement dans Amazon Bedrock.

Parcourons le code très rapidement. On commence par charger le contenu depuis l'URL source :

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

Ensuite, nous commençons la conversation, en utilisant une simple boucle 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))
        //...
    }
Copier après la connexion

La chaîne que nous utilisons est créée avec une invite personnalisée (basée sur cette directive) - nous remplaçons le comportement par défaut dans 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)
}
Copier après la connexion

Maintenant, le dernier exemple : un autre cas d'utilisation populaire.

RAG - Génération augmentée de récupération

J'ai déjà expliqué comment utiliser RAG dans vos applications Go. Cette fois, nous utiliserons :

  • Titan Text Premier en tant que LLM,
  • Titan Embeddings G1 comme modèle d'intégration,
  • PostgreSQL comme magasin de vecteurs (exécuté localement à l'aide de Docker) à l'aide de l'extension pgvector.

Démarrez le conteneur Docker :

docker run --name pgvector --rm -it -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres ankane/pgvector
Copier après la connexion

Activez l'extension pgvector en vous connectant à PostgreSQL (à l'aide de psql) depuis un autre terminal :

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

CREATE EXTENSION IF NOT EXISTS vector;
Copier après la connexion

Vous pouvez vous référer au code complet ici. Pour exécuter cet exemple :

go run rag/main.go
Copier après la connexion

L'exemple utilise la page Amazon Bedrock Studio comme document source (HTML), mais n'hésitez pas à utiliser n'importe quelle autre source :

export SOURCE_URL=<enter URL>
go run rag/main.go
Copier après la connexion

Vous devriez voir un résultat et être invité à saisir vos questions. J'ai essayé ceux-ci :

what is bedrock studio?
how do I enable bedrock studio?
Copier après la connexion

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

Comme d'habitude, voyons ce qui se passe. Le chargement des données se fait de la même manière qu'avant, et il en va de même pour la conversation (boucle 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),
        )
    //....
    }
Copier après la connexion

La partie RAG est légèrement différente. Nous utilisons une chaîne RetrievelQA avec une invite personnalisée (similaire à celle utilisée par les bases de connaissances pour 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,
    )
}
Copier après la connexion

Conclusion

J'ai couvert Amazon Titan Text Premier, l'un des nombreux modèles de génération de texte de la famille Titan. En plus de la génération de texte, Amazon Titan propose également des modèles d'intégration (texte et multimodal) et la génération d'images. Vous pouvez en savoir plus en explorant tout cela dans la documentation Amazon Bedrock. Bonne construction !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal