PageSourceSearch

https://java2ai.com/assets/js/ac6ea28c.54639f0d.js

js java2ai.com collected 2026-10-03 21:32:36 UTC 44,605 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkspring_ai_alibaba_website=self.webpackChunkspring_ai_alibaba_website||[]).push([[630],{410:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/multimodal.test-23deeeaefa6b2b3db6c0674f6405f9fe.png"},28453:(e,i,n)=>{n.d(i,{R:()=>t,x:()=>l});var s=n(96540);const r={},a=s.createContext(r);function t(e){const i=s.useContext(a);return s.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(a.Provider,{value:i},e.children)}},66885:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"chatmodels/more/mistralai-chat","title":"Mistral AI Chat","description":"Spring AI \u652f\u6301\u6765\u81ea Mistral AI \u7684\u5404\u79cd AI \u8bed\u8a00\u6a21\u578b\u3002\u60a8\u53ef\u4ee5\u4e0e Mistral AI \u8bed\u8a00\u6a21\u578b\u4ea4\u4e92\uff0c\u5e76\u57fa\u4e8e Mistral \u6a21\u578b\u521b\u5efa\u591a\u8bed\u8a00\u5bf9\u8bdd\u52a9\u624b\u3002","source":"@site/integration/chatmodels/more/mistralai-chat.md","sourceDirName":"chatmodels/more","slug":"/chatmodels/more/mistralai-chat","permalink":"/integration/chatmodels/more/mistralai-chat","draft":false,"unlisted":false,"editUrl":"https://github.com/spring-ai-alibaba/website/tree/main/integration/chatmodels/more/mistralai-chat.md","tags":[],"version":"current","lastUpdatedBy":"Ken Liu","lastUpdatedAt":1768271906000,"frontMatter":{},"sidebar":"integrationSidebar","previous":{"title":"MiniMax Chat","permalink":"/integration/chatmodels/more/minimax-chat"},"next":{"title":"Moonshot AI Chat","permalink":"/integration/chatmodels/more/moonshot-chat"}}');var r=n(74848),a=n(28453);const t={},l="Mistral AI Chat",o={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Add Repositories and BOM",id:"add-repositories-and-bom",level:3},{value:"Auto-configuration",id:"auto-configuration",level:2},{value:"Chat Properties",id:"chat-properties",level:3},{value:"Retry Properties",id:"retry-properties",level:4},{value:"Connection Properties",id:"connection-properties",level:4},{value:"Configuration Properties",id:"configuration-properties",level:4},{value:"Runtime Options [[chat-options]]",id:"runtime-options-chat-options",level:2},{value:"Function Calling",id:"function-calling",level:2},{value:"Multimodal",id:"multimodal",level:2},{value:"Vision",id:"vision",level:3},{value:"OpenAI API Compatibility",id:"openai-api-compatibility",level:2},{value:"Sample Controller (Auto-configuration)",id:"sample-controller-auto-configuration",level:2},{value:"Manual Configuration",id:"manual-configuration",level:2},{value:"Low-level MistralAiApi Client [[low-level-api]]",id:"low-level-mistralaiapi-client-low-level-api",level:3},{value:"MistralAiApi Samples",id:"mistralaiapi-samples",level:4},{value:"Mistral AI OCR",id:"mistral-ai-ocr",level:2},{value:"Prerequisites",id:"prerequisites-1",level:2},{value:"Add Dependencies",id:"add-dependencies",level:3},{value:"Low-level MistralOcrApi Client",id:"low-level-mistralocrapi-client",level:3},{value:"MistralOcrApi Sample",id:"mistralocrapi-sample",level:4}];function d(e){const i={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.header,{children:(0,r.jsx)(i.h1,{id:"mistral-ai-chat",children:"Mistral AI Chat"})}),"\n",(0,r.jsx)(i.p,{children:"Spring AI \u652f\u6301\u6765\u81ea Mistral AI \u7684\u5404\u79cd AI \u8bed\u8a00\u6a21\u578b\u3002\u60a8\u53ef\u4ee5\u4e0e Mistral AI \u8bed\u8a00\u6a21\u578b\u4ea4\u4e92\uff0c\u5e76\u57fa\u4e8e Mistral \u6a21\u578b\u521b\u5efa\u591a\u8bed\u8a00\u5bf9\u8bdd\u52a9\u624b\u3002"}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u63d0\u793a\uff1a"})," Mistral AI \u8fd8\u63d0\u4f9b OpenAI API \u517c\u5bb9\u7684 endpoint\u3002\n\u8bf7\u67e5\u7
170b ",(0,r.jsx)(i.a,{href:"https://docs.spring.io/spring-ai/reference/api/chat/openai-compatible-servers.html",children:"OpenAI API compatibility"})," \u90e8\u5206\uff0c\u4e86\u89e3\u5982\u4f55\u4f7f\u7528 ",(0,r.jsx)(i.a,{href:"../openai-chat",children:"Spring AI OpenAI"})," \u96c6\u6210\u4e0e Mistral endpoint \u901a\u4fe1\u3002"]}),"\n"]}),"\n",(0,r.jsx)(i.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(i.p,{children:"\u60a8\u9700\u8981\u4f7f\u7528 Mistral AI \u521b\u5efa API \u624d\u80fd\u8bbf\u95ee Mistral AI \u8bed\u8a00\u6a21\u578b\u3002"}),"\n",(0,r.jsxs)(i.p,{children:["\u5728 ",(0,r.jsx)(i.a,{href:"https://auth.mistral.ai/ui/registration",children:"Mistral AI registration page"})," \u521b\u5efa\u8d26\u6237\uff0c\u5e76\u5728 ",(0,r.jsx)(i.a,{href:"https://console.mistral.ai/api-keys/",children:"API Keys page"})," \u751f\u6210 token\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["Spring AI \u9879\u76ee\u5b9a\u4e49\u4e86\u4e00\u4e2a\u540d\u4e3a ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.api-key"})," \u7684\u914d\u7f6e\u5c5e\u6027\uff0c\u60a8\u5e94\u5c06\u5176\u8bbe\u7f6e\u4e3a\u4ece console.mistral.ai \u83b7\u5f97\u7684 ",(0,r.jsx)(i.code,{children:"API Key"})," \u503c\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u60a8\u53ef\u4ee5\u5728 ",(0,r.jsx)(i.code,{children:"application.properties"})," \u6587\u4ef6\u4e2d\u8bbe\u7f6e\u6b64\u914d\u7f6e\u5c5e\u6027\uff1a"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-properties",children:"spring.ai.mistralai.api-key=<your-mistralai-api-key>\n"})}),"\n",(0,r.jsx)(i.p,{children:"\u4e3a\u4e86\u5728\u5904\u7406\u654f\u611f\u4fe1\u606f\uff08\u5982 API keys\uff09\u65f6\u589e\u5f3a\u5b89\u5168\u6027\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 Spring Expression Language (SpEL) \u6765\u5f15\u7528\u81ea\u5b9a\u4e49\u73af\u5883\u53d8\u91cf\uff1a"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-yaml",children:"# In application.yml\nspring:\n  ai:\n    mistralai:\n      api-key: ${MISTRALAI_API_KEY}\n"})}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-bash",children:"# In your environment or .env file\nexport MISTRALAI_API_KEY=<your-mistralai-api-key>\n"})}),"\n",(0,r.jsx)(i.p,{children:"\u60a8\u4e5f\u53ef\u4ee5\u5728\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u4ee5\u7f16\u7a0b\u65b9\u5f0f\u8bbe\u7f6e\u6b64\u914d\u7f6e\uff1a"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'// Retrieve API key from a secure source or environment variable\nString apiKey = System.getenv("MISTRALAI_API_KEY");\n'})}),"\n",(0,r.jsx)(i.h3,{id:"add-repositories-and-bom",children:"Add Repositories and BOM"}),"\n",(0,r.jsxs)(i.p,{children:["Spring AI artifacts \u53d1\u5e03\u5728 Maven Central \u548c Spring Snapshot \u4ed3\u5e93\u4e2d\u3002\n\u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://docs.spring.io/spring-ai/reference/getting-started.html#artifact-repositories",children:"Artifact Repositories"})," \u90e8\u5206\uff0c\u5c06\u8fd9\u4e9b\u4ed3\u5e93\u6dfb\u52a0\u5230\u60a8\u7684\u6784\u5efa\u7cfb\u7edf\u4e2d\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u4e3a\u4e86\u5e2e\u52a9\u8fdb\u884c\u4f9d\u8d56\u7ba1\u7406\uff0cSpring AI \u63d0\u4f9b\u4e86\u4e00\u4e2a BOM (bill of materials)\uff0c\u4ee5\u786e\u4fdd\u5728\u6574\u4e2a\u9879\u76ee\u4e2d\u4f7f\u7528\u4e00\u81f4\u7248\u672c\u7684 Spring AI\u3002\u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://docs.spring.io/spring-ai/reference/getting-started.html#dependency-management",children:"Dependency Management"})," \u90e8\u5206\uff0c\u5c06 Spring AI BOM \u6dfb\u52a0\u5230\u60a8\u7684\u6784\u5efa\u7cfb\u7edf\u4e2d\u3002"]}),"\n",(0,r.jsx)(i.h2,{id:"auto-configuration",children:"Auto-configuration"}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u6ce8\u610f\uff1a"}),"\nSpring AI auto-configuration\u3001starter modules \u7684 artifact \u540d\u79f0\u53d1\u751f\u4e86\u91cd\u5927\u53d8\u5316\u3002\n\u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://docs.spring.io/spring-ai/reference/upgrade-notes.html",children:"upgrade notes"})," \u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002"]}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["Spring AI \u4e3a Mistral AI Chat Client \u63d0\u4f9b Spring Boot auto-configuration\u3002\n\u8981\u542f\u7528\u5b83\uff0c\u8bf7\u5c06\u4ee5\u4e0b\u4f9d\u8d56\u9879\u6dfb\u52a0\u5230\u9879\u76ee\u7684 Maven ",(0,r.jsx)(i.co
1de,{children:"pom.xml"})," \u6587\u4ef6\u4e2d\uff1a"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-xml",children:"<dependency>\n    <groupId>org.springframework.ai</groupId>\n    <artifactId>spring-ai-starter-model-mistral-ai</artifactId>\n</dependency>\n"})}),"\n",(0,r.jsxs)(i.p,{children:["\u6216\u6dfb\u52a0\u5230\u60a8\u7684 Gradle ",(0,r.jsx)(i.code,{children:"build.gradle"})," \u6784\u5efa\u6587\u4ef6\u4e2d\u3002"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-groovy",children:"dependencies {\n    implementation 'org.springframework.ai:spring-ai-starter-model-mistral-ai'\n}\n"})}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u63d0\u793a\uff1a"})," \u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://docs.spring.io/spring-ai/reference/getting-started.html#dependency-management",children:"Dependency Management"})," \u90e8\u5206\uff0c\u5c06 Spring AI BOM \u6dfb\u52a0\u5230\u60a8\u7684\u6784\u5efa\u6587\u4ef6\u4e2d\u3002"]}),"\n"]}),"\n",(0,r.jsx)(i.h3,{id:"chat-properties",children:"Chat Properties"}),"\n",(0,r.jsx)(i.h4,{id:"retry-properties",children:"Retry Properties"}),"\n",(0,r.jsxs)(i.p,{children:["\u524d\u7f00 ",(0,r.jsx)(i.code,{children:"spring.ai.retry"})," \u662f\u7528\u4e8e\u914d\u7f6e Mistral AI chat model \u7684 retry \u673a\u5236\u7684\u5c5e\u6027\u524d\u7f00\u3002"]}),"\n",(0,r.jsxs)(i.table,{children:[(0,r.jsx)(i.thead,{children:(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.th,{children:"Property"}),(0,r.jsx)(i.th,{children:"Description"}),(0,r.jsx)(i.th,{children:"Default"})]})}),(0,r.jsxs)(i.tbody,{children:[(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.retry.max-attempts"}),(0,r.jsx)(i.td,{children:"\u6700\u5927\u91cd\u8bd5\u6b21\u6570\u3002"}),(0,r.jsx)(i.td,{children:"10"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.retry.backoff.initial-interval"}),(0,r.jsx)(i.td,{children:"\u6307\u6570\u9000\u907f\u7b56\u7565\u7684\u521d\u59cb\u7761\u7720\u6301\u7eed\u65f6\u95f4\u3002"}),(0,r.jsx)(i.td,{children:"2 sec."})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.retry.backoff.multiplier"}),(0,r.jsx)(i.td,{children:"\u9000\u907f\u95f4\u9694\u4e58\u6570\u3002"}),(0,r.jsx)(i.td,{children:"5"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.retry.backoff.max-interval"}),(0,r.jsx)(i.td,{children:"\u6700\u5927\u9000\u907f\u6301\u7eed\u65f6\u95f4\u3002"}),(0,r.jsx)(i.td,{children:"3 min."})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.retry.on-client-errors"}),(0,r.jsxs)(i.td,{children:["\u5982\u679c\u4e3a false\uff0c\u629b\u51fa NonTransientAiException\uff0c\u5e76\u4e14\u4e0d\u5bf9 ",(0,r.jsx)(i.code,{children:"4xx"})," \u5ba2\u6237\u7aef\u9519\u8bef\u4ee3\u7801\u5c1d\u8bd5\u91cd\u8bd5"]}),(0,r.jsx)(i.td,{children:"false"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.retry.exclude-on-http-codes"}),(0,r.jsx)(i.td,{children:"\u4e0d\u5e94\u89e6\u53d1\u91cd\u8bd5\u7684 HTTP \u72b6\u6001\u4ee3\u7801\u5217\u8868\uff08\u4f8b\u5982\uff0c\u629b\u51fa NonTransientAiException\uff09\u3002"}),(0,r.jsx)(i.td,{children:"empty"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.retry.on-http-codes"}),(0,r.jsx)(i.td,{children:"\u5e94\u89e6\u53d1\u91cd\u8bd5\u7684 HTTP \u72b6\u6001\u4ee3\u7801\u5217\u8868\uff08\u4f8b\u5982\uff0c\u629b\u51fa TransientAiException\uff09\u3002"}),(0,r.jsx)(i.td,{children:"empty"})]})]})]}),"\n",(0,r.jsx)(i.h4,{id:"connection-properties",children:"Connection Properties"}),"\n",(0,r.jsxs)(i.p,{children:["\u524d\u7f00 ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai"})," \u662f\u7528\u4e8e\u8fde\u63a5\u5230 OpenAI \u7684\u5c5e\u6027\u524d\u7f00\u3002"]}),"\n",(0,r.jsxs)(i.table,{children:[(0,r.jsx)(i.thead,{children:(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.th,{children:"Property"}),(0,r.jsx)(i.th,{children:"Description"}),(0,r.jsx)(i.th,{children:"Default"})]})}),(0,r.jsxs)(i.tbody,{children:[(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.base-url"}),(0,r.jsx)(i.td,{children:"\u8981\u8fde\u63a5\u5230\u7684 URL"}),(0,r.jsx)(i.td,{children:(0,r.jsx)(i.a,{href:"https://api.mistral.ai",children:"https://api.mistral.ai"})})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.api-key"}),(0,r.jsx)(i.td,{children:"API Key"}),(0,r.jsx)(i.td,{children:"-"})]})]})]}),"\n",(0,r.jsx)(i.h4,{id:"configuration-properties",children:"Configuration Properties"}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u6ce8\u610f\uff1a"}
1),"\n\u73b0\u5728\u901a\u8fc7\u524d\u7f00\u4e3a ",(0,r.jsx)(i.code,{children:"spring.ai.model.chat"})," \u7684\u9876\u7ea7\u5c5e\u6027\u6765\u914d\u7f6e chat auto-configurations \u7684\u542f\u7528\u548c\u7981\u7528\u3002"]}),"\n",(0,r.jsx)(i.p,{children:"\u8981\u542f\u7528\uff0cspring.ai.model.chat=mistral\uff08\u9ed8\u8ba4\u542f\u7528\uff09"}),"\n",(0,r.jsx)(i.p,{children:"\u8981\u7981\u7528\uff0cspring.ai.model.chat=none\uff08\u6216\u4efb\u4f55\u4e0e mistral \u4e0d\u5339\u914d\u7684\u503c\uff09"}),"\n",(0,r.jsx)(i.p,{children:"\u6b64\u66f4\u6539\u662f\u4e3a\u4e86\u5141\u8bb8\u914d\u7f6e\u591a\u4e2a\u6a21\u578b\u3002"}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["\u524d\u7f00 ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.chat"})," \u662f\u7528\u4e8e\u914d\u7f6e Mistral AI \u7684 chat model \u5b9e\u73b0\u7684\u5c5e\u6027\u524d\u7f00\u3002"]}),"\n",(0,r.jsxs)(i.table,{children:[(0,r.jsx)(i.thead,{children:(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.th,{children:"Property"}),(0,r.jsx)(i.th,{children:"Description"}),(0,r.jsx)(i.th,{children:"Default"})]})}),(0,r.jsxs)(i.tbody,{children:[(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.enabled (Removed and no longer valid)"}),(0,r.jsx)(i.td,{children:"\u542f\u7528 Mistral AI chat model\u3002"}),(0,r.jsx)(i.td,{children:"true"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.model.chat"}),(0,r.jsx)(i.td,{children:"\u542f\u7528 Mistral AI chat model\u3002"}),(0,r.jsx)(i.td,{children:"mistral"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.base-url"}),(0,r.jsxs)(i.td,{children:["\u53ef\u9009\u8986\u76d6 ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.base-url"})," \u5c5e\u6027\u4ee5\u63d0\u4f9b chat \u7279\u5b9a\u7684 URL\u3002"]}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.api-key"}),(0,r.jsxs)(i.td,{children:["\u53ef\u9009\u8986\u76d6 ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.api-key"})," \u4ee5\u63d0\u4f9b chat \u7279\u5b9a\u7684 API Key\u3002"]}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.model"}),(0,r.jsx)(i.td,{children:"\u8981\u4f7f\u7528\u7684 Mistral AI Chat model"}),(0,r.jsxs)(i.td,{children:[(0,r.jsx)(i.code,{children:"open-mistral-7b"}),"\u3001",(0,r.jsx)(i.code,{children:"open-mixtral-8x7b"}),"\u3001",(0,r.jsx)(i.code,{children:"open-mixtral-8x22b"}),"\u3001",(0,r.jsx)(i.code,{children:"mistral-small-latest"}),"\u3001",(0,r.jsx)(i.code,{children:"mistral-large-latest"})]})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.temperature"}),(0,r.jsxs)(i.td,{children:["\u7528\u4e8e\u63a7\u5236\u751f\u6210 completions \u7684\u660e\u663e\u521b\u9020\u529b\u7684\u91c7\u6837 temperature\u3002\u8f83\u9ad8\u7684\u503c\u5c06\u4f7f\u8f93\u51fa\u66f4\u52a0\u968f\u673a\uff0c\u800c\u8f83\u4f4e\u7684\u503c\u5c06\u4f7f\u7ed3\u679c\u66f4\u52a0\u805a\u7126\u548c\u786e\u5b9a\u6027\u3002\u4e0d\u5efa\u8bae\u4e3a\u540c\u4e00\u4e2a completions \u8bf7\u6c42\u4fee\u6539 ",(0,r.jsx)(i.code,{children:"temperature"})," \u548c ",(0,r.jsx)(i.code,{children:"top_p"}),"\uff0c\u56e0\u4e3a\u8fd9\u4e24\u4e2a\u8bbe\u7f6e\u7684\u4ea4\u4e92\u5f88\u96be\u9884\u6d4b\u3002"]}),(0,r.jsx)(i.td,{children:"0.8"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.maxTokens"}),(0,r.jsx)(i.td,{children:"\u5728 chat completion \u4e2d\u751f\u6210\u7684\u6700\u5927 tokens \u6570\u3002\u8f93\u5165 tokens \u548c\u751f\u6210 tokens \u7684\u603b\u957f\u5ea6\u53d7\u6a21\u578b\u4e0a\u4e0b\u6587\u957f\u5ea6\u7684\u9650\u5236\u3002"}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.safePrompt"}),(0,r.jsx)(i.td,{children:"\u6307\u793a\u662f\u5426\u5728\u6240\u6709\u5bf9\u8bdd\u4e4b\u524d\u6ce8\u5165\u5b89\u5168 prompt\u3002"}),(0,r.jsx)(i.td,{children:"false"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.randomSeed"}),(0,r.jsx)(i.td,{children:"\u6b64\u529f\u80fd\u5904\u4e8e Beta \u9636\u6bb5\u3002\u5982\u679c\u6307\u5b9a\uff0c\u6211\u4eec\u7684\u7cfb\u7edf\u5c06\u5c3d\u6700\u5927\u52aa\u529b\u8fdb\u884c\u786e\u5b9a\u6027\u91c7\u6837\uff0c\u4ee5\u4fbf\u4f7f\u7528\u76f8\u540c\u7684 seed \u548c\u53c2\u6570\u91cd\u590d\u8bf7\u6c42\u5e94\u8fd4\u56de\u76f8\u540c\u7684\u7ed3\u679c\u3002"}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.stop"}),(0,r.jsx)(i.td,{children:"\u5982\u679c\u68c0\u6d4b\u5230\u6b64 token\uff0c\u5219\u505c\u6b62\u751f\u6210\u3002\u6216\u8005\u5728\u63d0\u4f9b\u6570\u7ec4\u65f6\u68c0\u6d4b\u5230\u8fd9\u4e9b tokens \u4e4b\u4e00\u3002"}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.topP"}),(0,r.jsxs)(i.td,{children:["\u9664\u4e86 temperature \u91c7\u6837\u4e4b\u5916\uff0c\u8fd8\u6709\u4e00\u79cd\u79f0\u4e3a nucleus sampling \u7684\u66ff\u4ee3\u65b9\u6cd5\uff0c\u5176\u4e2d\u6a21\u578b\u8003\u8651\u5177\u6709 top_p \u6982\u7387\u8d28\u91cf\u7684 tokens \u7ed3\u679c\u3002\u56e0\u6b64\uff0c0.1 \u610f\u5473\u7740\u53ea\u8003\u8651\u5305\u542b top 10% \u6982\u7387\u8d28\u91cf\u7684 tokens\u3002\u6211\u4eec\u901a\u5e38\u5efa\u8bae\u4fee\u6539\u6b64\u503c\u6216 ",(0,r.jsx)(i.co
1de,{children:"temperature"}),"\uff0c\u4f46\u4e0d\u8981\u540c\u65f6\u4fee\u6539\u4e24\u8005\u3002"]}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.responseFormat"}),(0,r.jsxs)(i.td,{children:["\u6307\u5b9a\u6a21\u578b\u5fc5\u987b\u8f93\u51fa\u7684\u683c\u5f0f\u7684\u5bf9\u8c61\u3002\u8bbe\u7f6e\u4e3a ",(0,r.jsx)(i.code,{children:'{ "type": "json_object" }'})," \u542f\u7528 JSON mode\uff0c\u8fd9\u4fdd\u8bc1\u4e86\u6a21\u578b\u751f\u6210\u7684\u6d88\u606f\u662f\u6709\u6548\u7684 JSON\u3002"]}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.tools"}),(0,r.jsx)(i.td,{children:"\u6a21\u578b\u53ef\u4ee5\u8c03\u7528\u7684\u5de5\u5177\u5217\u8868\u3002\u76ee\u524d\uff0c\u4ec5\u652f\u6301 functions \u4f5c\u4e3a\u5de5\u5177\u3002\u4f7f\u7528\u6b64\u9009\u9879\u63d0\u4f9b\u6a21\u578b\u53ef\u80fd\u4e3a\u5176\u751f\u6210 JSON \u8f93\u5165\u7684 functions \u5217\u8868\u3002"}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.toolChoice"}),(0,r.jsxs)(i.td,{children:["\u63a7\u5236\u6a21\u578b\u8c03\u7528\u54ea\u4e2a\uff08\u5982\u679c\u6709\uff09function\u3002",(0,r.jsx)(i.code,{children:"none"})," \u610f\u5473\u7740\u6a21\u578b\u4e0d\u4f1a\u8c03\u7528 function\uff0c\u800c\u662f\u751f\u6210\u6d88\u606f\u3002",(0,r.jsx)(i.code,{children:"auto"})," \u610f\u5473\u7740\u6a21\u578b\u53ef\u4ee5\u5728\u751f\u6210\u6d88\u606f\u6216\u8c03\u7528 function \u4e4b\u95f4\u8fdb\u884c\u9009\u62e9\u3002\u901a\u8fc7 ",(0,r.jsx)(i.code,{children:'{"type: "function", "function": {"name": "my_function"}}'})," \u6307\u5b9a\u7279\u5b9a function \u4f1a\u5f3a\u5236\u6a21\u578b\u8c03\u7528\u8be5 function\u3002\u5f53\u6ca1\u6709 functions \u65f6\uff0c",(0,r.jsx)(i.code,{children:"none"})," \u662f\u9ed8\u8ba4\u503c\u3002\u5982\u679c\u5b58\u5728 functions\uff0c",(0,r.jsx)(i.code,{children:"auto"})," \u662f\u9ed8\u8ba4\u503c\u3002"]}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.tool-names"}),(0,r.jsx)(i.td,{children:"\u6309\u540d\u79f0\u6807\u8bc6\u7684\u5de5\u5177\u5217\u8868\uff0c\u7528\u4e8e\u5728\u5355\u4e2a prompt \u8bf7\u6c42\u4e2d\u542f\u7528 function calling\u3002\u5177\u6709\u8fd9\u4e9b\u540d\u79f0\u7684\u5de5\u5177\u5fc5\u987b\u5b58\u5728\u4e8e ToolCallback \u6ce8\u518c\u8868\u4e2d\u3002"}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.tool-callbacks"}),(0,r.jsx)(i.td,{children:"\u8981\u6ce8\u518c\u5230 ChatModel \u7684 Tool Callbacks\u3002"}),(0,r.jsx)(i.td,{children:"-"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"spring.ai.mistralai.chat.options.internal-tool-execution-enabled"}),(0,r.jsx)(i.td,{children:"\u5982\u679c\u4e3a false\uff0cSpring AI \u4e0d\u4f1a\u5728\u5185\u90e8\u5904\u7406 tool calls\uff0c\u800c\u662f\u5c06\u5b83\u4eec\u4ee3\u7406\u5230\u5ba2\u6237\u7aef\u3002\u7136\u540e\u5ba2\u6237\u7aef\u8d1f\u8d23\u5904\u7406 tool calls\uff0c\u5c06\u5b83\u4eec\u5206\u6d3e\u5230\u9002\u5f53\u7684 function\uff0c\u5e76\u8fd4\u56de\u7ed3\u679c\u3002\u5982\u679c\u4e3a true\uff08\u9ed8\u8ba4\u503c\uff09\uff0cSpring AI \u5c06\u5728\u5185\u90e8\u5904\u7406 function calls\u3002\u4ec5\u9002\u7528\u4e8e\u652f\u6301 function calling \u7684 chat models"}),(0,r.jsx)(i.td,{children:"true"})]})]})]}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u6ce8\u610f\uff1a"})," \u60a8\u53ef\u4ee5\u4e3a ",(0,r.jsx)(i.code,{children:"ChatModel"})," \u548c ",(0,r.jsx)(i.code,{children:"EmbeddingModel"})," \u5b9e\u73b0\u8986\u76d6\u901a\u7528\u7684 ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.base-url"})," \u548c ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.api-key"}),"\u3002\n\u5982\u679c\u8bbe\u7f6e\u4e86 ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.chat.base-url"})," \u548c ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.chat.api-key"})," \u5c5e\u6027\uff0c\u5219\u4f18\u5148\u4e8e\u901a\u7528\u5c5e\u6027\u3002\n\u5982\u679c\u60a8\u60f3\u5bf9\u4e0d\u540c\u7684\u6a21\u578b\u548c\u4e0d\u540c\u7684\u6a21\u578b\u7aef\u70b9\u4f7f\u7528\u4e0d\u540c\u7684 Mistral AI \u8d26\u6237\uff0c\u8fd9\u5f88\u6709\u7528\u3002"]}),"\n"]}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u63d0\u793a\uff1a"}
1)," \u6240\u6709\u524d\u7f00\u4e3a ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.chat.options"})," \u7684\u5c5e\u6027\u90fd\u53ef\u4ee5\u901a\u8fc7\u5728 ",(0,r.jsx)(i.code,{children:"Prompt"})," \u8c03\u7528\u4e2d\u6dfb\u52a0\u8bf7\u6c42\u7279\u5b9a\u7684 ",(0,r.jsx)(i.code,{children:"chat-options"})," \u5728\u8fd0\u884c\u65f6\u8986\u76d6\u3002"]}),"\n"]}),"\n",(0,r.jsx)(i.h2,{id:"runtime-options-chat-options",children:"Runtime Options [[chat-options]]"}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatOptions.java",children:"MistralAiChatOptions.java"})," \u63d0\u4f9b\u6a21\u578b\u914d\u7f6e\uff0c\u4f8b\u5982\u8981\u4f7f\u7528\u7684\u6a21\u578b\u3001temperature\u3001frequency penalty \u7b49\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u5728\u542f\u52a8\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 ",(0,r.jsx)(i.code,{children:"MistralAiChatModel(api, options)"})," \u6784\u9020\u51fd\u6570\u6216 ",(0,r.jsx)(i.code,{children:"spring.ai.mistralai.chat.options.*"})," \u5c5e\u6027\u6765\u914d\u7f6e\u9ed8\u8ba4\u9009\u9879\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u5728\u8fd0\u884c\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5411 ",(0,r.jsx)(i.code,{children:"Prompt"})," \u8c03\u7528\u6dfb\u52a0\u65b0\u7684\u3001\u8bf7\u6c42\u7279\u5b9a\u7684\u9009\u9879\u6765\u8986\u76d6\u9ed8\u8ba4\u9009\u9879\u3002\n\u4f8b\u5982\uff0c\u8981\u8986\u76d6\u7279\u5b9a\u8bf7\u6c42\u7684\u9ed8\u8ba4\u6a21\u578b\u548c temperature\uff1a"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'ChatResponse response = chatModel.call(\n    new Prompt(\n        "Generate the names of 5 famous pirates.",\n        MistralAiChatOptions.builder()\n            .model(MistralAiApi.ChatModel.LARGE.getValue())\n            .temperature(0.5)\n        .build()\n    ));\n'})}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u63d0\u793a\uff1a"})," \u9664\u4e86\u6a21\u578b\u7279\u5b9a\u7684 ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatOptions.java",children:"MistralAiChatOptions"})," \u4e4b\u5916\uff0c\u60a8\u8fd8\u53ef\u4ee5\u4f7f\u7528\u53ef\u79fb\u690d\u7684 ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/chat/prompt/ChatOptions.java",children:"ChatOptions"})," \u5b9e\u4f8b\uff0c\u8be5\u5b9e\u4f8b\u4f7f\u7528 ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/chat/prompt/DefaultChatOptionsBuilder.java",children:"ChatOptions#builder()"})," \u521b\u5efa\u3002"]}),"\n"]}),"\n",(0,r.jsx)(i.h2,{id:"function-calling",children:"Function Calling"}),"\n",(0,r.jsxs)(i.p,{children:["\u60a8\u53ef\u4ee5\u5c06\u81ea\u5b9a\u4e49 Java functions \u6ce8\u518c\u5230 ",(0,r.jsx)(i.code,{children:"MistralAiChatModel"}),"\uff0c\u5e76\u8ba9 Mistral AI \u6a21\u578b\u667a\u80fd\u5730\u9009\u62e9\u8f93\u51fa\u5305\u542b\u53c2\u6570\u4ee5\u8c03\u7528\u4e00\u4e2a\u6216\u591a\u4e2a\u5df2\u6ce8\u518c functions \u7684 JSON \u5bf9\u8c61\u3002\n\u8fd9\u662f\u4e00\u79cd\u5c06 LLM \u529f\u80fd\u4e0e\u5916\u90e8\u5de5\u5177\u548c APIs \u8fde\u63a5\u7684\u5f3a\u5927\u6280\u672f\u3002\n\u4e86\u89e3\u66f4\u591a\u5173\u4e8e ",(0,r.jsx)(i.a,{href:"../../toolcalls/tool-calls",children:"Tool Calling"}),"\u3002"]}),"\n",(0,r.jsx)(i.h2,{id:"multimodal",children:"Multimodal"}),"\n",(0,r.jsx)(i.p,{children:"Multimodality \u662f\u6307\u6a21\u578b\u540c\u65f6\u7406\u89e3\u548c\u5904\u7406\u6765\u81ea\u5404\u79cd\u6765\u6e90\u7684\u4fe1\u606f\u7684\u80fd\u529b\uff0c\u5305\u62ec\u6587\u672c\u3001\u56fe\u50cf\u3001\u97f3\u9891\u548c\u5176\u4ed6\u6570\u636e\u683c\u5f0f\u3002\nMistral AI \u652f\u6301\u6587\u672c\u548c\u89c6\u89c9\u6a21\u6001\u3002"}),"\n",(0,r.jsx)(i.h3,{id:"vision",children:"Vision"}),"\n",(0,r.jsxs)(i.p,{children:["\u63d0\u4f9b vision multimodal \u652f\u6301\u7684 Mistral AI \u6a21\u578b\u5305\u62ec ",(0,r.jsx)(i.co
1de,{children:"pixtral-large-latest"}),"\u3002\n\u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://docs.mistral.ai/capabilities/vision/",children:"Vision"})," \u6307\u5357\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["Mistral AI ",(0,r.jsx)(i.a,{href:"https://docs.mistral.ai/api/#tag/chat/operation/chat_completion_v1_chat_completions_post",children:"User Message API"})," \u53ef\u4ee5\u5728\u6d88\u606f\u4e2d\u5305\u542b base64 \u7f16\u7801\u7684\u56fe\u50cf\u6216\u56fe\u50cf URL \u5217\u8868\u3002\nSpring AI \u7684 ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/messages/Message.java",children:"Message"})," \u63a5\u53e3\u901a\u8fc7\u5f15\u5165 ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/spring-ai-commons/src/main/java/org/springframework/ai/content/Media.java",children:"Media"})," \u7c7b\u578b\u6765\u4fc3\u8fdb multimodal AI \u6a21\u578b\u3002\n\u6b64\u7c7b\u578b\u5305\u542b\u6d88\u606f\u4e2d\u5a92\u4f53\u9644\u4ef6\u7684\u6570\u636e\u548c\u8be6\u7ec6\u4fe1\u606f\uff0c\u4f7f\u7528 Spring \u7684 ",(0,r.jsx)(i.code,{children:"org.springframework.util.MimeType"})," \u548c ",(0,r.jsx)(i.code,{children:"org.springframework.core.io.Resource"})," \u6765\u5b58\u50a8\u539f\u59cb\u5a92\u4f53\u6570\u636e\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u4ee5\u4e0b\u662f\u4ece ",(0,r.jsx)(i.code,{children:"MistralAiChatModelIT.java"})," \u4e2d\u6458\u53d6\u7684\u4ee3\u7801\u793a\u4f8b\uff0c\u8bf4\u660e\u4e86\u7528\u6237\u6587\u672c\u4e0e\u56fe\u50cf\u7684\u878d\u5408\u3002"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'var imageResource = new ClassPathResource("/multimodal.test.png");\n\nvar userMessage = new UserMessage("Explain what do you see on this picture?",\n        new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource));\n\nChatResponse response = chatModel.call(new Prompt(this.userMessage,\n        ChatOptions.builder().model(MistralAiApi.ChatModel.PIXTRAL_LARGE.getValue()).build()));\n'})}),"\n",(0,r.jsx)(i.p,{children:"\u6216\u56fe\u50cf URL \u7b49\u6548\u65b9\u5f0f\uff1a"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'var userMessage = new UserMessage("Explain what do you see on this picture?",\n        new Media(MimeTypeUtils.IMAGE_PNG,\n                URI.create("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png")));\n\nChatResponse response = chatModel.call(new Prompt(this.userMessage,\n        ChatOptions.builder().model(MistralAiApi.ChatModel.PIXTRAL_LARGE.getValue()).build()));\n'})}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u63d0\u793a\uff1a"})," \u60a8\u4e5f\u53ef\u4ee5\u4f20\u9012\u591a\u4e2a\u56fe\u50cf\u3002"]}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["\u8be5\u793a\u4f8b\u663e\u793a\u6a21\u578b\u5c06 ",(0,r.jsx)(i.code,{children:"multimodal.test.png"})," \u56fe\u50cf\u4f5c\u4e3a\u8f93\u5165\uff1a"]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"multimodal.test.png",src:n(410).A+"",width:"532",height:"350"})}),"\n",(0,r.jsx)(i.p,{children:'\u4ee5\u53ca\u6587\u672c\u6d88\u606f "Explain what do you see on this picture?"\uff0c\u5e76\u751f\u6210\u5982\u4e0b\u54cd\u5e94\uff1a'}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{children:"This is an image of a fruit bowl with a simple design. The bowl is made of metal with curved wire edges that\ncreate an open structure, allowing the fruit to be visible from all angles. Inside the bowl, there are two\nyellow bananas resting on top of what appears to be a red apple. The bananas are slightly overripe, as\nindicated by the brown spots on their peels. The bowl has a metal ring at the top, likely to serve as a handle\nfor carrying. The bowl is placed on a flat surface with a neutral-colored background that provides a clear\nview of the fruit inside.\n"})}),"\n",(0,r.jsx)(i.h2,{id:"openai-api-compatibility",children:"OpenAI API Compatibility"}),"\n",(0,r.jsxs)(i.p,{children:["Mistral \u4e0e OpenAI API \u517c\u5bb9\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 ",(0,r.jsx)(i.a,{href:"../openai-chat",children:"Spring AI OpenAI"})," \u5ba2\u6237\u7aef\u4e0e Mistrial \u901a\u4fe1\u3002\n\u4e3a\u6b
164\uff0c\u60a8\u9700\u8981\u5c06 OpenAI base URL \u914d\u7f6e\u4e3a Mistral AI \u5e73\u53f0\uff1a",(0,r.jsx)(i.code,{children:"spring.ai.openai.chat.base-url=https://api.mistral.ai"}),"\uff0c\u5e76\u9009\u62e9 Mistral \u6a21\u578b\uff1a",(0,r.jsx)(i.code,{children:"spring.ai.openai.chat.options.model=mistral-small-latest"})," \u5e76\u8bbe\u7f6e Mistral AI API key\uff1a",(0,r.jsx)(i.code,{children:"spring.ai.openai.chat.api-key=<YOUR MISTRAL API KEY"}),"\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u67e5\u770b ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/proxy/MistralWithOpenAiChatModelIT.java",children:"MistralWithOpenAiChatModelIT.java"})," \u6d4b\u8bd5\u4ee5\u4e86\u89e3\u901a\u8fc7 Spring AI OpenAI \u4f7f\u7528 Mistral \u7684\u793a\u4f8b\u3002"]}),"\n",(0,r.jsx)(i.h2,{id:"sample-controller-auto-configuration",children:"Sample Controller (Auto-configuration)"}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.a,{href:"https://start.spring.io/",children:"Create"})," \u4e00\u4e2a\u65b0\u7684 Spring Boot \u9879\u76ee\uff0c\u5e76\u5c06 ",(0,r.jsx)(i.code,{children:"spring-ai-starter-model-mistral-ai"})," \u6dfb\u52a0\u5230\u60a8\u7684 pom\uff08\u6216 gradle\uff09\u4f9d\u8d56\u9879\u4e2d\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u5728 ",(0,r.jsx)(i.code,{children:"src/main/resources"})," \u76ee\u5f55\u4e0b\u6dfb\u52a0\u4e00\u4e2a ",(0,r.jsx)(i.code,{children:"application.properties"})," \u6587\u4ef6\uff0c\u4ee5\u542f\u7528\u548c\u914d\u7f6e Mistral AI chat model\uff1a"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-properties",children:"spring.ai.mistralai.api-key=YOUR_API_KEY\nspring.ai.mistralai.chat.options.model=mistral-small\nspring.ai.mistralai.chat.options.temperature=0.7\n"})}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u63d0\u793a\uff1a"})," \u5c06 ",(0,r.jsx)(i.code,{children:"api-key"})," \u66ff\u6362\u4e3a\u60a8\u7684 Mistral AI \u51ed\u636e\u3002"]}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["\u8fd9\u5c06\u521b\u5efa\u4e00\u4e2a ",(0,r.jsx)(i.code,{children:"MistralAiChatModel"})," \u5b9e\u73b0\uff0c\u60a8\u53ef\u4ee5\u5c06\u5176\u6ce8\u5165\u5230\u60a8\u7684\u7c7b\u4e2d\u3002\n\u4ee5\u4e0b\u662f\u4e00\u4e2a\u7b80\u5355\u7684 ",(0,r.jsx)(i.code,{children:"@RestController"})," \u7c7b\u7684\u793a\u4f8b\uff0c\u5b83\u4f7f\u7528 chat model \u8fdb\u884c\u6587\u672c\u751f\u6210\u3002"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'@RestController\npublic class ChatController {\n\n    private final MistralAiChatModel chatModel;\n\n    @Autowired\n    public ChatController(MistralAiChatModel chatModel) {\n        this.chatModel = chatModel;\n    }\n\n    @GetMapping("/ai/generate")\n    public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {\n        return Map.of("generation", this.chatModel.call(message));\n    }\n\n    @GetMapping("/ai/generateStream")\n\tpublic Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {\n        var prompt = new Prompt(new UserMessage(message));\n        return this.chatModel.stream(prompt);\n    }\n}\n'})}),"\n",(0,r.jsx)(i.h2,{id:"manual-configuration",children:"Manual Configuration"}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java",children:"MistralAiChatModel"})," \u5b9e\u73b0\u4e86 ",(0,r.jsx)(i.code,{children:"ChatModel"})," \u548c ",(0,r.jsx)(i.code,{children:"StreamingChatModel"}),"\uff0c\u5e76\u4f7f\u7528 \u3010low-level-api\u3011 \u8fde\u63a5\u5230 Mistral AI \u670d\u52a1\u3002"]}),"\n",(0,r.jsxs)(i.p,{children:["\u5c06 ",(0,r.jsx)(i.code,{children:"spring-ai-mistral-ai"})," \u4f9d\u8d56\u9879\u6dfb\u52a0\u5230\u9879\u76ee\u7684 Maven ",(0,r.jsx)(i.code,{children:"pom.xml"})," \u6587\u4ef6\u4e2d\uff1a"]}
1),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-xml",children:"<dependency>\n    <groupId>org.springframework.ai</groupId>\n    <artifactId>spring-ai-mistral-ai</artifactId>\n</dependency>\n"})}),"\n",(0,r.jsxs)(i.p,{children:["\u6216\u6dfb\u52a0\u5230\u60a8\u7684 Gradle ",(0,r.jsx)(i.code,{children:"build.gradle"})," \u6784\u5efa\u6587\u4ef6\u4e2d\u3002"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-groovy",children:"dependencies {\n    implementation 'org.springframework.ai:spring-ai-mistral-ai'\n}\n"})}),"\n",(0,r.jsxs)(i.blockquote,{children:["\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"\u63d0\u793a\uff1a"})," \u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://docs.spring.io/spring-ai/reference/getting-started.html#dependency-management",children:"Dependency Management"})," \u90e8\u5206\uff0c\u5c06 Spring AI BOM \u6dfb\u52a0\u5230\u60a8\u7684\u6784\u5efa\u6587\u4ef6\u4e2d\u3002"]}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["\u63a5\u4e0b\u6765\uff0c\u521b\u5efa\u4e00\u4e2a ",(0,r.jsx)(i.code,{children:"MistralAiChatModel"})," \u5e76\u5c06\u5176\u7528\u4e8e\u6587\u672c\u751f\u6210\uff1a"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'var mistralAiApi = new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));\n\nvar chatModel = new MistralAiChatModel(this.mistralAiApi, MistralAiChatOptions.builder()\n                .model(MistralAiApi.ChatModel.LARGE.getValue())\n                .temperature(0.4)\n                .maxTokens(200)\n                .build());\n\nChatResponse response = this.chatModel.call(\n    new Prompt("Generate the names of 5 famous pirates."));\n\n// Or with streaming responses\nFlux<ChatResponse> response = this.chatModel.stream(\n    new Prompt("Generate the names of 5 famous pirates."));\n'})}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.code,{children:"MistralAiChatOptions"})," \u63d0\u4f9b chat \u8bf7\u6c42\u7684\u914d\u7f6e\u4fe1\u606f\u3002\n",(0,r.jsx)(i.code,{children:"MistralAiChatOptions.Builder"})," \u662f\u4e00\u4e2a\u6d41\u7545\u7684\u9009\u9879\u6784\u5efa\u5668\u3002"]}),"\n",(0,r.jsx)(i.h3,{id:"low-level-mistralaiapi-client-low-level-api",children:"Low-level MistralAiApi Client [[low-level-api]]"}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralAiApi.java",children:"MistralAiApi"})," \u4e3a ",(0,r.jsx)(i.a,{href:"https://docs.mistral.ai/api/",children:"Mistral AI API"})," \u63d0\u4f9b\u8f7b\u91cf\u7ea7 Java \u5ba2\u6237\u7aef\u3002"]}),"\n",(0,r.jsx)(i.p,{children:"\u4ee5\u4e0b\u662f\u5982\u4f55\u4ee5\u7f16\u7a0b\u65b9\u5f0f\u4f7f\u7528 API \u7684\u7b80\u5355\u793a\u4f8b\uff1a"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'MistralAiApi mistralAiApi = new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));\n\nChatCompletionMessage chatCompletionMessage =\n    new ChatCompletionMessage("Hello world", Role.USER);\n\n// Sync request\nResponseEntity<ChatCompletion> response = this.mistralAiApi.chatCompletionEntity(\n    new ChatCompletionRequest(List.of(this.chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8, false));\n\n// Streaming request\nFlux<ChatCompletionChunk> streamResponse = this.mistralAiApi.chatCompletionStream(\n        new ChatCompletionRequest(List.of(this.chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8, true));\n'})}),"\n",(0,r.jsxs)(i.p,{children:["\u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralAiApi.java",children:"MistralAiApi.java"})," \u7684 JavaDoc \u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002"]}),"\n",(0,r.jsx)(i.h4,{id:"mistralaiapi-samples",children:"MistralAiApi Samples"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/api/MistralAiApiIT.java",children:"MistralAiApiIT.java"})," \u6d4b\u8bd5\u63d0\u4f9b\u4e86\u4e00\u4e9b\u5982\u4f55\u4f7f\u7528\u8f7b\u91cf\u7ea7\u5e93\u7684\u4e00\u822c\u793a\u4f8b\u3002"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/api/tool/PaymentStatusFunctionCallingIT.java",children:"PaymentStatusFunctionCallingIT.java"})," \u6d4b\u8bd5\u5c55\u793a\u4e86\u5982\u4f55\u4f7f\u7528 low-level API \u8c03\u7528 tool functions\u3002\n\u57fa\u4e8e ",(0,r.jsx)(i.a,{href:"https://docs.mistral.ai/guides/function-calling/",children:"Mistral AI Function Calling"})," \u6559\u7a0b\u3002"]}),"\n"]}),"\n",(0,r.jsx)(i.h2,{id:"mistral-ai-ocr",children:"Mistral AI OCR"}),"\n",(0,r.jsx)(i.p,{children:"Spring AI \u652f\u6301\u4f7f\u7528 Mistral AI \u8fdb\u884c Optical Character Recognition (OCR)\u3002\u8fd9\u5141\u8bb8\u60a8\u4ece\u6587\u6863\u4e2d\u63d0\u53d6\u6587\u672c\u548c\u56fe\u50cf\u6570\u636e\u3002"}),"\n",(0,r.jsx)(i.h2,{id:"prerequisites-1",children:"Prerequisites"}),"\n",(0,r.jsxs)(i.p,{children:["\u60a8\u9700\u8981\u4f7f\u7528 Mistral AI \u521b\u5efa API \u624d\u80fd\u8bbf\u95ee Mistral AI \u8bed\u8a00\u6a21\u578b\u3002\n\u5728 ",(0,r.jsx)(i.a,{href:"https://auth.mistral.ai/ui/registration",children:"Mistral AI registration page"})," \u521b\u5efa\u8d26\u6237\uff0c\u5e76\u5728 ",(0,r.jsx)(i.a,{href:"https://console.mistral.ai/api-keys/",children:"API Keys page"})," \u751f\u6210 token\u3002"]}),"\n",(0,r.jsx)(i.h3,{id:"add-dependencies",children:"Add Dependencies"}),"\n",(0,r.jsxs)(i.p,{children:["\u8981\u4f7f\u7528 Mistral AI OCR API\uff0c\u60a8\u9700\u8981\u5c06 ",(0,r.jsx)(i.co
1de,{children:"spring-ai-mistral-ai"})," \u4f9d\u8d56\u9879\u6dfb\u52a0\u5230\u60a8\u7684\u9879\u76ee\u4e2d\u3002"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-xml",children:"<dependency>\n    <groupId>org.springframework.ai</groupId>\n    <artifactId>spring-ai-mistral-ai</artifactId>\n</dependency>\n"})}),"\n",(0,r.jsxs)(i.p,{children:["\u6216\u6dfb\u52a0\u5230\u60a8\u7684 Gradle ",(0,r.jsx)(i.code,{children:"build.gradle"})," \u6784\u5efa\u6587\u4ef6\u4e2d\u3002"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-groovy",children:"dependencies {\n    implementation 'org.springframework.ai:spring-ai-mistral-ai'\n}\n"})}),"\n",(0,r.jsx)(i.h3,{id:"low-level-mistralocrapi-client",children:"Low-level MistralOcrApi Client"}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralOcrApi.java",children:"MistralOcrApi"})," \u4e3a ",(0,r.jsx)(i.a,{href:"https://docs.mistral.ai/api/#tag/OCR",children:"Mistral AI OCR API"})," \u63d0\u4f9b\u8f7b\u91cf\u7ea7 Java \u5ba2\u6237\u7aef\u3002"]}),"\n",(0,r.jsx)(i.p,{children:"\u4ee5\u4e0b\u662f\u5982\u4f55\u4ee5\u7f16\u7a0b\u65b9\u5f0f\u4f7f\u7528 API \u7684\u7b80\u5355\u793a\u4f8b\uff1a"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-java",children:'MistralOcrApi mistralAiApi = new MistralOcrApi(System.getenv("MISTRAL_AI_API_KEY"));\n\nString documentUrl = "https://arxiv.org/pdf/2201.04234";\nMistralOcrApi.OCRRequest request = new MistralOcrApi.OCRRequest(\n        MistralOcrApi.OCRModel.MISTRAL_OCR_LATEST.getValue(), "test_id",\n        new MistralOcrApi.OCRRequest.DocumentURLChunk(documentUrl), List.of(0, 1, 2), true, 5, 50);\n\nResponseEntity<MistralOcrApi.OCRResponse> response = mistralAiApi.ocr(request);\n'})}),"\n",(0,r.jsxs)(i.p,{children:["\u8bf7\u53c2\u9605 ",(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralOcrApi.java",children:"MistralOcrApi.java"})," \u7684 JavaDoc \u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002"]}),"\n",(0,r.jsx)(i.h4,{id:"mistralocrapi-sample",children:"MistralOcrApi Sample"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/api/MistralOcrApiIT.java",children:"MistralOcrApiIT.java"})," \u6d4b\u8bd5\u63d0\u4f9b\u4e86\u4e00\u4e9b\u5982\u4f55\u4f7f\u7528\u8f7b\u91cf\u7ea7\u5e93\u7684\u4e00\u822c\u793a\u4f8b\u3002"]}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,a.R)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.