AI prompts
base on O 'Disaster Response Coordinator' é um sistema interativo baseado em inteligência artificial para coordenação e suporte em situações de desastre. Utiliza a API do Gemini para facilitar a comunicação entre vítimas e serviços de emergência, integrando-se ao Sistema Integrado de Informações sobre Desastres v3. # Disaster Response Coordinator
O 'Disaster Response Coordinator' é um sistema interativo baseado em inteligência artificial para coordenação e suporte em situações de desastre. Utiliza a API do Gemini para facilitar a comunicação entre vítimas e serviços de emergência, integrando-se ao Sistema Integrado de Informações sobre Desastres v3. Um diferencial significativo deste sistema é que o diálogo acontece por meio do WhatsApp, uma plataforma amplamente utilizada, tornando o pedido por ajuda muito mais acessível. Essa integração garante que mais pessoas possam alcançar assistência de forma rápida e eficiente em momentos críticos.
## Imersão em Inteligência Artificial - 2ª Edição (Alura)
### Tecnologias Utilizadas
<div align="center">
<img src="https://logospng.org/download/google-gemini/google-gemini-256.png" alt="logo gemini" width="150" style="margin-right: 20px;">
<img src="https://i.imgur.com/ou7zb3O.png" alt="logo aspire" width="150" style="margin-right: 20px;">
<img src="https://cdn.worldvectorlogo.com/logos/redis.svg" alt="logo redis" width="150" style="margin-right: 20px;">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Microsoft_.NET_logo.svg/64px-Microsoft_.NET_logo.svg.png" alt="logo .NET" width="100" style="margin-right: 20px;">
</div>
**Frameworks e APIs:**
- .NET 8, .NET Aspire, Blazor
- Redis, Google Places, Google Geo, ViaCep
- WhatsApp Cloud API, Gemini, Paraquemdoar.com.br
### Configuração e Execução
**Pré-requisitos:**
- Instale o .NET 8 e Docker. Verifique com `dotnet --version`.
- Configure o Aspire no seu ambiente .NET.
**Iniciar o Projeto:**
- Atualize `appsettings.json` no diretório API com as chaves necessárias.
- Execute `AppHost` para iniciar Redis, backend e frontend.
### Características e Funcionalidades
**Interações e Interfaces:**
- **Chat de Testes:** Interface de usuário otimizada para interação via browser para execução de testes sem configuração do Whatsapp.
- **Contexto Persistente:** Redis com `IChatCacheService` para manter o estado das conversas.
**Integrações Externas:**
- **Informações sobre Desastres:** Integração com S2iD v3 para dados em tempo real.
- **Localização:** Uso de Google Places e Google Geo para identificar hospitais e locais seguros.
- **Logística:** Consulta de endereços pelo CEP com ViaCep.
# Serviço de Chat
O `ChatService` é o coração da interação do usuário no "Disaster Response Coordinator". Este serviço gerencia a comunicação entre os usuários e o sistema, utilizando várias APIs e serviços para fornecer respostas precisas e oportunas durante emergências.
## Funcionalidades do Serviço
O `ChatService` implementa a interface `IChatService` e realiza múltiplas funções críticas:
### Inicialização e Gestão de Conversas
- **StartChat:** Inicia uma nova conversa ou retoma uma existente usando um identificador único (GUID). Configura o diálogo inicial com o usuário e prepara o sistema para responder a consultas baseadas em localização e emergência.
### Consultas Específicas
- **GetCurrentAddress:** Localiza um endereço via CEP utilizando o serviço `ViaCep`.
- **GetAvailableShelters:** Encontra hospitais e abrigos próximos baseando-se nas coordenadas obtidas pelo serviço `IGeocodingService`.
- **GetDonationPlaces:** Procura locais seguros para fazer doações com base em palavras-chave através do serviço `IBenfeitoriaService`.
### Processamento de Emergências
- **GetDesasters:** Analisa o risco de desastres em uma localidade específica combinando informações do usuário com dados de desastres obtidos pelo serviço `IS2iDService`.
## Armazenamento e Caching
- Utiliza `IDistributedCache` para armazenar informações que são frequentemente acessadas, como códigos de desastres (`Cobrades`), reduzindo a carga sobre as APIs externas e acelerando a resposta do sistema.
## Integrações Externas
- **GeminiClient:** Utilizado para construir e gerenciar conversas AI-driven.
- **Google Places e Google Geo:** Para a identificação precisa de locais específicos como hospitais e outros pontos de interesse.
## Exemplo de Uso
O método `SendMessage` demonstra a interação com o usuário:
- Recebe uma mensagem de um usuário e um GUID opcional.
- Inicia ou continua a conversa.
- Processa a mensagem através do `GeminiClient` usando opções de conclusão definidas.
- Salva a conversa atualizada no cache para garantir persistência e contexto.
### Estratégias de Caching
- **Cobrades:** Dados sobre categorias de desastres são cacheados e atualizados periodicamente para garantir a eficiência e a relevância das informações fornecidas aos usuários em situações de emergência.
## Contribua
1. Clone o repositório.
2. Crie uma branch para sua feature.
3. Faça alterações.
4. Envie um pull request.
Agradecemos seu apoio ao "Disaster Response Coordinator". Juntos, fazemos a diferença!
### Autor e Links
<div>
<a href="https://www.linkedin.com/in/victor-verdoodt/"><img src="https://img.shields.io/badge/linkedin-0077B5.svg?style=for-the-badge&logo=linkedin&logoColor=white"></a>
<a href="https://github.com/victorverdoodt/"><img src="https://img.shields.io/badge/github-3b4c52.svg?style=for-the-badge&logo=github&logoColor=white"></a>
<a href="https://discord.com/channels/1228404913705451612/1228406162618060913/1238128762307219558"><img src="https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge&logo=discord&logoColor=white"></a>
</div>
### Galeria

", Assign "at most 3 tags" to the expected json: {"id":"10134","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"