>  기사  >  백엔드 개발  >  Amazon Titan Text Premier 모델을 사용하여 Go에서 생성적 AI 애플리케이션 구축

Amazon Titan Text Premier 모델을 사용하여 Go에서 생성적 AI 애플리케이션 구축

WBOY
WBOY원래의
2024-09-03 14:52:49607검색

langchaingo 패키지와 함께 Amazon Titan Text Premier 모델 사용

이 블로그에서는 langchain의 Go 포트인 langchaingo(원래 Python 및 JS/TS용으로 작성됨)를 사용하여 Go 애플리케이션에서 Amazon Titan Text Premier 모델을 사용하는 방법을 안내합니다.

Amazon Titan Text Premier는 Amazon Titan Text 제품군 내의 고급 LLM입니다. RAG, 에이전트, 채팅, 생각의 사슬, 개방형 텍스트 생성, 브레인스토밍, 요약, 코드 생성, 테이블 생성, 데이터 형식 지정, 의역, 재작성, 추출 및 Q&A를 포함한 광범위한 작업에 유용합니다. Titan Text Premier는 Amazon Bedrock용 에이전트 및 기술 자료와의 통합에도 최적화되어 있습니다.

langchaingo와 함께 Titan Text Premier 사용

예제부터 시작해 보겠습니다.

이 블로그 게시물의 **시작하기 전에* 섹션을 참조하여 예제 실행을 위한 전제 조건을 완료하세요. 여기에는 Go 설치, Amazon Bedrock 액세스 구성 및 필요한 IAM 권한 제공이 포함됩니다.*

여기에서 전체 코드를 참조할 수 있습니다. 예제를 실행하려면:

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

go run basic/main.go

"AI를 100단어 이하로 설명하세요"라는 메시지에 대해 아래 응답을 받았지만 귀하의 경우에는 다를 수 있습니다.

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을 인스턴스화하는 것부터 시작합니다.클라이언트:

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

이를 사용하여 langchaingo llm.Model 인스턴스를 생성합니다. 우리가 지정하는 modelID는 Titan Text Premier의 모델 ID(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를 사용하는 방법을 다루었습니다. 이번에는 다음을 사용할 것입니다:

  • LLM으로서의 Titan Text Premier
  • 임베딩 모델인 Titan Embeddings G1,
  • pgVector 확장을 사용하는 벡터 저장소(Docker를 사용하여 로컬로 실행)인 PostgreSQL.

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의 Knowledge Base에서 사용하는 것과 유사).

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

결론

Titan 제품군의 여러 텍스트 생성 모델 중 하나인 Amazon Titan Text Premier를 다루었습니다. Amazon Titan에는 텍스트 생성 외에도 임베딩 모델(텍스트 및 멀티모달) 및 이미지 생성 기능도 있습니다. Amazon Bedrock 설명서에서 이러한 모든 내용을 탐색하여 자세히 알아볼 수 있습니다. 즐거운 빌딩 되세요!

위 내용은 Amazon Titan Text Premier 모델을 사용하여 Go에서 생성적 AI 애플리케이션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.