{"id":15131477,"url":"https://github.com/ibjunior/spring-ai-functions-calling","last_synced_at":"2026-01-19T04:32:53.390Z","repository":{"id":257028673,"uuid":"849888003","full_name":"IBJunior/spring-ai-functions-calling","owner":"IBJunior","description":"Ce repository contient des exemples montrant l'implémentation des appels de fonctions avec Spring AI et OpenAI","archived":false,"fork":false,"pushed_at":"2024-09-06T17:55:58.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-05T21:11:48.118Z","etag":null,"topics":["openai","spring","spring-ai","spring-ai-openai","spring-boot"],"latest_commit_sha":null,"homepage":"","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-30T13:01:40.000Z","updated_at":"2024-09-13T21:13:53.000Z","dependencies_parsed_at":"2024-09-14T12:30:25.385Z","dependency_job_id":"f777911f-267e-4263-9b50-3da9c46377ec","html_url":"https://github.com/IBJunior/spring-ai-functions-calling","commit_stats":null,"previous_names":["ibjunior/spring-ai-functions-calling"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fspring-ai-functions-calling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fspring-ai-functions-calling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fspring-ai-functions-calling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IBJunior%2Fspring-ai-functions-calling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IBJunior","download_url":"https://codeload.github.com/IBJunior/spring-ai-functions-calling/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247399886,"owners_count":20932880,"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":["openai","spring","spring-ai","spring-ai-openai","spring-boot"],"created_at":"2024-09-26T03:42:13.432Z","updated_at":"2026-01-19T04:32:53.364Z","avatar_url":"https://github.com/IBJunior.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring AI partie 3 : Implémentation des appels de fonctions avec OpenAI\n\nCe repository contient des exemples montrant l'implémentation des appels de fonctions et l'utilisation d'un modèle\npersonnalisé avec le fine-tuning 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: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## Fine-tuning\n\nPour ce project, j'utilise un modèle personnalisé via fine-tuning du modèle gpt-4o-mini d'openAI.\n\n**Attention :** Vous n'aurez certainement pas accès au modèle \"fine-tuné\", vu qu'il est privé. Vous devrez alors\nutiliser un autre modèle de votre choix. Les exemples d'appels de fonctions resteront les mêmes. Il suffit de remplacer\nle modèle par le modèle de votre choix dans `application.properties`\n\n````\n#gpt-4o par exemple\nspring.ai.openai.chat.options.model=${FINE_TUNED_MODEL:ft:gpt-4o-mini-2024-07-18:personal:fly-intelligent:A1AK83lh}\n````\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\nsur des endpoints. J'utilise une base de données en mémoire (H2), et Spring Data pour enregistrer et récupérer les\ndonnées des clients.\n\n### Initialisation de la base de données\n\nPour ce projet, je réutilise l'exemple d'étude de cas mentionnée\ndans [cet article](https://www.linkedin.com/pulse/architecture-et-impl%C3%A9mentation-de-la-g%C3%A9n%C3%A9ration-par-rag-ali-ibrahim-xgu1e).\nPour cela, j'ai créé les différentes\nentités, et l'initialisation des données est faite au niveau `SpringAiFunctionsCallingApplication`\n\n### FunctionController\n\nContient les exemples de chat en intégrant les appels des fonctions.\n\n* Utilisation d'une fonction\n\n````\n        Prompt prompt = new Prompt(List.of(userMessage, systemMessage), OpenAiChatOptions.builder()\n                .withFunction(\"getFlightsByUser\")\n                .build());\n````\n\n* Utilisation de plusieurs fonctions\n\n````\n        Prompt prompt = new Prompt(List.of(message, systemMessage), OpenAiChatOptions.builder()\n                .withFunctions(Set.of(\"getDestinationBySeasons\",\n                        \"getBudgetByDestinationAndNumberOfDays\"))\n                .build());\n````\n\n#### FlightsService\n\nLe service qui définit la fonction `getFlightsByUser` qui permet de récupérer les vols d'un utilisateur.\n\n#### BestDestinationService\n\nLe service qui définit la fonction `getDestinationBySeasons` qui permet de déterminer les meilleures destinations en\nfonction des saisons.\n\n#### BudgetByDestinationService\n\nLe service qui définit la fonction `getBudgetByDestinationAndNumberOfDays` qui calcule le budget en fonction du nombre\nde jours et la destination.\n\n## Ressources\n\n- [Spring AI partie 1](https://www.linkedin.com/pulse/spring-boot-et-ia-g%C3%A9n%C3%A9rative-un-duo-innovant-avec-ai-ali-ibrahim-mso7e/)\n- [Spring AI partie 2](https://www.linkedin.com/pulse/architecture-et-impl%C3%A9mentation-de-la-g%C3%A9n%C3%A9ration-par-rag-ali-ibrahim-xgu1e/)\n- [Spring AI](https://docs.spring.io/spring-ai/reference/)\n- [OpenAI](https://platform.openai.com/docs/overview)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibjunior%2Fspring-ai-functions-calling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fibjunior%2Fspring-ai-functions-calling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibjunior%2Fspring-ai-functions-calling/lists"}