Integração perfeita com a API Amazon Bedrock para geração de texto e imagem com tecnologia de IA em Ruby? + ?. API Amazon Bedrock.
Amazon Bedrock é um serviço totalmente gerenciado que disponibiliza FMs das principais startups de IA e da Amazon por meio de uma API, para que você possa escolher entre uma ampla variedade de FMs para encontrar o modelo mais adequado para seu caso de uso.
Adicione a seguinte linha ao Gemfile da sua aplicação:
gem "ruby-amazon-bedrock" , "~> 0.2.4"
E então execute:
$ bundle install
Ou instale com:
$ gem install ruby-amazon-bedrock -v 0.2.4
e exigir com:
require "amazon_bedrock"
Para usar o Amazon Bedrock, você precisará de credenciais seguras, assim como qualquer outro serviço da AWS. Obtenha suas chaves do AWS IAM (Identity and Access Management) https://us-east-1.console.aws.amazon.com/iam
Para usar o Bedrock, você deve solicitar acesso aos FMs do Bedrock. Para fazer isso, você precisará ter as permissões IAM corretas. Para determinados modelos, talvez seja necessário enviar primeiro os detalhes do caso de uso antes de poder solicitar acesso.
Esteja ciente de que ao usar a gema ruby-amazon-bedrock
em conjunto com o Amazon Bedrock, você poderá incorrer em custos associados ao uso dos serviços Amazon Bedrock. Como usuário, você é o único responsável por todos e quaisquer custos decorrentes do uso do Amazon Bedrock. Você pode ver mais detalhes sobre preços aqui
Instancie um cliente passando suas credenciais do AWS IAM:
client = RubyAmazonBedrock :: Client . new (
region : "AWS_REGION" ,
access_key_id : "AWS_ACCESS_KEY_ID" ,
secret_access_key : "AWS_SECRET_ACCESS_KEY"
)
Ou copie o .env.sample
para um arquivo .env
com as credenciais da sua conta e use a variável ENV
. NOTA: Esta etapa é NECESSÁRIA para executar os testes com rspec
client = RubyAmazonBedrock :: Client . new (
region : ENV [ "AWS_REGION" ] ,
access_key_id : ENV [ "AWS_ACCESS_KEY_ID" ] ,
secret_access_key : ENV [ "AWS_SECRET_ACCESS_KEY" ]
)
Você também pode usar perfis nomeados da AWS passando o argumento da palavra-chave profile
. Ao usar um perfil nomeado, não será necessário especificar a region
, access_key_id
e access_token
.
client = RubyAmazonBedrock :: Client . new (
profile : "AWS_PROFILE"
)
O argumento options aumenta a flexibilidade do método, permitindo configurações adicionais específicas do modelo. Se não for fornecido explicitamente, o método assume como padrão um conjunto de parâmetros de modelo padrão. Você pode ver mais detalhes sobre os parâmetros opcionais de um modelo.
Amazon Bedrock é um serviço totalmente gerenciado que disponibiliza FMs das principais startups de IA e da Amazon por meio de uma API, para que você possa escolher entre uma ampla variedade de FMs para encontrar o modelo mais adequado para seu caso de uso.
As empresas usam a família Jurassic de LLMs líderes da AI21 para construir aplicativos e serviços generativos orientados por IA, aproveitando os dados organizacionais existentes. Jurassic oferece suporte a casos de uso intersetoriais, incluindo geração de textos longos e curtos, resposta a perguntas contextuais, resumo e classificação. Projetado para seguir instruções de linguagem natural, Jurassic é treinado em um enorme corpus de texto da web e oferece suporte a seis idiomas além do inglês. Veja mais...
As opções para esses modelos são:
{
temperature : 0.5 , # float
max_tokens : 200 , # integer
stop_sequences : [ ] , # [string]
top_p : 0.5 , # float
count_penalty : 0 , # integer
presence_penalty : 0 , # integer
frequency_penalty : 0 # integer
}
Para obter mais documentação sobre os tipos de dados e valores dos parâmetros, você pode [Ver mais detalhes...][https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-jurassic2.html]
Como chamar modelos AI21:
Jurássico-2 Ultra
Suporta: resposta a perguntas de livro aberto, resumo, geração de rascunhos, extração de informações, idealização
Idiomas: inglês, espanhol, francês, alemão, português, italiano, holandês
client . invoke_model ( id : 'ai21.j2-ultra-v1' , prompt : "What's natural language processing?" , options : { } )
# Response
{ :id => 1234 ,
:prompt =>
{ :text => "Describe how an LLM works" ,
:tokens =>
[ { :generatedToken => { :token => "▁Describe" , :logprob => - 10.674324035644531 , :raw_logprob => - 10.674324035644531 } ,
:completions =>
[ { :data =>
{ :text =>
" n Natural language processing (NLP) is a field of computer science, artificial intelligence, and linguistics concerned with the interactions between computers and human (natural) languages, in particular how to program computers to process and analyze large amounts of natural language data. The goal of NLP is to provide computers with the ability to read, understand, and generate human language." ,
:tokens =>
[ { :generatedToken => { :token => "<|newline|>" , :logprob => 0.0 , :raw_logprob => - 0.00046850196667946875 } ,
Jurássico-2 Médio
client . invoke_model ( id : 'ai21.j2-mid-v1' , prompt : "What's GenAI?" , options : { } )
# Response
{ :id => 1234 ,
:prompt =>
{ :text => "What's GenAI?" ,
:tokens =>
[ { :generatedToken => { :token => "▁What's" , :logprob => - 9.553738594055176 , :raw_logprob => - 9.553738594055176 } ,
:topTokens => nil ,
:textRange => { :start => 0 , :end => 6 } } ,
:completions =>
[ { :data =>
{ :text =>
" n GenAI is a proposed standard for a generic AI language, which would allow AI systems to communicate and reason with each other in a common language. The goal of GenAI is to create a universal language that can be used by all AI systems, regardless of their specific task or underlying architecture. This would make it easier for AI systems to work together and learn from each other, and it would also make it easier for humans to interact with and understand AI systems." ,
:tokens =>
[ { :generatedToken => { :token => "<|newline|>" , :logprob => 0.0 , :raw_logprob => - 0.0009662011871114373 } ,
Os modelos do Amazon Titan Foundation são pré-treinados em grandes conjuntos de dados, o que os torna modelos poderosos e de uso geral. Use-os como estão ou personalize-os ajustando os modelos com seus próprios dados para uma tarefa específica, sem anotar grandes volumes de dados. Veja mais...
As opções para esses modelos são:
{
temperature : 0.5 , # float
top_p : 0.5 , # float
max_tokens : 512 , # integer
stop_sequences : [ ] # [string]
}
Para obter mais documentação sobre os tipos de dados e valores dos parâmetros, você pode [Ver mais detalhes...][https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-titan-text.html]
Como chamar modelos de texto do Amazon Titan:
Texto Titã G1 - Lite
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=amazon.titan-text-lite-v1
Suporta: Geração de texto, Geração de código, Formatação Rich Text, Orquestração (Agentes), Ajuste Fino.
client . invoke_model ( id : 'amazon.titan-text-lite-v1' , prompt : 'Generate a story about rubies and gems' , options : { } )
# Response
{ :inputTextTokenCount => 8 ,
:results =>
[ { :tokenCount => 294 ,
:outputText =>
" n Once upon a time, there was a king who was very fond of rubies and gems. He had a collection of the most beautiful rubies and gems ..." ,
:completionReason => "FINISH" } ] }
Texto Titã G1 - Expresso
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=amazon.titan-text-express-v1
client . invoke_model ( id : 'amazon.titan-text-express-v1' , prompt : 'Generate a post about cats formatted with HTML tags' , options : { } )
# Response
{ :inputTextTokenCount => 9 ,
:results =>
[ { :tokenCount => 330 ,
:outputText =>
" n <h1>Cats</h1> n n Cats are small, furry, carnivorous mammals that are loved by many people around the world. They come in a variety of colors, shapes, and sizes, and have unique personalities that make them great companions. n n " ,
:completionReason => "FINISH" } ] }
Suporta: geração de texto, geração de código, formatação rich text, orquestração (agentes), ajuste fino
A Anthropic oferece a família Claude de grandes modelos de linguagem desenvolvidos especificamente para conversas, resumos, perguntas e respostas, automação de fluxo de trabalho, codificação e muito mais. Os primeiros clientes relatam que Claude tem muito menos probabilidade de produzir resultados prejudiciais, é mais fácil de conversar e mais orientável - para que você possa obter o resultado desejado com menos esforço. Claude também pode orientar a personalidade, o tom e o comportamento.
As opções para esses modelos são:
{
temperature : 0.3 , # float
top_p : 0.5 , # float
top_k : 0.5 , # float
max_tokens : 1000 , # integer
stop_sequences : [ ] # [string]
}
Para obter mais documentação sobre os tipos de dados e valores dos parâmetros, você pode [Ver mais detalhes...][https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html]
Como chamar modelos antrópicos:
Claude Instantâneo 1.2
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=anthropic.claude-instant-v1
Suporta: resposta a perguntas, extração de informações, remoção de PII, geração de conteúdo, classificação de múltipla escolha, Roleplay, comparação de texto, resumo, perguntas e respostas de documentos com citação
client . invoke_model ( id : 'anthropic.claude-instant-v1' , prompt : 'What is a neural network?' )
# Response
{ :completion =>
" A neural network is a type of machine learning model inspired by the human brain. The key elements of neural networks are: n n - Neurons..."
: stop_reason = > "stop_sequence" ,
:stop => " n n Human:" }
Cláudio 1.3
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=anthropic.claude-v1
Suporta: resposta a perguntas, extração de informações, remoção de PII, geração de conteúdo, classificação de múltipla escolha, Roleplay, comparação de texto, resumo, perguntas e respostas de documentos com citação
client . invoke_model ( id : 'anthropic.claude-v1' , prompt : "You will be acting as a AI customer success agent for a company called Acme Dynamics." )
# Response
{ :completion =>
" Okay, thanks for providing the context. My name is Claude, I'm an AI assistant created by Anthropic to be helpful, harmless, and honest. How can I assist you as a customer success agent for Acme Dynamics today?" ,
:stop_reason => "stop_sequence" ,
:stop => " n n Human:" }
Cláudio 2
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=anthropic.claude-v2
Suporta: resposta a perguntas, extração de informações, remoção de PII, geração de conteúdo, classificação de múltipla escolha, Roleplay, comparação de texto, resumo, perguntas e respostas de documentos com citação
client . invoke_model ( id : 'anthropic.claude-v2' , prompt : "I'm going to provide some text. I want to remove all person
ally identifying information from this text and replace it with XXX. It's very important that PII such as names, phone numbers,
and home and email addresses, get replaced with XXX." )
# Response
{ :completion =>
" Here is the text with personally identifying information replaced with XXX: n n XXX lives at XXX in the city of XXX. XXX can be reached at phone..." ,
:stop_reason => "stop_sequence" ,
:stop => " n n Human:" }
Os modelos Cohere são modelos de geração de texto para casos de uso de negócios. Os modelos Cohere são treinados em dados que suportam aplicações de negócios confiáveis, como geração de texto, resumo, redação, diálogo, extração e resposta a perguntas.
As opções para modelos de comando são:
{
temperature : 0.3 , # float
top_p : 0.5 , # float
top_k : 0.5 , # float
max_tokens : 1000 , # integer
stop_sequences : [ ] , # [string]
num_generations : 2 , # integer
return_likelihoods : 'ALL' , # string
stream : true , # boolean
truncate : 'END' # srtring
}
Para obter mais documentação sobre os tipos de dados e valores dos parâmetros, você pode [Ver mais detalhes...][https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-cohere-command.html]
Como chamar modelos de comando Cohere:
Comando
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=cohere.command-text-v14
Suporta: Resumo, redação, diálogo, extração e resposta a perguntas.
client . invoke_model ( id : 'cohere.command-text-v14' , prompt : 'Generate a twit about why Ruby on Rails is a great tool for building a startup. Write a few hashtags' )
# Response
{ :generations =>
[ { :finish_reason => "COMPLETE" ,
:id => "b82658a5-8f36-4a94-a1f1-7802aa418904" ,
:text =>
" Sure! Here's a tweet: n n Ruby on Rails is a powerful framework for building web applications. It is highly scalable, has robust community support, and is the perfect choice for startups looking to build fast and ship often. #RoR #RubyOnRails #Startup #Tech #Efficient n n What do you think?" } ] ,
:id => "d5d5149f-ea5a-47ae-ae37-8324882b06c7" ,
:prompt => "Generate a twit about why Ruby on Rails is a great tool for building a startup. Write a few hashtags:" }
Luz de comando
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=cohere.command-light-text-v14
Suporta: Resumo, redação, diálogo, extração e resposta a perguntas.
client . invoke_model ( id : 'cohere.command-light-text-v14' , prompt : 'Generate a facebook post about GenAI models available at Amazon Bedrock' )
# Response
{ :generations =>
[ { :finish_reason => "MAX_TOKENS" ,
:id => "b58eaa37-915e-4f26-b37c-6b4875516648" ,
:text =>
" Introducing the latest innovation at Amazon Bedrock - our state-of-the-art GenAI models! ? n n Our team has been working tirelessly to bring you the best in artificial intelligence, and we're excited to share the results with you. With our GenAI models, you can now: n n - Develop applications that can understand and respond to human language with incredible accuracy, thanks to our state-of-the-art Large Language Models (LLMs). n -" } ] ,
:id => "0d2f2c74-cae9-434b-b5d5-f44aaeb1a587" ,
:prompt => "Generate a facebook post about GenAI models available at Amazon Bedrock:" }
As opções para modelos incorporados são:
{
input_type : 'classification' , # string
truncate : 'END' # string
}
Para obter mais documentação sobre os tipos de dados e valores dos parâmetros, você pode [Ver mais detalhes...][https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-embed.html]
Como chamar modelos incorporados Cohere:
Incorporar inglês
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=cohere.embed-english-v3
Suporta: pesquisa semântica, geração aumentada de recuperação (RAG), classificação, clustering.
# WIP
# client.invoke_model(id: 'cohere.embed-english-v3', prompt: 'Your prompt goes here ...')
Incorporar multilíngue
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=cohere.embed-multilingual-v3
# WIP
# client.invoke_model(id: 'cohere.embed-multilingual-v3', prompt: 'Your prompt goes here ...')
A Meta busca desbloquear o poder dos grandes modelos de linguagem. Nossa versão mais recente do Llama agora está acessível a indivíduos, criadores, pesquisadores e empresas de todos os tamanhos para que possam experimentar, inovar e dimensionar suas ideias de forma responsável.
As opções para esses modelos são:
{
max_tokens : 128 , # integer
temperature : 0.9 , # float
top_p : 0.7 # float
}
Como chamar modelos Meta:
Lhama 2 Bate-papo 13B
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=meta.llama2-13b-chat-v1
Suporta: Llama 2 destina-se ao uso comercial e de pesquisa em inglês. Modelos de bate-papo ajustados destinam-se a aplicativos baseados em bate-papo.
client . invoke_model ( id : 'meta.llama2-13b-chat-v1' , prompt : 'Generate an Instagram Post about the Metaverse' )
# Resopnse
{ :generation =>
" n n Hey #Instagram community! I'm super excited to share my latest discovery with you all - the #Metaverse! ? n n Have you heard of it? It's like a virtual world where you can be anyone and do anything! ? From exploring new planets to attending virtual concerts, the possibilities are endless! ? n n I've been spending some time in the #Metaverse lately, and let me tell you, it's a game changer! Not only is it a ton of fun, but it's also a great way to connect with people from all over the world. ? n n I've made some amazing friends in the #Metaverse, and we've had some incredible adventures together! ?? n n So, what are you waiting for? Come join me in the #Metaverse and let's explore this amazing virtual world together! ? n n #Metaverse #VirtualReality #VR #Gaming #Adventure #Fun #Community #Friends #Instagram #SocialMedia" ,
:prompt_token_count => 11 ,
:generation_token_count => 275 ,
:stop_reason => "stop" }
Lhama 2 Bate-papo 70B
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=meta.llama2-70b-chat-v1
Suporta: Llama 2 destina-se ao uso comercial e de pesquisa em inglês. Modelos de bate-papo ajustados destinam-se a aplicativos baseados em bate-papo.
client . invoke_model ( id : 'meta.llama2-70b-chat-v1' , prompt : 'Generate a Facebook add to promote a new website that is selling Ruby on Rails and AI courses' )
# Response
{ :generation =>
". n n The ad should be targeted at people who are interested in learning Ruby on Rails and AI, and should highlight the benefits of taking the courses on the website. n n Here is a sample ad that could be used to promote the website: n n Headline: Unlock Your Potential with Ruby on Rails and AI Courses n n Body: Are you interested in learning Ruby on Rails and AI? Look no further! Our website offers a range of courses that will teach you everything you need to know to get started with these exciting technologies. n n Our Ruby on Rails courses will show you how to build powerful web applications using the popular framework, while our AI courses will teach you the fundamentals of machine learning and deep learning. ..." ,
:prompt_token_count => 22 ,
:generation_token_count => 512 ,
:stop_reason => "length" }
A Stability AI é a empresa líder mundial em inteligência artificial generativa de código aberto, colaborando com parceiros dos setores público e privado para levar a infraestrutura da próxima geração a um público global.
As opções para esses modelos são:
{
cfg_scale : 20 , # integer
seed : 1 , # integer
steps : 10 # integer
}
Como chamar modelos de IA de estabilidade:
SDXL 0,8
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=stability.stable-diffusion-xl-v0
Suporta: geração de imagens, edição de imagens
client . invoke_model ( id : 'stability.stable-diffusion-xl-v0' , prompt : 'Generate an image of an orca jumping out of the water' , options : { file_path : 'path/to/your/image.jpg' } )
# NOTE: If file_path is not provided the image will be saved at 'image.jpg'
# Success Response
{
result : :success ,
file_path : 'path/to/your/image.jpg'
}
# Failure Response
{
result : :failure ,
error : ErrorClass
}
Exemplo de imagem gerada
SDXL 1.0
client . invoke_model ( id : 'stability.stable-diffusion-xl-v1' , prompt : 'Generate an image of a white gold ring with a ruby on it' , options : { file_path : 'path/to/your/image.jpg' } )
# NOTE: If file_path is not provided the image will be saved at 'image.jpg'
# Success Response
{
result : :success ,
file_path : 'path/to/your/image.jpg'
}
# Failure Response
{
result : :failure ,
error : ErrorClass
}
Exemplo de imagem gerada