Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bina aplikasi AI generatif dalam Go menggunakan model Amazon Titan Text Premier

Bina aplikasi AI generatif dalam Go menggunakan model Amazon Titan Text Premier

WBOY
WBOYasal
2024-09-03 14:52:49685semak imbas

Gunakan model Amazon Titan Text Premier dengan pakej langchaingo

Dalam blog ini saya akan membimbing anda tentang cara menggunakan model Amazon Titan Text Premier dalam aplikasi Go anda dengan langchaingo yang merupakan port Go langchain (asalnya ditulis untuk Python dan JS/TS).

Amazon Titan Text Premier ialah LLM lanjutan dalam keluarga Amazon Titan Text. Ia berguna untuk pelbagai tugas termasuk RAG, ejen, sembang, rantaian pemikiran, penjanaan teks terbuka, sumbang saran, ringkasan, penjanaan kod, penciptaan jadual, pemformatan data, parafrasa, penulisan semula, pengekstrakan dan Soal Jawab. Titan Text Premier juga dioptimumkan untuk penyepaduan dengan Agen dan Pangkalan Pengetahuan untuk Amazon Bedrock.

Menggunakan Titan Text Premier dengan langchaingo

Mari kita mulakan dengan contoh.

Rujuk bahagian **Sebelum Anda Bermula* dalam catatan blog ini untuk melengkapkan prasyarat untuk menjalankan contoh. Ini termasuk memasang Go, mengkonfigurasi akses Amazon Bedrock dan menyediakan kebenaran IAM yang diperlukan.*

Anda boleh rujuk kod lengkap di sini. Untuk menjalankan contoh:

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

go run basic/main.go

Saya mendapat respons di bawah ini untuk gesaan "Jelaskan AI dalam 100 perkataan atau kurang", tetapi ia mungkin berbeza dalam kes anda:

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.

Berikut ialah panduan ringkas kod:

Kita mulakan dengan mendapatkan instantiating batuan dasar.Pelanggan:

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

Kami menggunakannya untuk mencipta contoh langchaingo llm.Model - ambil perhatian bahawa ID model yang kami tentukan ialah Titan Text Premier iaitu amazon.titan-text-premier-v1:0.

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

Kami mencipta llms.MessageContent dan seruan LLM dilakukan oleh llm.GenerateContent. Perhatikan bagaimana anda tidak perlu memikirkan tentang permintaan/muatan respons khusus Titan Text Premier - yang disarikan oleh 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))

Berbual dengan dokumen anda

Ini adalah senario yang agak biasa juga. langchaingo menyokong sekumpulan jenis termasuk teks, PDF, HTML (dan juga Notion!).

Anda boleh rujuk kod lengkap di sini. Untuk menjalankan contoh ini:

go run doc-chat/main.go

Contohnya menggunakan halaman ini daripada panduan Pengguna Amazon Bedrock sebagai dokumen sumber (HTML) tetapi jangan ragu untuk menggunakan mana-mana sumber lain:

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

Anda harus digesa untuk memasukkan soalan anda:

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

Enter your message: 

Saya mencuba soalan ini dan mendapat jawapan yang cukup tepat:

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

Sebenarnya, ciri Sembang dengan dokumen anda juga tersedia secara asli di Amazon Bedrock.

Mari kita lihat kod ini dengan cepat. Kami mulakan dengan memuatkan kandungan daripada URL sumber:

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

Kemudian, kami memulakan perbualan, menggunakan gelung untuk mudah:

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

Rantaian yang kami gunakan dibuat dengan gesaan tersuai (berdasarkan garis panduan ini) - kami mengatasi gelagat lalai dalam 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)
}

Sekarang untuk contoh terakhir - satu lagi kes penggunaan popular.

RAG - Retrieval Augmented Generation

Saya sebelum ini telah membincangkan cara menggunakan RAG dalam aplikasi Go anda. Kali ini kami akan menggunakan:

  • Titan Text Premier sebagai LLM,
  • Titan Embeddings G1 sebagai model benam,
  • PostgreSQL sebagai kedai vektor (berjalan secara setempat menggunakan Docker) menggunakan sambungan pgvector.

Mulakan bekas Docker:

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

Aktifkan sambungan pgvector dengan log masuk ke PostgreSQL (menggunakan psql) dari terminal lain:

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

CREATE EXTENSION IF NOT EXISTS vector;

Anda boleh rujuk kod lengkap di sini. Untuk menjalankan contoh ini:

go run rag/main.go

Contohnya menggunakan halaman Amazon Bedrock Studio sebagai dokumen sumber (HTML) tetapi jangan ragu untuk menggunakan mana-mana sumber lain:

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

Anda sepatutnya melihat output dan digesa untuk memasukkan soalan anda. Saya mencuba ini:

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

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

Seperti biasa, mari kita lihat apa yang berlaku. Pemuatan data dilakukan dengan cara yang sama seperti sebelumnya, dan begitu juga untuk perbualan (untuk gelung):

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

Bahagian RAG sedikit berbeza. Kami menggunakan rantaian RetrievelQA dengan gesaan tersuai (serupa dengan yang digunakan oleh Pangkalan Pengetahuan untuk 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,
    )
}

Kesimpulan

Saya meliputi Amazon Titan Text Premier, yang merupakan salah satu model penjanaan teks berbilang dalam keluarga Titan. Selain penjanaan teks, Amazon Titan juga mempunyai model pembenaman (teks dan multimodal), dan penjanaan imej. Anda boleh mengetahui lebih lanjut dengan meneroka semua ini dalam dokumentasi Amazon Bedrock. Selamat membina!

Atas ialah kandungan terperinci Bina aplikasi AI generatif dalam Go menggunakan model Amazon Titan Text Premier. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn