Maison >développement back-end >Golang >Créez des applications d'IA génératives dans Go à l'aide du modèle Amazon Titan Text Premier

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

WBOY
WBOYoriginal
2024-09-03 14:52:49736parcourir

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

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.

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)

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

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

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

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

Vous devriez être invité à saisir votre question :

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

Enter your message: 

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?

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
}

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

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

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

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;

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

go run rag/main.go

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

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?

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

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

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!

Déclaration:
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