{"id":420770,"date":"2025-09-27T06:31:11","date_gmt":"2025-09-27T06:31:11","guid":{"rendered":"https:\/\/www.europesays.com\/fr\/420770\/"},"modified":"2025-09-27T06:31:11","modified_gmt":"2025-09-27T06:31:11","slug":"lapi-qui-manquait-a-ollama-pour-concurrencer-chatgpt-est-enfin-la-intelligence-artificielle","status":"publish","type":"post","link":"https:\/\/www.europesays.com\/fr\/420770\/","title":{"rendered":"L&rsquo;API qui manquait \u00e0 Ollama pour concurrencer ChatGPT est enfin l\u00e0 !! | Intelligence artificielle"},"content":{"rendered":"<p>Ce qui est super relou avec les IA qu\u2019on peut utiliser en local, genre avec Ollama, c\u2019est que si on lui demande des infos un peu trop r\u00e9cente, \u00e7a nous sort des vieux chiffres de 2023 avec la confiance d\u2019un vendeur de voitures d\u2019occasion. Bon bah \u00e7a, c\u2019est fini puisqu\u2019<br \/>\n<a href=\"https:\/\/ollama.com\/blog\/web-search\" rel=\"nofollow noopener\" target=\"_blank\">Ollama vient de sortir une API de recherche web<\/a><br \/>\nqui permet enfin \u00e0 vos mod\u00e8les locaux d\u2019acc\u00e9der \u00e0 des infos fra\u00eeches dispo sur le net.<\/p>\n<p>Woohoo \\o\/ !<\/p>\n<p>Baptis\u00e9e <strong>Ollama Web Search<\/strong>, cette API REST permet donc \u00e0 vos mod\u00e8les de faire des recherches sur le web en temps r\u00e9el comme \u00e7a plus besoin de se contenter des donn\u00e9es d\u2019entra\u00eenement fig\u00e9es dans le temps.<br \/>\n<a href=\"https:\/\/docs.ollama.com\/web-search\" rel=\"nofollow noopener\" target=\"_blank\">Selon la doc officielle<\/a><br \/>\n, l\u2019API fournit \u201cles derni\u00e8res informations du web pour r\u00e9duire les hallucinations et am\u00e9liorer la pr\u00e9cision\u201d. En gros, votre IA locale devient aussi \u00e0 jour que ChatGPT, mais sans envoyer vos donn\u00e9es perso \u00e0 OpenAI.<\/p>\n<p>Les mod\u00e8les compatibles avec cette nouvelle fonctionnalit\u00e9 incluent qwen3, LLama, gpt-oss (la version open source d\u2019OpenAI), deepseek-v3.1, et plein d\u2019autres.<br \/>\n<a href=\"https:\/\/github.com\/ollama\/ollama\" rel=\"nofollow noopener\" target=\"_blank\">Et d\u2019apr\u00e8s les premiers tests de la communaut\u00e9<\/a><br \/>\n, qwen3 et gpt-oss sont m\u00eame plut\u00f4t dou\u00e9s pour exploiter cette fonctionnalit\u00e9. Le mod\u00e8le comprend qu\u2019il lui manque une info, fait sa recherche, analyse les r\u00e9sultats et nous sort une r\u00e9ponse document\u00e9e !<\/p>\n<p>C\u2019est trop incrrrr ! Vous allez pouvoir booster vos scripts \/ bots \/ outils d\u2019IA locale pour qu\u2019ils puissent surveiller des choses dispo en ligne, les comparer, g\u00e9n\u00e9rer des r\u00e9sum\u00e9s \u00e0 partir de sites web, fact checker ou compl\u00e9ter des infos&amp;mldr;etc.<\/p>\n<p>Mais alors comment s\u2019en servir ? Bon, on est vendredi soir et j\u2019ai la flemme de tourner un tuto vid\u00e9o, donc m\u00eame si je risque de d\u00e9tailler tout \u00e7a bient\u00f4t \u00e0<br \/>\n<a href=\"https:\/\/patreon.com\/korben\" rel=\"nofollow noopener\" target=\"_blank\">mes Patreons d\u2019amour<\/a><br \/>\n, voici quand m\u00eame quelques explications.<\/p>\n<p>D\u2019abord, il faut cr\u00e9er une<br \/>\n<a href=\"https:\/\/ollama.com\/signin\" rel=\"nofollow noopener\" target=\"_blank\">cl\u00e9 API Ollama<\/a><br \/>\n. La doc explique que vous avez un essai gratuit g\u00e9n\u00e9reux pour commencer, mais s\u2019il vous en faut plus, il faudra prendre un petit abonnement<br \/>\n<a href=\"https:\/\/ollama.com\/cloud\" rel=\"nofollow noopener\" target=\"_blank\">Ollama Cloud<\/a><br \/>\n&amp;mldr;<\/p>\n<p>Une fois votre cl\u00e9 en poche, exportez-la dans votre environnement comme ceci :<\/p>\n<p>export OLLAMA_API_KEY=\u00a0\u00bbvotre_cl\u00e9_ici\u00a0\u00bb<\/p>\n<p>Le plus simple ensuite pour tester, c\u2019est avec curl :<\/p>\n<p>curl https:\/\/ollama.com\/api\/web_search \\ &#8211;header \u00ab\u00a0Authorization: Bearer $OLLAMA_API_KEY\u00a0\u00bb \\ -d &lsquo;{ \u00ab\u00a0query\u00a0\u00bb: \u00ab\u00a0derni\u00e8res vuln\u00e9rabilit\u00e9s CVE janvier 2025\u00a0\u00bb }&rsquo;<\/p>\n<p>Mais bon, soyons honn\u00eates, on va plut\u00f4t utiliser Python car c\u2019est quand m\u00eame plus cool \ud83d\ude09 . Voici donc un exemple de script basique qui compare une r\u00e9ponse avec et sans recherche web :<\/p>\n<p>import ollama<br \/>\nfrom ollama import chat, web_search, web_fetch<\/p>\n<p>model = \u00ab\u00a0qwen3:4b\u00a0\u00bb<\/p>\n<p># 1. Sans recherche web<br \/>\nresponse_classic = chat( # pas ollama.chat<br \/>\n model=model,<br \/>\n messages=[{<br \/>\n \u00ab\u00a0role\u00a0\u00bb: \u00ab\u00a0user\u00a0\u00bb,<br \/>\n \u00ab\u00a0content\u00a0\u00bb: \u00ab\u00a0Quelles sont les features de React 19?\u00a0\u00bb<br \/>\n }]<br \/>\n)<br \/>\nprint(\u00ab\u00a0Sans recherche web:\u00a0\u00bb, response_classic.message.content[:500]) # .message.content<\/p>\n<p># 2. Avec recherche web<br \/>\nsearch_results = web_search(\u00ab\u00a0React 19 features derni\u00e8res nouveaut\u00e9s\u00a0\u00bb)<br \/>\nprint(\u00ab\u00a0R\u00e9sultats:\u00a0\u00bb, search_results)<\/p>\n<p># 3. Avec outils<br \/>\navailable_tools = {&lsquo;web_search&rsquo;: web_search, &lsquo;web_fetch&rsquo;: web_fetch}<br \/>\nmessages = [{<br \/>\n \u00ab\u00a0role\u00a0\u00bb: \u00ab\u00a0user\u00a0\u00bb,<br \/>\n \u00ab\u00a0content\u00a0\u00bb: \u00ab\u00a0Utilise la recherche web pour me dire les derni\u00e8res features de React 19&Prime;<br \/>\n}]<\/p>\n<p>response_with_tools = chat(<br \/>\n model=model,<br \/>\n messages=messages,<br \/>\n tools=[web_search, web_fetch],<br \/>\n think=True<br \/>\n)<\/p>\n<p># Acc\u00e8s aux tool_calls<br \/>\nif response_with_tools.message.tool_calls:<br \/>\n for tool_call in response_with_tools.message.tool_calls:<br \/>\n function_to_call = available_tools.get(tool_call.function.name)<br \/>\n if function_to_call:<br \/>\n args = tool_call.function.arguments<br \/>\n result = function_to_call(**args)<br \/>\n print(f\u00a0\u00bbOutil utilis\u00e9: {tool_call.function.name}\u00a0\u00bb)<br \/>\n print(f\u00a0\u00bbR\u00e9sultat: {str(result)[:500]}&#8230;\u00a0\u00bb)<\/p>\n<p>print(\u00ab\u00a0R\u00e9ponse finale:\u00a0\u00bb, response_with_tools.message.content)<\/p>\n<p>Les performances varient ensuite selon les mod\u00e8les. Qwen3:4b est parfait pour du temps r\u00e9el avec environ 85 tokens\/seconde. GPT-OSS:120b est plus lent mais donne des r\u00e9sultats de qualit\u00e9 id\u00e9aux pour de la production. Pour du dev local, je vous recommande qwen3:8b, c\u2019est le bon compromis entre vitesse et intelligence.<\/p>\n<p>Le truc cool, c\u2019est que vous pouvez maintenant cr\u00e9er des agents sp\u00e9cialis\u00e9s. Genre un agent DevOps qui surveille les CVE de vos d\u00e9pendances, un agent Marketing qui analyse les tendances de votre secteur, ou un agent Support qui maintient une base de connaissances \u00e0 jour.<\/p>\n<p>Voici un exemple :<\/p>\n<p>import ollama<br \/>\nfrom ollama import chat, web_search<\/p>\n<p>class SecurityAgent:<br \/>\n def __init__(self):<br \/>\n self.model = \u00ab\u00a0qwen3:4b\u00a0\u00bb<\/p>\n<p> def check_vulnerabilities(self, technologies):<br \/>\n rapport = \u00ab\u00a0\ud83d\udee1\ufe0f RAPPORT S\u00c9CURIT\u00c9\\n\\n\u00a0\u00bb<\/p>\n<p> for tech in technologies:<br \/>\n # Recherche directe des CVE r\u00e9centes<br \/>\n results = web_search(f\u00a0\u00bb{tech} CVE vulnerabilities 2025 critical\u00a0\u00bb)<\/p>\n<p> # Demande au mod\u00e8le d&rsquo;analyser<br \/>\n response = chat(<br \/>\n model=self.model,<br \/>\n messages=[{<br \/>\n \u00ab\u00a0role\u00a0\u00bb: \u00ab\u00a0user\u00a0\u00bb,<br \/>\n \u00ab\u00a0content\u00a0\u00bb: f\u00a0\u00bbR\u00e9sume les vuln\u00e9rabilit\u00e9s critiques de {tech}: {results}\u00a0\u00bb<br \/>\n }]<br \/>\n )<\/p>\n<p> rapport += f\u00a0\u00bb### {tech}\\n{response.message.content}\\n\\n\u00a0\u00bb<\/p>\n<p> return rapport<\/p>\n<p># Utilisation<br \/>\nagent = SecurityAgent()<br \/>\nrapport = agent.check_vulnerabilities([\u00ab\u00a0Node.js\u00a0\u00bb, \u00ab\u00a0PostgreSQL\u00a0\u00bb, \u00ab\u00a0Docker\u00a0\u00bb])<br \/>\nprint(rapport)<\/p>\n<p>Maintenant, pour optimiser un peu tout \u00e7a et ne pas flamber votre quota API, voici quelques astuces assez classiques&amp;mldr; D\u2019abord, mettez en cache les r\u00e9sultats. Ensuite, soyez sp\u00e9cifique dans vos requ\u00eates. Par exemple \u201cReact hooks\u201d va chercher plein de trucs inutiles, alors que \u201cReact 19 nouveaux hooks useActionState\u201d sera plus efficace.<\/p>\n<p>On peut vraiment r\u00e9duire la quantit\u00e9 de requ\u00eates en \u00e9tant malin sur le prompt engineering. Par exemple, au lieu de laisser le mod\u00e8le chercher tout seul, guidez-le : \u201cV\u00e9rifie uniquement sur la doc officielle de React\u201d plut\u00f4t que \u201cCherche des infos sur React\u201d.<\/p>\n<p>Et comme Ollama supporte MCP Server, Cline, Codex et Goose, c\u2019est royal car vous pouvez aussi brancher votre assistant IA directement dans votre IDE, Slack, ou Discord. H\u00e9 oui, vous allez enfin pouvoir coder un bot Discord qui va fact-checker automatiquement les affirmations douteuses et foireuses de vos coll\u00e8gues. Le r\u00eave !<\/p>\n<p>Pour aller plus loin, vous pouvez aussi combiner la recherche web avec le fetching de pages sp\u00e9cifiques. L\u2019API web_fetch permet ainsi de r\u00e9cup\u00e9rer le contenu d\u2019une URL pr\u00e9cise. Pratique pour analyser en profondeur une doc ou un article :<\/p>\n<p>from ollama import web_search, web_fetch, chat<\/p>\n<p># 1. Recherche d&rsquo;articles pertinents<br \/>\nsearch_results = web_search(\u00ab\u00a0React 19 vs Vue 3 comparison 2025&Prime;)<br \/>\ntop_url = search_results.results[0][&lsquo;url&rsquo;] # ou .url selon le type<br \/>\nprint(f\u00a0\u00bb\ud83d\udcf0 Article trouv\u00e9: {search_results.results[0][&lsquo;title&rsquo;]}\u00a0\u00bb)<\/p>\n<p># 2. R\u00e9cup\u00e9ration du contenu complet de la page<br \/>\npage_content = web_fetch(top_url)<br \/>\nprint(f\u00a0\u00bb\ud83d\udcc4 {len(page_content.content)} caract\u00e8res r\u00e9cup\u00e9r\u00e9s\u00a0\u00bb)<\/p>\n<p># 3. Analyse approfondie du contenu<br \/>\nresponse = chat(<br \/>\n model=\u00a0\u00bbqwen3:4b\u00a0\u00bb, # ou \u00ab\u00a0gpt-oss\u00a0\u00bb si disponible<br \/>\n messages=[{<br \/>\n \u00ab\u00a0role\u00a0\u00bb: \u00ab\u00a0user\u00a0\u00bb,<br \/>\n \u00ab\u00a0content\u00a0\u00bb: f\u00a0\u00bb\u00a0\u00bb\u00a0\u00bb<br \/>\n Analyse cette comparaison technique:<br \/>\n {page_content.content[:4000]}<\/p>\n<p> Donne-moi:<br \/>\n 1. Les points cl\u00e9s de chaque framework<br \/>\n 2. Le gagnant selon l&rsquo;article<br \/>\n 3. Les cas d&rsquo;usage recommand\u00e9s<br \/>\n \u00ab\u00a0\u00a0\u00bb\u00a0\u00bb<br \/>\n }]<br \/>\n)<\/p>\n<p>print(f\u00a0\u00bb\\n\ud83d\udd0d Analyse:\\n{response.message.content}\u00a0\u00bb)<\/p>\n<p>Alors bien s\u00fbr, des fois la recherche retournera des trucs pas pertinents, surtout si votre requ\u00eate est vague et de son c\u00f4t\u00e9, le mod\u00e8le peut aussi mal interpr\u00e9ter les r\u00e9sultats s\u2019il est trop petit. Mais bon, compar\u00e9 \u00e0 une IA qui vous sort que Windows 11 n\u2019existe pas encore, on a fait quand m\u00eame pas mal de chemin, vous ne trouvez pas ??<\/p>\n<p>J\u2019esp\u00e8re qu\u2019\u00e0 terme, Ollama ajoutera aussi le support de sources personnalis\u00e9es car ce serait vraiment cool de pouvoir indexer par exemple sa propre doc ou ses propres emails pour y faire des recherches&amp;mldr; Mais bon, en attendant cette nouvelle API permet enfin de contrebalancer ce probl\u00e8me des mod\u00e8les pas \u00e0 jour en terme de connaissances, et \u00e7a c\u2019est d\u00e9j\u00e0 \u00e9norme !<\/p>\n<p>A vous de jouer maintenant !<\/p>\n<p><a href=\"https:\/\/ollama.com\/blog\/web-search\" rel=\"nofollow noopener\" target=\"_blank\">Source<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"Ce qui est super relou avec les IA qu\u2019on peut utiliser en local, genre avec Ollama, c\u2019est que&hellip;\n","protected":false},"author":2,"featured_media":420771,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[1011,27,43,40,41,39,42,44],"class_list":{"0":"post-420770","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-sciences-et-technologies","8":"tag-fr","9":"tag-france","10":"tag-science","11":"tag-science-and-technology","12":"tag-sciences","13":"tag-sciences-et-technologies","14":"tag-technologies","15":"tag-technology"},"share_on_mastodon":{"url":"https:\/\/pubeurope.com\/@fr\/115274860645172105","error":""},"_links":{"self":[{"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/posts\/420770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/comments?post=420770"}],"version-history":[{"count":0,"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/posts\/420770\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/media\/420771"}],"wp:attachment":[{"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/media?parent=420770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/categories?post=420770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.europesays.com\/fr\/wp-json\/wp\/v2\/tags?post=420770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}