{"id":35137006,"url":"https://github.com/alves-dev/ai-extraction","last_synced_at":"2026-04-12T01:42:43.187Z","repository":{"id":229707579,"uuid":"777436930","full_name":"alves-dev/ai-extraction","owner":"alves-dev","description":"Projeto que visa usar IA's para extrair informações de áudio e mensagens de texto","archived":false,"fork":false,"pushed_at":"2025-06-28T21:32:23.000Z","size":122,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-12T01:42:37.941Z","etag":null,"topics":["ai","amqp","docker","gradle","java","mongodb","rabbitmq","spring","thymeleaf"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alves-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-25T21:08:12.000Z","updated_at":"2025-06-28T21:32:26.000Z","dependencies_parsed_at":"2024-04-06T17:27:47.584Z","dependency_job_id":"04ecd8c3-d60f-4fdc-bcd9-24e128ab86a0","html_url":"https://github.com/alves-dev/ai-extraction","commit_stats":null,"previous_names":["alves-dev/ai-extraction"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alves-dev/ai-extraction","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alves-dev%2Fai-extraction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alves-dev%2Fai-extraction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alves-dev%2Fai-extraction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alves-dev%2Fai-extraction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alves-dev","download_url":"https://codeload.github.com/alves-dev/ai-extraction/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alves-dev%2Fai-extraction/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31701641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T21:17:31.016Z","status":"ssl_error","status_checked_at":"2026-04-11T21:17:24.556Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","amqp","docker","gradle","java","mongodb","rabbitmq","spring","thymeleaf"],"created_at":"2025-12-28T09:37:14.881Z","updated_at":"2026-04-12T01:42:43.178Z","avatar_url":"https://github.com/alves-dev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\ntemplate_name=head-code\ntemplate_version=v1\n--\u003e\n\n\u003ch1 align=\"center\"\u003eAI Extraction\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Projeto que visa usar IA's para extrair informações de áudio e mensagens de texto\u003cbr\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/status-maintenance-blue.svg\" alt=\"status\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/topics:-grey\"\u003e \n\u003cimg src=\"https://img.shields.io/badge/ai-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/java-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/spring-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/mongodb-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/amqp-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/docker-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/rabbitmq-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/gradle-lightgrey\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/thymeleaf-lightgrey\"\u003e\n\u003c/p\u003e\n\n\u003chr\u003e\n\n\nO objetivo do projeto é entender os possíveis potências dos LLM.\n\n### Caso de uso\nDado um áudio, o transformar em texto, e depois extrair dele um `json`\ncontendo as informações; logicamente com o json em mãos sua criatividade é o limite.\n\n### Como foi feito\nPara auxiliar no processo de desenvolvimento decidi usar o projeto [Spring AI](https://spring.io/projects/spring-ai)\nque disponibiliza uma série de classes prontas para lidar com vários modelos, dentre eles os modelos da [OpenAI](https://openai.com/).\n\nPara a transcrição do áudio estou usando o modelo `whisper-1`, e para a análise do texto uso o `gpt-3.5-turbo-0125`.\n\n### Detalhes de implementação\nNao tem segredo para realizar a transcrição, basta enviar o áudio para a API utilizando a classe `OpenAiAudioTranscriptionClient`\ne voce ira obter o texto de retorno.\n\nJá para a extração do `json` voce deve usar a `OpenAiChatClient`; e funciona assim:\n\nPrimeiramente crie o seu prompt, como algo assim:\n```java\nprivate static final String POMPT_STRING = \"\"\"\n            Quero que você extraia do texto: {text}\n            as seguintes intenções: {intents}\n            apenas caso encontre elas no texto.\n                        \n            {format}\n            \"\"\";\n```\nInjete o texto extraído e suas `intents`.\n\nCom a ajuda do spring você cria um `BeanOutputParser`, esta é a classe que representa\nqual o tipo de retorno você desejá, então no lugar de `{format}`\no spring injeta uma descrição informando que o retorno dado pelo LLM deve ser apenas um `json` valido\ne nada mais do que isso, depois é só converter a string em json para o seu objeto.\n\n### Possíveis evoluções\nComo evolução do projeto você poderia rodar algum modelo disponível na sua própria infra (eu até tentei, mas minha maquina pediu para sair).\n\nO projeto foi construído de uma forma que os modelos utilizados possam ser substituídos facilmente,\nque tal tentar outros modelos no mercado?\n\nE que tal treinar o seu próprio modelo?\nO projeto salva todas as interações no banco de dados [MongoDB](https://www.mongodb.com/pt-br),\nassim voce tem os dados que podem ser utilizados para tal.\n\u003c!--\ntemplate_name=footer-default\ntemplate_version=v1\n--\u003e\n\n---\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/licença-GPL%203-blue.svg\" alt=\"license\"\u003e\n\u003c/p\u003e\n\n**Atualizado em:** 2025-06-28 18:32","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falves-dev%2Fai-extraction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falves-dev%2Fai-extraction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falves-dev%2Fai-extraction/lists"}