{"id":22191228,"url":"https://github.com/ibjunior/advanced-spring-ai-concepts","last_synced_at":"2025-03-24T20:42:24.242Z","repository":{"id":253529943,"uuid":"843783109","full_name":"IBJunior/advanced-spring-ai-concepts","owner":"IBJunior","description":"Ce repository contient des exemples d'implémentation de RAG avec Spring AI.","archived":false,"fork":false,"pushed_at":"2024-08-20T11:10:28.000Z","size":83,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T01:15:30.718Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IBJunior.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-08-17T12:05:37.000Z","updated_at":"2024-08-20T11:10:31.000Z","dependencies_parsed_at":"2024-08-19T22:27:48.454Z","dependency_job_id":null,"html_url":"https://github.com/IBJunior/advanced-spring-ai-concepts","commit_stats":null,"previous_names":["ibjunior/advanced-spring-ai-concepts"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fadvanced-spring-ai-concepts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fadvanced-spring-ai-concepts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fadvanced-spring-ai-concepts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fadvanced-spring-ai-concepts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IBJunior","download_url":"https://codeload.github.com/IBJunior/advanced-spring-ai-concepts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245351758,"owners_count":20601087,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-12-02T12:14:58.081Z","updated_at":"2025-03-24T20:42:24.224Z","avatar_url":"https://github.com/IBJunior.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Implémentation de Retrieval Augmented Generation avec Spring AI\n\nCe repository contient des exemples montrant l'implémentation de RAG dans Spring AI en\nutilisant [OpenAI](https://platform.openai.com/).\n\n## Prérequis\n\nAvant de démarrer le projet, il est impératif d'avoir une clé API d'OpenAI. Pour obtenir cette clé, vous pouvez\nconsulter la [documentation des clés API d'OpenAI](https://platform.openai.com/api-keys). Une fois obtenue, vous pouvez\nsoit l'exporter dans une variable d'environnement, soit la renseigner dans le fichier **application.properties**.\n\n````\n#Exporter la clé dans la variable d'environnement OPENAI_API_KEY\nspring.ai.openai.api-key=${OPENAI_API_KEY:'ou renseignez la ici'}\n````\n\n**Note :** Ce projet utilise la version 1.0.0-SNAPSHOT de Spring AI, ce qui pourrait entraîner des divergences au\nniveau des exemples si vous utilisez\nune version ultérieure. En cas de divergences, vous avez deux options :\n\n- Si vous générez le projet avec [Spring Initializer](https://start.spring.io/), vous pouvez vous assurer de travailler\n  avec la même version que moi en consultant le fichier `pom.xml` du projet.\n- Si cette version snapshot n'est plus disponible, vous pouvez simplement consulter la documentation de Spring AI de la\n  version que vous utilisez, pour voir les divergences.\n\n## Structure du projet\n\n### Dépendances\n\nPour simplifier le test des différents concepts, j'ai utilisé spring-boot-starter-web, où les exemples sont répartis\ndans des contrôleurs. De même, afin de faciliter la mise en\nplace des services (postgres sql dans le cas de ce projet) utilisés par le projet, j'ai ajouté la\ndépendance [Docker Compose](https://spring.io/blog/2023/06/21/docker-compose-support-in-spring-boot-3-1)\nde Spring Devtools et aussi la dépendance de postgresql (voir le `pom.xml`). Pour cela, il vous faut\navoir [Docker](https://docs.docker.com/engine/install/)\ninstallé sur votre machine.\n\n### VectorStoreInitializationRunner\n\nCette classe implémente [le pipeline ETL](https://docs.spring.io/spring-ai/reference/api/etl-pipeline.html) de Spring\npour pouvoir enregistrer les informations extraites des documents dans la base de données\nvectorielle ([PGVector](https://github.com/pgvector/pgvector)). Elle\nétend `ApplicationRunner` pour s'exécuter au\nlancement de l'application et charger les informations.\n\n### ChatController\n\nContient les exemples de chat en intégrant la récupération avec `QuestionAnswerAdvisor` des documents similaires dans la\nbase de données Vectorielle lors de la génération.\n\n```` \nthis.chatClient.prompt()\n                .user(quest)\n                .advisors(new QuestionAnswerAdvisor(this.vectorStore, SearchRequest.defaults()))\n                .call().content();\n````\n\n### MemoryController\n\nContient l'exemple d'utilisation de `ChatMemory` avec `MessageChatMemoryAdvisor` pour sauvegarder l'historique de\nconversation entre un utilisateur et un LLM.\n\n````\nthis.chatClient.prompt()\n                .user(message)\n                .advisors(new MessageChatMemoryAdvisor(chatMemory))\n                .advisors(a -\u003e {\n                    a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, userId)\n                            .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100);\n                })\n                .call().content();\n````\n\n### Pour aller plus loin\n\nPour aller plus loin je vous recommande la documentation de Spring AI qui est très détaillée et complète. Pour mieux\ncomprendre l'architecture RAG, je vous recommande\n[cet article d'IBM.](https://research.ibm.com/blog/retrieval-augmented-generation-RAG)\n\n- [Spring AI](https://docs.spring.io/spring-ai/reference/)\n- [OpenAI](https://platform.openai.com/docs/overview)\n- [Base de données vectorielle](https://www.ibm.com/topics/vector-database)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibjunior%2Fadvanced-spring-ai-concepts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fibjunior%2Fadvanced-spring-ai-concepts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibjunior%2Fadvanced-spring-ai-concepts/lists"}