Geração Ai - Exemplos Springboot / Langchain4J
IA generativa refere-se a um subconjunto de inteligência artificial que pode gerar novos conteúdos com base em dados de entrada. Isso engloba modelos que podem criar textos, imagens, músicas e até vídeos. Exemplos de IA generativa incluem modelos de linguagem como GPT-3 e DALL-E da OpenAI, que podem gerar texto e imagens semelhantes aos humanos a partir de descrições textuais, respectivamente.
Os modelos generativos de IA são normalmente treinados em vastos conjuntos de dados e usam técnicas de aprendizagem profunda para aprender padrões e estruturas nos dados. Eles têm uma ampla gama de aplicações, incluindo:
- Processamento de linguagem natural (PNL): geração de texto semelhante ao humano para chatbots, traduções e criação de conteúdo.
- Artes Criativas: Criação de arte, música e elementos de design.
- Aumento de dados: geração de dados adicionais para treinamento de outros modelos de aprendizado de máquina.
- Saúde: Auxiliar em imagens médicas e criar planos de tratamento personalizados.
Como a API LangChain4J Gen AI ajuda os desenvolvedores a criar aplicativos Spring Boot AI
LangChain4J é uma biblioteca Java projetada para simplificar a integração de grandes modelos de linguagem (LLMs) e recursos de IA em aplicativos Java, incluindo aqueles construídos com Spring Boot. Veja como isso ajuda os desenvolvedores:
- API unificada para LLMs: LangChain4J fornece uma API unificada que oferece suporte a vários provedores de LLM, como OpenAI e Google Vertex AI. Essa abstração permite que os desenvolvedores alternem entre diferentes LLMs sem alterar significativamente sua base de código.
- Integração de Loja Incorporada: Integra-se com diversas lojas incorporadas, permitindo o manuseio eficiente de dados vetorizados. Isto é particularmente útil para tarefas de geração aumentada de recuperação (RAG), onde informações relevantes são obtidas de uma base de conhecimento para aprimorar as respostas de IA.
- Caixa de ferramentas de recursos: A biblioteca inclui um conjunto abrangente de ferramentas para modelagem de prompt, gerenciamento de memória e análise de saída. Essas ferramentas ajudam na construção de aplicações complexas de IA, fornecendo abstrações de alto nível e componentes prontos para uso.
- Integração Spring Boot: LangChain4J oferece suporte a Spring Boot, tornando mais fácil para os desenvolvedores criar aplicativos de IA robustos e escalonáveis. A integração permite a incorporação perfeita de serviços de IA em aplicativos Spring Boot, aproveitando a injeção de dependência e os recursos de gerenciamento de configuração do Spring.
- Exemplos e documentação: LangChain4J oferece extensa documentação e exemplos, orientando os desenvolvedores em vários casos de uso e demonstrando como implementar funcionalidades alimentadas por IA em seus aplicativos.
Estudo de caso: Aplicativo de cuidados de saúde - Microsserviços de diagnóstico habilitados para Gen Ai
Exemplos de Gen AI: comparação de 8 LLMs (3 baseados em nuvem e 5 locais) em recursos empresariais
A comparação a seguir é baseada nos recursos disponíveis na API LangChain4J (com suporte do OpenAI ChatGPT). Esses recursos são essenciais para o desenvolvimento de aplicativos empresariais baseados em Gen AI.
# | Exemplo | GPT 4o | Meta Lhama3 | Mistral | Microsoft Phi-3 | Google Gema | TII Falcão 2 | Cláudio 3 | Gêmeos 1,5 |
---|
1. | Olá mundo | ? | ? | ? | ? | ? | ? | ? | ? |
2. | Mundo Complexo | ? | ? | ? M1 | ? | ? | ? | ? | ? |
3. | Dados personalizados | ? | ? | ? | ? | ? | ? F1 | ? | ? |
4. | Geração de imagem | ? | ? L1 | ? M2 | ? P1 | ? | ? F2 | ? | ? |
5. | Modelo de prompt | ? | ? | ? M3 | ? | ? | ? | ? | ? |
6. | Ferramentas | ? | ? L2 | ? M4 | ? P2 | ? G1 | ? F3 | ? | ? G1 |
7. | Memória de bate-papo | ? | ? | ? | ? P3 | ? G2 | ? | ? | ? G2 |
8. | Poucos tiros | ? | ? | ? M5 | ? | ? | ? | ? | ? G3 |
9. | Tradutor de idiomas | ? | ? | ? M6 | ? | ? | ? | ? | ? |
10. | Analisador de sentimento | ? | ? | ? | ? | ? | ? | ? | ? |
11. | Extrator de dados | ? O1 | ? L3 | ? M7 | ? P4 | ? G3 | ? F4 | ? | ? G4 |
12. | Armazenamento persistente | ? | ? | ? M8 | ? P5 | ? G4 | ? | ? | ? |
Exemplos de geração aumentada de recuperação (RAG) de 8 LLMs
# | Exemplo | GPT 4o | Meta Lhama3 | Mistral | Microsoft Phi-3 | Google Gema | TII Falcão 2 | Cláudio 3 | Gêmeos 1,5 |
---|
51. | Simples | ? | ? | ? | ? | ? | ? | ? | ? |
52. | Segmentos | ? | ? | ? | ? | ? | ? | ? | ? |
53. | Transformador de consulta | ? | ? | ? | ? | ? | ? | ? | ? |
54. | Roteador de consulta | ? | ? L4 | ? M9 | ? P6 | ? G4 | ? F5 | ? | ? G5 |
55. | Reclassificação | ? | ? | ? | ? | ? | ? | ? | ? |
56. | Metadados | ? | ? | ? | ? | ? | ? | ? | ? |
57. | Vários recuperadores de conteúdo | ? | ? | ? | ? | ? | ? | ? | ? |
58. | Ignorando a recuperação de conteúdo | ? | ? | ? | ? | ? | ? | ? | ? |
59. | Aplicativo de cuidados de saúde | ? | ? | ? | ? | ? | ? | ? | ? |
Principais classificações de LLM com base em recursos empresariais
# | Classificação | Empresa | LLM | Pontuação | Categoria |
---|
1 | 1 | Antrópico | Claude 3 Haiku | 21/21 | Nuvem |
2 | 2 | IA aberta | Bate-papo GPT 4o | 20/21 | Nuvem |
3 | 3 | meta | Lhama 3 | 17/21 | Local |
4 | 4 | TII | Falcão 2 | 16/21 | Local |
5 | 4 | Google | Gêmeos 1.5 Pró | 16/21 | Nuvem |
6 | 4 | Google | Gema | 16/21 | Local |
7 | 5 | Microsoft | PHI 3 | 15/21 | Local |
8 | 6 | Mistral | Mistral | 21/12 | Local |
Nota: LLMs baseados em nuvem terão suporte a mais de 500 bilhões de parâmetros, enquanto os LLMs locais são baseados principalmente em 8 bilhões de parâmetros.
Confira mais detalhes sobre as pontuações dos testes
Instale LLMs locais
Para instalar os LLMs locais usando Ollama
- Meta Lhama3
- Google Gema
- Microsoft PHI-3
- TII Falcão 2
- Mistral
- Assistente de matemática
Confira o guia de instalação.
Obtenha as chaves para testar Cloud LLMs
Registre-se para obter as chaves API
- Open AI - ChatGPT (a chave de API pode ser criada aqui: https://platform.openai.com/api-keys)
- Anthropic - Claude 3 (a chave API pode ser criada aqui: https://console.anthropic.com/settings/keys)
- Google Cloud - (https://console.cloud.google.com/ - Verifique AiConstants.java para obter instruções)
- Cohere - (chave de API aqui: https://dashboard.cohere.com/welcome/register)
- HuggingFace - (chave de API aqui: https://huggingface.co/settings/tokens)
- Rápido - (chave de API aqui: https://rapidapi.com/judge0-official/api/judge0-ce)
Defina essas chaves em seu ambiente
// API Keys -----------------------------------------------------------------------
// OpenAI API key here: https://platform.openai.com/account/api-keys
public static final String OPENAI_API_KEY = System.getenv("OPENAI_API_KEY");
// Cohere API key here: // https://dashboard.cohere.com/welcome/register
public static final String COHERE_API_KEY = System.getenv("COHERE_API_KEY");
// Anthropic API key here:: https://console.anthropic.com/settings/keys
public static final String ANTHROPIC_API_KEY = System.getenv("ANTHROPIC_API_KEY");
// HuggingFace API key here: https://huggingface.co/settings/tokens
public static final String HF_API_KEY = System.getenv("HF_API_KEY");
// Judge0 RapidAPI key here: https://rapidapi.com/judge0-official/api/judge0-ce
public static final String RAPID_API_KEY = System.getenv("RAPID_API_KEY");
Gen AI - Estrutura do pacote de código
Pacote io.fusion.air.microservice.ai.genai
- controladores (Rest Endpoints para testar os exemplos)
- essencial
- assistentes (baseado em LangChain4J AiService)
- modelos (modelos de dados usados no código)
- prompts (prompts estruturados para ter saídas específicas)
- serviços (Lógica de negócios específica do LLM reutilizada em todos os exemplos.)
- ferramentas (funções sendo invocadas com base na pesquisa LLM)
- exemplos (Claude 3, Falcon 2, GPT 4o, Gemini, Gemma, Llama3, Mistral, Phi-3, Wizard Math)
- utils (Código Genérico para criar ChatLanguageModels e Configurações, Chaves de API e Console Runner)
Estrutura de código
Teste rápido após iniciar o aplicativo SpringBoot
Análise de sentimento usando ChatGPT 4o
Moderação de conteúdo usando ChatGPT 4o
ChatBot usando RAG (Dados Personalizados) - Estudo de Caso: Serviço de Aluguel de Carros
Arquitetura RAG
A Geração Aumentada de Recuperação (RAG) aprimora a produção de grandes modelos de linguagem (LLMs) ao incorporar bases de conhecimento externas confiáveis. Embora os LLMs sejam treinados em vastos conjuntos de dados e utilizem bilhões de parâmetros para gerar respostas para tarefas como resposta a perguntas, tradução de idiomas e conclusão de texto, o RAG otimiza esses resultados referenciando fontes de informações específicas e atualizadas além dos dados de treinamento do modelo. Este processo amplia significativamente as capacidades dos LLMs para atender a domínios especializados ou ao conhecimento interno de uma organização sem a necessidade de reciclagem do modelo. Consequentemente, o RAG fornece uma solução econômica para garantir que o conteúdo gerado permaneça relevante, preciso e contextualmente apropriado.
Grandes Modelos de Linguagem (LLMs) enfrentam vários desafios:
- Eles podem fornecer informações falsas quando não têm a resposta correta.
- Eles podem fornecer informações desatualizadas ou genéricas quando o usuário espera respostas específicas e atuais.
- Eles podem gerar respostas baseadas em fontes não autorizadas.
- Podem produzir respostas imprecisas devido à confusão terminológica, onde diferentes fontes de formação utilizam os mesmos termos para descrever conceitos diferentes.
A Geração Aumentada de Recuperação (RAG) aborda vários desafios associados aos LLMs, direcionando o modelo para buscar informações relevantes de fontes de conhecimento autorizadas e pré-determinadas. Essa abordagem permite que as organizações exerçam mais controle sobre o conteúdo gerado pelo modelo, garantindo precisão e relevância. Além disso, fornece aos usuários insights mais claros sobre as fontes e processos que o LLM usa para formular suas respostas.
Conversa usando LLM com contrato de serviço de aluguel de carro (dados personalizados)
Extrações de dados usando ChatGPT 4o
LangChain4J opera em dois níveis de abstração:
- Baixo nível. Neste nível, você tem mais liberdade e acesso a todos os componentes de baixo nível, como ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding, etc. Esses são os "primitivos" do seu aplicativo baseado em LLM. Você tem controle total sobre como combiná-los, mas precisará escrever mais código cola.
- Alto nível. Nesse nível, você interage com LLMs usando APIs de alto nível, como AiServices e Chains, o que esconde de você toda a complexidade e clichês. Você ainda tem flexibilidade para ajustar e ajustar o comportamento, mas isso é feito de maneira declarativa.
Leia mais... Introdução ao LangChain4J
Estrutura do pacote
Pré-requisitos
- SpringBoot3.2.4
- Java 22
- Jacarta EE 10 (jakarta.servlet. , jakarta.persistence. , javax.validation.*)
- Banco de dados PostgreSQL 14
- Ollama 0.1.38
Por padrão, o aplicativo usará o banco de dados H2 In-Memory. Nenhuma configuração de banco de dados necessária para isso.
Passo 1.1 - Primeiros passos
- clone do git https://github.com/arafkarsh/ms-springboot-324-ai.git
- cd ms-springboot-324-ai
- banco de dados de CD
- Leia o README.md para configurar seu banco de dados (banco de dados PostgreSQL)
- Por padrão (modo Dev), o aplicativo usará o banco de dados In-Memory H2
Passo 1.2 - Compilar (quando seu código estiver pronto)
1.2.1 Compilar o Código
Execute a “compilação” de ms-springboot-324-ai
- compile OR ./compile (executa em Linux e Mac OS)
- mvn limpo; mvn -e pacote; (Todas as plataformas)
- Use as opções de compilação do IDE
1.2.2 O que o script "Compile" fará
- Limpe a pasta de destino
- Gere o número da compilação. e data de construção (faz backup de application.properties)
- construir o resultado final SpringBoot fat jar e maven thin jar
- copie os arquivos jar (e dependências) para a pasta src/docker
- copie o arquivo application.properties para a pasta atual e para a pasta src/docker
Na Etapa 1.2.2, o arquivo application.properties será gerado automaticamente pelo script "compile". Esta é uma etapa crítica. Sem o arquivo application.properties gerado, o serviço NÃO estará em execução. Existe um arquivo de propriedades do aplicativo pré-construído.
Passo 1.3 - Executar
1.3.1 Iniciar o serviço
- execute OU ./run (executa em Linux ou Mac OS)
- execute prod (para executar o perfil de produção, o padrão é perfil dev)
- mvn spring-boot:run (todas as plataformas - perfil dev H2 banco de dados na memória)
- mvn spring-boot:run -Dspring-boot.run.profiles=prod (todas as plataformas - perfil prod banco de dados PostgreSQL)
1.3.2 Testar o Serviço
- test OU ./test (executa em Linux ou Mac OS)
- Execute os comandos curl diretamente (do script de teste)
Modelos de bate-papo
- OpenAI (exemplos disponíveis)
- Ollama - execute modelos de IA em sua máquina local (exemplos disponíveis)
- IA aberta do Azure
- Base Amazônica
- Comando de Cohere
- Jurássico-2 do AI21 Labs
- Lhama 2 do Meta
- Titã da Amazon
- Google Vertex AI Palm
- Google Gêmeos
- HuggingFace - acesse milhares de modelos, incluindo aqueles do Meta como Llama2
- Mistral AI
Modelos de texto para imagem
- OpenAI com DALL-E (exemplos disponíveis)
- EstabilidadeAI
Modelos de transcrição (áudio para texto)
Incorporando Modelos
- OpenAI
- Ollama
- Azure OpenAI
- ONNX
- PostgresML
- Base rochosa Cohere
- Titã Rochoso
- Google VertexAI
- IA mistal
A API Vector Store oferece portabilidade entre diferentes provedores, apresentando uma nova API de filtragem de metadados semelhante a SQL que mantém a portabilidade.
Bancos de dados vetoriais
- Pesquisa de vetores do Azure
- Croma
- Milvus
- Neo4j
- PostgreSQL/PGVetor
- pinha
- Redis
- Tecer
- Qdrant
Os modelos suportados são
- OpenAI
- Azure OpenAI
- VertexAI
- IA Mistral
Confira os exemplos de operações CRUD
- Configurando o Postman com endpoints REST para teste
- Exemplos de CRUD
- Exemplos de tokens JWT
Verifique o CRUD_Examples.md
(C) Copyright 2024: Licença Apache 2: Autor: Araf Karsh Hamid
* Licenciado sob a Licença Apache, Versão 2.0 (a "Licença");
* você não pode usar este arquivo exceto em conformidade com a Licença.
* Você pode obter uma cópia da Licença em
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* A menos que exigido pela lei aplicável ou acordado por escrito, o software
* distribuído sob a Licença é distribuído "COMO ESTÁ",
* SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas.
* Consulte a licença para o idioma específico que rege as permissões e
* limitações sob a Licença.