色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Spring AI 2.0實(shí)戰(zhàn):Java開(kāi)發(fā)者快速構(gòu)建多模型Agent應(yīng)用

Spring AI 2.0實(shí)戰(zhàn):Java開(kāi)發(fā)者快速構(gòu)建多模型Agent應(yīng)用 從 2024 年開(kāi)始AI 應(yīng)用開(kāi)發(fā)幾乎成了 Python 開(kāi)發(fā)者專屬賽道LangChain、LlamaIndex 各種框架層出不窮。Java 開(kāi)發(fā)者想在自己的 Spring Boot 項(xiàng)目里接一個(gè)大模型要么寫裸 HTTP 請(qǐng)求調(diào)用 OpenAI 兼容接口要么硬套 Python 生態(tài)的思路代碼風(fēng)格割裂維護(hù)成本極高。到了 2026 年這個(gè)局面的答案已經(jīng)非常明確Spring AI 2.0。這篇文章要把 Spring AI 2.0 里最重要的五件事——多模型、Tools、MCP、Skills、Agent——完整串起來(lái)講一遍。不是單純介紹概念而是從一個(gè)小型實(shí)戰(zhàn)項(xiàng)目出發(fā)把每一步的配置、代碼、踩坑點(diǎn)全部鋪開(kāi)。如果你是一個(gè) Java 工程師正在糾結(jié)怎么在公司項(xiàng)目里落地 AI 能力這篇文章可以直接當(dāng)參考手冊(cè)用。先說(shuō)結(jié)論Spring AI 2.0 真正解決的問(wèn)題是把“和大模型打交道”這件事變成了符合 Spring 編程模型的普通后端開(kāi)發(fā)。它不追求把 LangChain 那套 Python 生態(tài)搬過(guò)來(lái)而是用 Spring 自己的依賴注入、自動(dòng)配置、約定優(yōu)于配置把多模型切換、工具調(diào)用、協(xié)議接入、Agent 編排統(tǒng)一成一個(gè)標(biāo)準(zhǔn)范式。讀完這篇文章你能獨(dú)立搭出一個(gè)支持多模型切換、能調(diào)用自定義工具、能通過(guò) MCP 接入外部服務(wù)、帶記憶和會(huì)話的客服 Agent 原型。1. 這篇文章真正要解決的問(wèn)題很多 Java 開(kāi)發(fā)者學(xué) AI 編程的第一反應(yīng)是先去學(xué) Python。這個(gè)認(rèn)知正在變成一種路徑依賴。如果項(xiàng)目底層是 Java團(tuán)隊(duì)是 Java 團(tuán)隊(duì)業(yè)務(wù)邏輯都在 Spring Boot 服務(wù)里那用 Python 重寫一套 AI 應(yīng)用等于把整個(gè)工程體系復(fù)制了一份。Spring AI 2.0 的價(jià)值就在這里。它處理的不只是“調(diào)一次大模型接口”這種小事而是一整套企業(yè)級(jí) AI 應(yīng)用開(kāi)發(fā)中必須面對(duì)的問(wèn)題同一個(gè)業(yè)務(wù)要支持多家模型供應(yīng)商比如線上用 GPT-4o本地開(kāi)發(fā)用 Ollama 里的開(kāi)源模型怎么做到切換模型而不改業(yè)務(wù)代碼模型返回的是 JSON 文本怎么穩(wěn)定地映射成 Java 對(duì)象而不是靠正則硬解析大模型不知道你的訂單數(shù)據(jù)、用戶數(shù)據(jù)怎么安全地讓它調(diào)用你已有的 Service 方法外部工具生態(tài)已經(jīng)約定了統(tǒng)一接入?yún)f(xié)議比如數(shù)據(jù)庫(kù) MCP Server、文件系統(tǒng) MCP ServerSpring 項(xiàng)目怎么接入最省事一個(gè)智能客服 Agent 需要有角色設(shè)定、工具列表、會(huì)話記憶、多輪上下文這些怎么工程化管理這些問(wèn)題的答案就是 Spring AI 2.0 的核心抽象體系。它跟 Python 的 LangChain 解決的問(wèn)題高度重合但實(shí)現(xiàn)思路完全是 Java 式的自動(dòng)配置、Bean 管理、類型安全、Starter 依賴。從實(shí)用角度看這篇文章適合四類讀者還沒(méi)接觸過(guò) Spring AI但項(xiàng)目里已經(jīng)有 Spring Boot 3.x 基礎(chǔ)想快速上手已經(jīng)在用 Spring AI 1.x想知道 2.0 在 Tools、MCP、Skills、Agent 這幾個(gè)方向有什么變化被“多模型”“MCP”“Agent”這些概念繞暈需要一個(gè)能跑通的最小案例準(zhǔn)備把 AI 能力集成進(jìn)企業(yè)系統(tǒng)的架構(gòu)師或技術(shù)負(fù)責(zé)人需要判斷技術(shù)選型和工程邊界。有 Spring Boot 基礎(chǔ)的人今天就能把鏈路跑通。2. Spring AI 2.0 核心概念從 ChatModel 到 Agent2.1 最核心的抽象ChatModelSpring AI 對(duì) LLM 的抽象核心就是ChatModel接口。不管底層是 OpenAI、Anthropic、通義千問(wèn)、DeepSeek 還是 Ollama 里的本地模型對(duì)上層業(yè)務(wù)代碼來(lái)說(shuō)暴露出來(lái)的都是同一個(gè)接口。public interface ChatModel { ChatResponse call(Prompt prompt); }這個(gè)設(shè)計(jì)的價(jià)值在業(yè)務(wù)方不在實(shí)現(xiàn)方。你寫的 Service 層不需要關(guān)心當(dāng)前接的是哪個(gè)大模型。以后要從 GPT 切到本地模型只改配置不碰 Java 代碼。這就是多模型支持的第一層含義。圍繞ChatModelSpring AI 還提供了幾個(gè)配套抽象ChatClient更面向業(yè)務(wù)的流式調(diào)用入口支持 system prompt、user prompt、工具注冊(cè)、結(jié)構(gòu)化輸出。這是最常用的對(duì)象。EmbeddingModel負(fù)責(zé)把文本轉(zhuǎn)成向量用于 RAG、語(yǔ)義搜索等場(chǎng)景。StructuredOutputConverter將模型輸出解析為指定 Java 類型。2.2 Tools讓大模型調(diào)用你的函數(shù)大模型本身不持有你的業(yè)務(wù)數(shù)據(jù)它只能“說(shuō)出”一個(gè)新的 JSON 結(jié)構(gòu)表達(dá)“我想調(diào)用某個(gè)函數(shù)”。Tools 就是把這層機(jī)制封裝成了 Spring 風(fēng)格的工具方法。在 Spring AI 中只需要在方法上標(biāo)記Tool注解框架自動(dòng)完成“模型生成函數(shù)調(diào)用參數(shù) → 框架反射調(diào)用方法 → 把結(jié)果回傳給模型 → 模型基于結(jié)果繼續(xù)生成”的循環(huán)。這里真正容易踩坑的地方在于模型是否真的會(huì)調(diào)用你的 Tool取決于你寫的description是否足夠清晰。描述寫得含糊模型就會(huì)跳過(guò)函數(shù)調(diào)用直接憑幻覺(jué)回答。2.3 MCP模型上下文協(xié)議MCPModel Context Protocol是 Anthropic 在 2024 年底提出的開(kāi)放協(xié)議目標(biāo)是標(biāo)準(zhǔn)化“模型如何發(fā)現(xiàn)并調(diào)用外部工具/數(shù)據(jù)源”。它把工具、資源、提示詞統(tǒng)一成一套標(biāo)準(zhǔn)接口。一個(gè)團(tuán)隊(duì)只要實(shí)現(xiàn)了 MCP Server任何支持 MCP 的客戶端都能復(fù)用。Spring AI 2.0 對(duì) MCP 的支持是完整的可以作為 MCP Client連接現(xiàn)成的 MCP Server比如文件系統(tǒng)、數(shù)據(jù)庫(kù)、藍(lán)湖設(shè)計(jì)稿、GitHub 等也可以作為 MCP Server把 Spring 服務(wù)里的能力暴露給其他 AI 應(yīng)用。MCP 和 Tools 的關(guān)系不是二選一。Tools 是 Spring AI 內(nèi)部的函數(shù)調(diào)用機(jī)制MCP 是跨應(yīng)用、跨語(yǔ)言的工具發(fā)現(xiàn)與傳輸標(biāo)準(zhǔn)。MCP Server 在遠(yuǎn)端提供的工具最終會(huì)被 Spring AI 包裝成本地 Tool 參與模型對(duì)話。2.4 Skills更貼近業(yè)務(wù)的 Agent 能力封裝如果說(shuō) Tools 解決的是“單個(gè)函數(shù)”的調(diào)用那么 Skills 解決的是“一組能力”的復(fù)用。一個(gè) Skill 通常包含多部分內(nèi)容清晰的技能描述、可能用到的多個(gè)工具方法、提示詞模板、輸入校驗(yàn)規(guī)則甚至內(nèi)部的異常處理邏輯。從 Spring AI 2.0 的演進(jìn)方向看Skill 就是為 Agent 誕生的“能力包”。舉個(gè)例子一個(gè)“訂單查詢技能”可以包含“按訂單號(hào)查狀態(tài)”“按手機(jī)號(hào)查訂單列表”“查詢物流軌跡”三個(gè)工具并統(tǒng)一處理參數(shù)校驗(yàn)和返回格式。Agent 只需要知道“有一個(gè)訂單查詢技能”就能在合適的時(shí)候調(diào)用它。2.5 Skill 和 MCP 的區(qū)別這是很多初學(xué)者最暈的地方。用一句話概括它們的差異MCP 是標(biāo)準(zhǔn)與協(xié)議Skills 是業(yè)務(wù)封裝。MCP 解決的是“怎么連接、傳什么格式”的問(wèn)題比如你用 npx 啟動(dòng)一個(gè) filesystem MCP Server客戶端連上它就能列出可用的工具列表。Skill 解決的是“以什么方式參與 Agent 編排”的問(wèn)題它更像是一個(gè)高層的業(yè)務(wù)抽象背后既可以封裝本地 Tools也可以封裝對(duì) MCP 工具的調(diào)用。打個(gè)比方MCP 像是 USB-C 接口標(biāo)準(zhǔn)任何設(shè)備只要按這個(gè)標(biāo)準(zhǔn)生產(chǎn)就能互聯(lián)Skill 則像一個(gè)“即插即用的功能包”比如一個(gè)“高清投屏技能”它可能包含了軟件、驅(qū)動(dòng)和推薦配置。兩者不在同一個(gè)抽象層。2.6 Agent用對(duì)話能力編排一切Agent 不是一個(gè)新框架而是ChatModel Tools Skills 記憶 多輪編排的組合產(chǎn)物。在 Spring AI 2.0 中一個(gè) Agent 的編程模型非常簡(jiǎn)單準(zhǔn)備好一個(gè)ChatClient給它配置系統(tǒng)角色、工具列表和會(huì)話記憶剩下的循環(huán)推理全部交給框架。Agent 內(nèi)部會(huì)反復(fù)執(zhí)行“模型生成 → 決定是否調(diào)用工具 → 拿到結(jié)果 → 繼續(xù)生成”的流程直到它能給出最終回答。不過(guò)簡(jiǎn)單不代表沒(méi)有難點(diǎn)。真正考驗(yàn)工程能力的是 Agent 的安全邊界、工具權(quán)限、會(huì)話存儲(chǔ)、失敗降級(jí)這些外圍問(wèn)題。后面會(huì)專門用一整節(jié)說(shuō)清楚。3. 環(huán)境準(zhǔn)備與前置條件3.1 JDK 與構(gòu)建工具Spring AI 2.x 基于 Spring Framework 6.x 和 Spring Boot 3.x要求 JDK 17 及以上。推薦直接使用 JDK 21理由很實(shí)際虛擬線程、更完善的 ZGC 行為以及 Spring Boot 對(duì) JDK 21 的完整官方支持。構(gòu)建工具用 Maven 或 Gradle 都可以。本文示例以 Maven 為主因?yàn)閲?guó)內(nèi) Java 項(xiàng)目里 Maven 還是絕對(duì)主流。版本方面Spring AI 的版本更新速度比較快不建議把具體版本號(hào)寫死在文章里。正確做法在pom.xml里通過(guò)spring-ai-bom做依賴管理版本統(tǒng)一放到屬性里使用 Maven Central 上的最新穩(wěn)定版。!-- 文件路徑pom.xml 片段 -- properties java.version21/java.version spring-boot.version3.4.x/spring-boot.version spring-ai.version2.0.x/spring-ai.version /properties實(shí)際使用中把x替換成發(fā)布時(shí)的具體小版本號(hào)即可。3.2 Spring Boot 項(xiàng)目初始化先在 Spring Initializr 上生成一個(gè)基礎(chǔ)工程或者直接在 IDEA 里用 Spring Initializr 創(chuàng)建。需要選擇的依賴如下Spring WebSpring AI OpenAISpring AI OllamaLombok可選Spring AI MCP Client WebMVC如果你需要把 Spring 服務(wù)本身暴露成 MCP Server還需要加Spring AI MCP Server WebMVC。本文的示例會(huì)先做 MCP Client 接入。3.3 模型 API Key 準(zhǔn)備至少準(zhǔn)備一個(gè)可用的大模型 API Key。如果公司有統(tǒng)一的模型網(wǎng)關(guān)也可以把 base-url 指向網(wǎng)關(guān)地址。本地開(kāi)發(fā)優(yōu)先推薦 Ollama 方式下載 Ollama再拉一個(gè)支持 function calling 的模型比如qwen2.5系列。這樣即使沒(méi)有公網(wǎng) API Key也可以完成 Tools 和 Agent 的全流程測(cè)試。這里補(bǔ)充一個(gè)重要約定任何 API Key 都不要硬編碼到application.yml里更不要提交到 Git 倉(cāng)庫(kù)。用環(huán)境變量注入例如${OPENAI_API_KEY:}。如果你有配置中心例如 Apollo、Nacos Config應(yīng)該走配置中心統(tǒng)一管理。4. 核心流程拆解從配置到 Agent 的六步鏈路4.1 第一步配置多模型目標(biāo)是一個(gè) Spring Boot 項(xiàng)目里同時(shí)存在多個(gè)ChatModelBean。Spring AI 的自動(dòng)配置會(huì)為每個(gè)已引入的模型 Starter 創(chuàng)建對(duì)應(yīng)的ChatModelBean比如引入spring-ai-openai會(huì)自動(dòng)創(chuàng)建OpenAiChatModel引入spring-ai-ollama會(huì)自動(dòng)創(chuàng)建OllamaChatModel。但問(wèn)題來(lái)了如果項(xiàng)目里同時(shí)有多個(gè)ChatModelBean注入ChatClient.Builder時(shí) Spring 會(huì)由于類型不唯一而報(bào)錯(cuò)。解決辦法就是顯式聲明一個(gè)多模型路由服務(wù)用 Map 按名稱保存所有模型。這個(gè)設(shè)計(jì)本質(zhì)上是“多模型策略模式”后續(xù)切換模型時(shí)業(yè)務(wù)層只面向ChatModel接口編程選誰(shuí)用誰(shuí)由配置或路由邏輯決定。這是 Spring AI 多模型落地最實(shí)用的架構(gòu)。4.2 第二步搞定結(jié)構(gòu)化輸出大模型返回的是自然語(yǔ)言但業(yè)務(wù)系統(tǒng)需要的是FlightReservation、UserInfo這樣的 Java 對(duì)象。Spring AI 的ChatClient.entity()方法幫你做了類型轉(zhuǎn)換。實(shí)際操作時(shí)不要在實(shí)體里放太多復(fù)雜嵌套類型。大模型不是 JSON Schema 解析器越復(fù)雜的類型越容易解析失敗。先用扁平化的 record跑通后再逐步增加字段。4.3 第三步讓模型能調(diào)用工具定義一個(gè)繼承自Component的類在業(yè)務(wù)方法上標(biāo)注Tool描述要寫到“模型一聽(tīng)就懂”的程度。然后用ChatClient.Builder.defaultTools()把工具傳進(jìn)去。驗(yàn)證這一步是否成功最直接的辦法是問(wèn)一個(gè)必須靠工具才能回答的問(wèn)題比如“北京今天天氣怎么樣”。如果模型準(zhǔn)確返回了天氣說(shuō)明函數(shù)調(diào)用鏈路已經(jīng)通了。4.4 第四步接入 MCP引入 MCP Client 依賴在配置里聲明要連的 stdio MCP ServerSpring AI 會(huì)自動(dòng)把這個(gè)服務(wù)器提供的工具合并到模型對(duì)話中。如果公司內(nèi)部有 HTTP 方式的 MCP Server也可以走 SSE 或 WebMVC 配置。接入方式和 stdio 略有不同但核心思想一致遠(yuǎn)程工具被包裝成本地 Tool不需要業(yè)務(wù)代碼感知。4.5 第五步封裝 Skills把“散裝工具提示詞規(guī)則”收斂成一個(gè)高內(nèi)聚的類。Skill 通常是普通 Spring Service內(nèi)部依賴多個(gè) Tool 方法再通過(guò)構(gòu)造器注入到ChatClient。這里的一個(gè)工程建議每個(gè) Skill 類都寫清楚Description讓 Agent 知道這個(gè)技能在什么場(chǎng)景下使用。Agent 判斷“該不該用這個(gè)技能”依賴的就是這個(gè)描述。4.6 第六步用 Agent 編排落地把系統(tǒng)角色、工具列表、Skills、會(huì)話記憶整合到一個(gè)ChatClientBean 里對(duì)外暴露一個(gè)chat(userMessage, conversationId)方法。這個(gè) Bean 就是你的客服 Agent。會(huì)話記憶的實(shí)現(xiàn)方式依賴于ChatClient的id(conversationId)參數(shù)框架會(huì)把同一 id 的多輪對(duì)話保存到ChatMemory。生產(chǎn)環(huán)境應(yīng)該替換成 Redis 或數(shù)據(jù)庫(kù)存儲(chǔ)避免單機(jī)內(nèi)存丟失?,F(xiàn)在整條鏈路就通了。下面用可運(yùn)行代碼過(guò)一遍。5. 完整示例代碼實(shí)現(xiàn)本節(jié)的工程結(jié)構(gòu)如下src/main/java/com/example/ai/ ├── AiApplication.java ├── config/ │ └── ChatClientConfig.java ├── controller/ │ ├── ChatController.java │ ├── StructuredOutputController.java │ └── MultiModelController.java ├── service/ │ ├── MultiModelService.java │ └── OrderQuerySkill.java ├── tool/ │ └── WeatherTools.java ├── agent/ │ └── CustomerServiceAgent.java └── entity/ └── FlightReservation.java5.1 新增 Maven 依賴先更新pom.xml加入 Spring AI BOM 以及所需的 Starter!-- 文件路徑pom.xml -- dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-ollama/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-client-webmvc/artifactId /dependency /dependenciesspring-ai-bom的作用是統(tǒng)一管理所有 Spring AI 模塊的版本號(hào)避免手動(dòng)逐個(gè)對(duì)齊版本。5.2 配置文件在application.yml中配置多模型和 MCP Client# 文件路徑src/main/resources/application.yml server: port: 8080 spring: application: name: spring-ai-demo ai: openai: base-url: ${OPENAI_BASE_URL:https://api.openai.com} api-key: ${OPENAI_API_KEY:} chat: options: model: gpt-4o-mini temperature: 0.7 ollama: base-url: http://localhost:11434 chat: options: model: qwen2.5:7b temperature: 0.7 mcp: client: stdio: servers: filesystem: command: npx args: -y,modelcontextprotocol/server-filesystem,/tmp/data這里最需要注意的地方是args的寫法。Spring AI 的 MCP 配置要求 args 是一個(gè)數(shù)組不同版本對(duì)分隔符的處理略有差異。如果啟動(dòng)時(shí) MCP Server 沒(méi)有連上第一優(yōu)先排查的就是這個(gè)參數(shù)里的逗號(hào)分隔是否正確以及本機(jī)是否安裝并可以使用 npx。5.3 多模型調(diào)用用具體的ChatModel實(shí)現(xiàn)類型做構(gòu)造器注入這樣不會(huì)被多 Bean 問(wèn)題干擾// 文件路徑src/main/java/com/example/ai/service/MultiModelService.java Service public class MultiModelService { private final OpenAiChatModel openAiChatModel; private final OllamaChatModel ollamaChatModel; public MultiModelService(OpenAiChatModel openAiChatModel, OllamaChatModel ollamaChatModel) { this.openAiChatModel openAiChatModel; this.ollamaChatModel ollamaChatModel; } public String chatWith(String provider, String message) { ChatModel chatModel switch (provider) { case openai - openAiChatModel; case ollama - ollamaChatModel; default - throw new IllegalArgumentException(未知模型: provider); }; return chatModel.call(new Prompt(message)) .getResult() .getOutput() .getText(); } }這段代碼的關(guān)鍵點(diǎn)是“面向接口編程”。業(yè)務(wù)方拿到的是ChatModel具體實(shí)現(xiàn)可以隨時(shí)替換。以后新增模型供應(yīng)商只需要增加一個(gè) Starter 依賴再在 switch 里加一行分支。5.4 結(jié)構(gòu)化輸出定義一個(gè)實(shí)體類用 record 保持簡(jiǎn)潔// 文件路徑src/main/java/com/example/ai/entity/FlightReservation.java public record FlightReservation( String flightNumber, String from, String to, String departureTime, String price ) { }不推薦在這個(gè) record 里放LocalDateTime、BigDecimal這類需要強(qiáng)類型轉(zhuǎn)換的字段。大模型返回的 JSON 字符串在解析成本地類型時(shí)一旦格式不匹配會(huì)直接拋出類型轉(zhuǎn)換異常。先用字符串類型跑通是結(jié)構(gòu)化輸出最容易成功的路徑。再寫一個(gè) Controller 展示如何使用// 文件路徑src/main/java/com/example/ai/controller/StructuredOutputController.java RestController RequestMapping(/api/structured) public class StructuredOutputController { private final ChatClient chatClient; public StructuredOutputController(ChatClient.Builder builder) { this.chatClient builder.build(); } GetMapping(/parse-reservation) public FlightReservation parseReservation(RequestParam String text) { return chatClient.prompt() .system(你是航班信息解析助手。請(qǐng)從用戶文本中抽取航班編號(hào)、出發(fā)地、目的地、出發(fā)時(shí)間和價(jià)格。) .user(text) .call() .entity(FlightReservation.class); } }5.5 自定義 Tools定義一個(gè)天氣工具類。這是本文最典型的Tool用法// 文件路徑src/main/java/com/example/ai/tool/WeatherTools.java Component public class WeatherTools { Tool(description 根據(jù)城市名稱查詢當(dāng)前天氣) public String getWeatherByCity(String city) { // 實(shí)際項(xiàng)目里替換為天氣服務(wù) API 調(diào)用 if (北京.equals(city)) { return 北京晴25℃東南風(fēng)2級(jí); } return city 多云22℃東北風(fēng)1級(jí); } Tool(description 根據(jù)城市名稱查詢未來(lái)三天天氣預(yù)報(bào)需要傳入城市和天數(shù)) public String getForecast(String city, int days) { return city 未來(lái) days 天晴轉(zhuǎn)多云最低18℃最高27℃; } }注意Tool的描述寫清楚“需要傳入什么參數(shù)”這直接影響模型生成參數(shù)的成功率。5.6 MCP 客戶端接入前面已經(jīng)在application.yml里配置了 filesystem 這個(gè) stdio 服務(wù)。當(dāng) Spring AI 檢測(cè)到 MCP Client 依賴時(shí)會(huì)自動(dòng)連接該服務(wù)并把它暴露出的工具合并到工具注冊(cè)表。如果不想使用 stdio 方式也可以把spring-ai-mcp-client-webmvc換成或互補(bǔ)使用 HTTP 方式spring: ai: mcp: client: url: http://localhost:8081url方式適合連接已經(jīng)部署為獨(dú)立服務(wù)的 MCP Server。這里強(qiáng)調(diào)一個(gè)重要過(guò)程MCP 工具是“動(dòng)態(tài)發(fā)現(xiàn)”的。你在代碼里看不到 filesystem 工具的 Java 類但它會(huì)在運(yùn)行期被注冊(cè)成一個(gè)ToolCallback。排查 MCP 工具是否生效看啟動(dòng)日志里是否打印了 MCP 工具調(diào)用的注冊(cè)信息即可。5.7 Skill 定義用一個(gè)高內(nèi)聚的 Skill 類封裝“訂單查詢”能力。它不僅包含工具方法還包含面向 Agent 的描述和參數(shù)校驗(yàn)邏輯// 文件路徑src/main/java/com/example/ai/service/OrderQuerySkill.java Service public class OrderQuerySkill { Tool(description 根據(jù)訂單號(hào)查詢訂單狀態(tài)和物流信息訂單號(hào)為數(shù)字字符串) public String queryOrderStatus(String orderId) { if (orderId null || !orderId.matches(\\d{6,})) { return 訂單號(hào)格式不正確; } // 實(shí)際項(xiàng)目里注入 OrderRepository 查詢數(shù)據(jù)庫(kù) return 訂單 orderId 狀態(tài)已發(fā)貨預(yù)計(jì) 3 天內(nèi)送達(dá); } Tool(description 根據(jù)用戶手機(jī)號(hào)查詢最近三個(gè)月訂單列表) public String listRecentOrders(String mobile) { if (mobile null || !mobile.matches(1\\d{10})) { return 手機(jī)號(hào)格式不正確; } return 最近訂單2026030101已簽收、2026021502已發(fā)貨; } }所謂 Skill 和普通 Tool 類的差別更多體現(xiàn)在設(shè)計(jì)意圖上。一個(gè) Skill 可以包含多個(gè) Tool并負(fù)責(zé)它們之間的業(yè)務(wù)規(guī)則。Agent 只需要注入這一個(gè)類就能獲得整套能力。5.8 Agent 編排最后把所有能力整合到一個(gè)客服 Agent 中// 文件路徑src/main/java/com/example/ai/agent/CustomerServiceAgent.java Component public class CustomerServiceAgent { private final ChatClient chatClient; public CustomerServiceAgent(ChatClient.Builder builder, WeatherTools weatherTools, OrderQuerySkill orderQuerySkill) { this.chatClient builder .defaultSystem(你是企業(yè)智能客服回答要簡(jiǎn)潔、準(zhǔn)確、友好。當(dāng)用戶詢問(wèn)天氣時(shí)必須使用天氣工具 當(dāng)用戶查詢訂單時(shí)必須使用訂單查詢技能不要編造訂單數(shù)據(jù)。) .defaultTools(weatherTools, orderQuerySkill) .build(); } public String chat(String userMessage, String conversationId) { return chatClient.prompt() .id(conversationId) .user(userMessage) .call() .content(); } public String chatWithSystem(String systemPrompt, String userMessage, String conversationId) { return chatClient.prompt() .system(systemPrompt) .id(conversationId) .user(userMessage) .call() .content(); } }sytem提示詞里明確寫了“必須使用天氣工具”“不要編造訂單數(shù)據(jù)”這種約束是 Agent 工程質(zhì)量的重要來(lái)源。模型有概率忽略模糊指令但你把指令寫進(jìn)系統(tǒng)提示詞輔助工具描述清晰成功率會(huì)大幅提高。再提供一個(gè)入口 Controller// 文件路徑src/main/java/com/example/ai/controller/ChatController.java RestController RequestMapping(/api/agent) public class ChatController { private final CustomerServiceAgent customerServiceAgent; private final MultiModelService multiModelService; public ChatController(CustomerServiceAgent customerServiceAgent, MultiModelService multiModelService) { this.customerServiceAgent customerServiceAgent; this.multiModelService multiModelService; } GetMapping(/chat) public String chat(RequestParam String message, RequestParam(defaultValue default) String conversationId) { return customerServiceAgent.chat(message, conversationId); } GetMapping(/multi) public String multi(RequestParam String provider, RequestParam String message) { return multiModelService.chatWith(provider, message); } }到這里一個(gè)支持多模型、自定義 Tools、MCP 外部工具、Skill 能力封裝、多輪會(huì)話記憶的 Agent 原型已經(jīng)完整落地。下面看看怎么驗(yàn)證它。6. 運(yùn)行結(jié)果與效果驗(yàn)證啟動(dòng)項(xiàng)目mvn spring-boot:run如果本地Ollama已經(jīng)拉取了qwen2.5:7b啟動(dòng)日志里會(huì)同時(shí)出現(xiàn) OpenAI 和 Ollama 的模型初始化信息。MCP Client 啟動(dòng)時(shí)會(huì)嘗試執(zhí)行npx -y modelcontextprotocol/server-filesystem /tmp/data日志里會(huì)出現(xiàn) MCP Server connected 之類的記錄。依次驗(yàn)證幾個(gè)核心能力基礎(chǔ)對(duì)話curl http://localhost:8080/api/agent/chat?message你好conversationIdtest-001預(yù)期輸出一句問(wèn)候語(yǔ)說(shuō)明ChatClient鏈路正常。結(jié)構(gòu)化輸出curl http://localhost:8080/api/structured/parse-reservation?text幫我訂明天從北京到上海的MU5111航班價(jià)格850元提醒我上午十點(diǎn)出發(fā)預(yù)期返回 JSON{flightNumber:MU5111,from:北京,to:上海,departureTime:10:00,price:850元}工具調(diào)用聯(lián)動(dòng)curl http://localhost:8080/api/agent/chat?message北京今天天氣怎么樣conversationIdtest-001如果模型沒(méi)有調(diào)工具可能只會(huì)回答“我無(wú)法獲取實(shí)時(shí)天氣”。如果正確調(diào)用了WeatherTools.getWeatherByCity會(huì)返回“北京晴25℃”等相關(guān)信息。多輪會(huì)話驗(yàn)證curl http://localhost:8080/api/agent/chat?message我的手機(jī)號(hào)是13800138000幫我查一下最近訂單conversationIdtest-001 curl http://localhost:8080/api/agent/chat?message再看看第一單的物流conversationIdtest-001第二次提問(wèn)依賴第一次的上下文。如果返回結(jié)果包含第一單的訂單號(hào)或狀態(tài)說(shuō)明會(huì)話記憶已生效。判斷 Agent 是否正常不能只看是否返回結(jié)果還要看它是不是在正確的步驟調(diào)用了正確的工具。建議在本地開(kāi)發(fā)時(shí)打開(kāi) Spring AI 的調(diào)試日志logging: level: org.springframework.ai: DEBUG這樣可以在控制臺(tái)看到完整的工具調(diào)用鏈模型請(qǐng)求 → 工具調(diào)用 → 工具返回 → 模型最終回答。如果失敗優(yōu)先看這幾個(gè)位置啟動(dòng)階段MCP Server 是否連接成功Ollama 服務(wù)是否可用調(diào)用階段模型返回是否超時(shí)工具階段Tool方法是否有日志返回內(nèi)容是否被模型正確消費(fèi)。7. 常見(jiàn)問(wèn)題與排查思路問(wèn)題現(xiàn)象可能原因排查方式解決方案啟動(dòng)報(bào)錯(cuò)說(shuō)存在多個(gè) ChatModel Bean同時(shí)引入了多個(gè)模型 Starter自動(dòng)配置創(chuàng)建了多個(gè)同類型 Bean查看啟動(dòng)日志中 Bean 創(chuàng)建記錄用Qualifier或顯式配置指定使用的模型或封裝多模型路由服務(wù)請(qǐng)求時(shí)模型長(zhǎng)時(shí)間無(wú)響應(yīng)模型 API Key 無(wú)效、網(wǎng)絡(luò)不通、本地 Ollama 沒(méi)有啟動(dòng)先 curl 模型供應(yīng)商接口查看 Ollama 是否在 11434 端口監(jiān)聽(tīng)修正 API Key / base-url啟動(dòng) Ollama 并確認(rèn)模型已拉取工具沒(méi)有被調(diào)用模型直接瞎回答Tool的描述不夠清晰或 system prompt 沒(méi)有強(qiáng)制要求檢查工具描述打開(kāi) DEBUG 日志確認(rèn)模型請(qǐng)求里是否包含 tool_calls重寫描述加入“必須使用工具回答”等約束結(jié)構(gòu)化輸出解析失敗拋類型轉(zhuǎn)換異常模型返回文本格式不匹配 Java 類型查看實(shí)際返回的 JSON簡(jiǎn)化實(shí)體字段統(tǒng)一使用 String逐步增加字段MCP Server 連接失敗npx 未安裝、args 參數(shù)格式錯(cuò)誤、服務(wù)端地址不通在終端手動(dòng)執(zhí)行npx -y modelcontextprotocol/server-filesystem /tmp/data檢查啟動(dòng)日志 MCP 部分修正 args 寫法安裝 npx改用可訪問(wèn)的 HTTP MCP Server多輪對(duì)話上下文丟失conversationId傳遞不一致或沒(méi)有配置持久化 ChatMemory檢查每次請(qǐng)求是否傳同一個(gè) id查看內(nèi)存存儲(chǔ)的日志用 Redis/數(shù)據(jù)庫(kù)實(shí)現(xiàn) ChatMemory統(tǒng)一會(huì)話 id 生成規(guī)則本地模型不支持 function callingOllama 拉取的模型版本較老或本身不支持工具調(diào)用查詢模型文檔確認(rèn)是否支持 tools更換支持 function calling 的模型例如qwen2.5系列這些問(wèn)題是獨(dú)立開(kāi)發(fā)者在完整跑通鏈路時(shí)最容易遇到的。嚴(yán)格按照排查路徑走大多數(shù)問(wèn)題會(huì)在十分鐘內(nèi)定位。8. 最佳實(shí)踐與工程建議8.1 模型接入層統(tǒng)一路由隔離供應(yīng)商不要把模型供應(yīng)商的 SDK 直接散落在業(yè)務(wù)代碼里。所有模型訪問(wèn)統(tǒng)一走ChatModel接口模型路由邏輯收斂到一個(gè)服務(wù)中。這樣才能做到“線上用商業(yè)模型、測(cè)試用本地模型”而不修改業(yè)務(wù)代碼。8.2 提示詞管理模板化、版本化System prompt 不要散落在 Controller 里。建議用提示詞模板文件配合 Spring 的Resource加載放到系統(tǒng)資源目錄下。提示詞實(shí)際上是需要評(píng)審和版本管理的“代碼”它直接影響模型行為質(zhì)量。8.3 工具安全最小權(quán)限原則Tool方法本質(zhì)上是把內(nèi)部能力暴露給外部模型調(diào)用。必須遵守最小權(quán)限原則工具方法只做自己該做的事不要聲明一個(gè)大而全的方法例如“執(zhí)行任意 SQL”。所有涉及數(shù)據(jù)庫(kù)、文件、外部 API 的工具都要做參數(shù)校驗(yàn)就像對(duì)待用戶輸入一樣。8.4 會(huì)話記憶生產(chǎn)環(huán)境不要用默認(rèn)內(nèi)存實(shí)現(xiàn)ChatClient的默認(rèn)記憶是內(nèi)存級(jí)的應(yīng)用重啟即丟失。生產(chǎn)環(huán)境應(yīng)該把ChatMemory替換為 Redis 或數(shù)據(jù)庫(kù)實(shí)現(xiàn)。會(huì)話 ID 必須由后端統(tǒng)一生成不要信任前端傳入的任意 key否則容易出現(xiàn)會(huì)話串臺(tái)問(wèn)題。8.5 MCP 生命周期管理MCP stdio 服務(wù)本質(zhì)上是啟動(dòng)一個(gè)子進(jìn)程它的生命周期需要被關(guān)注。不要在生產(chǎn)環(huán)境用 npx 臨時(shí)拉取 MCP Server盡量構(gòu)建成獨(dú)立服務(wù)用 HTTP 方式接入這樣便于監(jiān)控和擴(kuò)縮容。8.6 Agent 可觀測(cè)性Agent 是一個(gè)多步?jīng)Q策系統(tǒng)每一步都可能出錯(cuò)。生產(chǎn)環(huán)境必須記錄用戶問(wèn)題原文模型是否發(fā)起了工具調(diào)用調(diào)用了哪個(gè)工具、參數(shù)是什么工具返回結(jié)果最終回答內(nèi)容。這些日志鏈路是排查問(wèn)題的唯一依據(jù)。建議在Tool方法和 Agent 調(diào)用層都加上結(jié)構(gòu)化日志而不是只靠框架默認(rèn)日志。8.7 成本與限流多模型配置帶來(lái)成本控制能力的同時(shí)也帶來(lái)新的風(fēng)險(xiǎn)工具循環(huán)次數(shù)過(guò)多會(huì)導(dǎo)致 Token 消耗膨脹。建議給 Agent 調(diào)用設(shè)置超時(shí)時(shí)間、最大工具調(diào)用輪數(shù)并針對(duì)不同模型配置不同的限流策略。8.8 版本升級(jí)策略Spring AI 版本迭代快API 偶有調(diào)整。升級(jí)前先看官方遷移指南并且保留一個(gè)小范圍的兼容層。比如你寫一個(gè)AgentChatService包裝ChatClient未來(lái)內(nèi)部 API 變化時(shí)只改這個(gè)類業(yè)務(wù)層不受影響。9. 總結(jié)與后續(xù)學(xué)習(xí)方向Spring AI 2.0 給 Java 生態(tài)帶來(lái)的價(jià)值不只是一套可以調(diào)大模型的 Starter而是一整套符合 Spring 編程模型的 AI 應(yīng)用開(kāi)發(fā)范式。本文把這條鏈路完整拆解了一遍多模型解決了供應(yīng)商鎖定問(wèn)題Tool讓模型具備調(diào)用業(yè)務(wù)方法的能力MCP 把外部工具生態(tài)標(biāo)準(zhǔn)化Skills 讓能力封裝更貼近業(yè)務(wù)Agent 則把這一切組合成了可交付的智能服務(wù)。建議你按順序完成三個(gè)練習(xí)先跑通多模型切換和結(jié)構(gòu)化輸出再實(shí)現(xiàn)一個(gè)包含兩個(gè)Tool的客服助手最后接入一個(gè)外部 MCP Server例如文件系統(tǒng)或數(shù)據(jù)庫(kù)服務(wù)。這三步做完Spring AI 2.0 的主要能力就算真正掌握。接下來(lái)值得深入的方向包括RAG 與向量數(shù)據(jù)庫(kù)的集成、Agent 與業(yè)務(wù)流程引擎的結(jié)合、基于 MCP Server 暴露公司內(nèi)部服務(wù)給 AI 應(yīng)用、以及多 Agent 協(xié)作模式。每一條都比單純調(diào)大模型接口更有工程價(jià)值也是 Java 工程師在 AI 時(shí)代不可替代的底牌。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天综合亚洲综合| 色官网在线| 中文字幕123| 欧美 亚洲 大香| 久久婷婷苹果| 国产欧美一区激情交| 99蜜桃臀久久久欧美精品网站| 午夜在线播放| 99草精| 亚洲中字幕日本一区二区三区| www.色婷婷.com| 99热国产精品| 欧美熟爽综合| 九九AV| 91在线精品| 色婷婷综合久久中文字幕雪峰| 超碰在线在公开超碰在线在公开| 丰满岳乱妇一区二区三区| 久久精彩视频| 精品人妻一区二区免费蜜桃视频| 五月天婷婷综合网| 天天综合97| 亚洲中文字幕精品久久久久久直播| 色色综合97| 国产Aα| 久久999久| 377p欧洲日本亚洲大胆| 啊啊啊在线看| 激情99| 日本中文熟女视频| 美国久久一二三四| 免费av在线播放二区| 日本天天吊| 成人小说视频在线精品欧美| 日韩欧美中文字| 中文一区在线视频| 四虎影视欧美| 国产成人啪一区二区| 色欲蜜臀AV| 极品一区二区三区免费| 乱色视频中文字幕| 十八禁视频一区二区| 97青娱乐超碰久久| 乱伦av国产| 91亚.色| 日本丝袜人妻内射| 人妻蜜桃臀| 五月婷婷综合在线| 成人精品无码| 性爱AV天堂| 色色色综合网| 天天看,天天做| 欧美熟妇色| 玖玖97综合| 国产激情综合| 黑人嘿嘿嘿超爽免费视频| 亚洲丝袜少妇在线| 91爱做| 91一区二区| 秋霞无码av鲁丝片一区| 亚洲欧美在线丝袜| 欧美色日| 超碰98综合网| 色原狠狠天天天| 伊人久久国产免费观看视频| 国产www色在线观看| 国产一区二区二区按摩精品啪视频| 91 亚洲情侣偷拍 久久| 欧美日韩少妇色情| 超碰欧美在线欧美| 激情文学小说一区二区| 日日爽熟女| 伊人网综合在线视频| 日韩免费看黄片| 激情无码日韩| av天堂手机版追回| 日本一天色道久久久精品视频| 欧美论理片| 久久精品一区一起草| 欧美成人一级麻豆| 91碰超| 岛国激情视频在线观看| 国产美女mm131爽爽爽爽| 大香蕉综合| 国产日韩久久| 久久久一区二区三区三州| 综合欧美日本三级| 99热综合在线| 熟女一区二区三区四区| 色欲Av人妻精品一区二| 久久人妻视频网| 亚洲精品欧美专业| 亚州黄站| 大JI巴好深好爽又大又粗视频| 欧亚无码视频| 亚洲无吗在线视频| 艹少妇网站| 日韩精品-原创伙伴| 亚洲,日韩,欧美,成人播放| AV免费在线播放一区| 中国国国产一级特黄毛片| 亚洲人在线成线成人| 亚洲黄网在哪免费看| 五月天激情小说网| 撸无码不卡免费视频| 八戒午夜福利理论片| 五月婷在线| 91中出视频| 天天日天天色| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 日韩无码专区| 亚洲九九视频| 亚洲精品一二三四区| 亚洲欧洲日韩中文字幕一区| 一起草精品人妻| 亚洲影院小综合| 欧美日韩精品青青| 五月天精品| 大香蕉五月天婷婷| 亚洲天天更新| 色蜜AV| 性生活性生大爱77AV国产| 综合久久9| 日韩中文字幕熟妇人妻| 老司机久久| 国产极品99热在线播放69| 超碰在线在公开超碰在线在公开| 色婷婷电影网| 亚洲系列第一页| 97超级色碰碰| 欧美男人一区| 欧美人与动性人交a| 日本久久综合| 婷婷五月天福利| 女人精品内射国产99| 男啪女色黄无遮挡免费观看| 亚洲无码AV九九九| 欧美日韩在线小说| 亚洲91亚洲| 国产精品一区二区三区,亚洲综合| 少妇熟女视频一二三区| 五月丁香啪| 日本一级特级毛片视频| 校园春色AV天堂| 亚洲有薄码区日本系列中文字幕| 97超碰色色| 性色一线| 98色网| 国产午夜无码片在线观看影视| 九九九九九九综合| 免费看污网站| 丁香五月天社区| 欧美特大黄一级片片免费| 亚洲欧洲日本精品中文a∨| 欧美激情亚洲| 韩国三级色呦呦| 久久久久久AⅤ无码免费肉站 | 亚洲精品乱码线路中文字幕| 黄色av一区二区在线| 日韩欧美加勒比| 欧美 亚洲 另类 综合| 综合色久欲| 亚洲欧美精品国产一区二区| 四虎精品永久在线观看| 亚洲麻豆18发?| 青青草日逼视频| 999在线电影香蕉| 91N欧美| 五月天婷婷基地| 老司机射| 色婷婷六月| 国产原创剧情在线丝袜| 久草五月| 夜夜高潮夜夜爽高清视频一| 日曰骚久久精品| 欧美色自拍| 精品一区二区三区四区外站| 中文字幕第页| 91九色丨国产丨爆乳| 超碰九九| 亚洲少妇在线影音| 精品高清av中文字幕| 久久精品国产亚洲妲己影视| 欧美激情 一区| 人人妻人人爽一区二区三区| 国产日韩怡红院| 91欧美色| 国产操逼逼网| 久久久中文| 久妇网| 婷婷久久网| 国产蜜臀在线| 亚洲第一页色| 2026国产精品视频| 日日97| 国产激情在线| www.大香| 日本A级视频| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 水澄无码AV| 很狠操| 亭亭在线资源| 人人操人人色网| 强奸乱伦大香蕉网| 国产成人综合网| 久久精品中文字幕女同| 中文字幕一区二区三区蜜臀| 91美女高潮| 强奸乱伦AV一天堂网| 日日日啊啊啊| julia国产在线| 精品成人无码| 婷婷五月天无码 | 亚洲国产美女久久久久| 五月天色色色| 97欧美日韩精品| 国产熟女完整版中字 | 欧美日韩97| 激情视频网址| 91精品人妻一品二品三品| 免费精品中文字幕| 国产美女裸体秘 永久无遮挡| 色色婷婷丁香| 久久岛国| 亚洲Av噜噜一区二区三区妖精| 日韩av在线精品观看| 欧美精品另类人妖xxxx| 欧美日韩在线小说 | 天啪| 中文字幕日韩人妻视频一区二区三区交换夫妻 | 蜜臀av网址| 视频在线观看免费一区二区三区| 欧美色图 人妻| 黄色片,com| 国产免费一区| 色久综合| 无码 黑人一区二区三区| 亚洲巨爆乳一区二区三区四季网| 97人人中文网| 欧美不卡五十路| 亚洲天堂第一页| 亚洲精品第一| 国产呦精品系列在线观看| 一区二区三区蜜桃成人撸久久东京热 | 亚洲97在线观看| 五月天开心网| 高清无码人妻久久久一区二区三区aⅴ| 91操人| 日韩无码精品综合久久| 国产少妇内射| 久久亚洲色图中文字幕| 1024亚洲中文字幕久在线看片你懂的 | 国产AV天美传媒一区二区三区 | 有码专区最新中文字幕有码| 国产五码丝袜屁眼| juliaann欧美丝袜办公室| 牛牛aV| 色逼综合| 大香蕉日韩欧美| 91人人爽人人爽| 色综合天天| 欧美资源| 日韩有码中文字幕女同性恋 | 国产精品午夜福利视频| 日韩伦理视频| 伦伦成年午夜免费视频| 亚卅熟女乱色| 国产黄色视频久久| 亚洲精品自拍| 天天操人人操狠狠插| 日本三级A片网站com| 国产乱色国产精品免费视| 日韩操啪| 一级人妻性爱视频| 国产精品久久久久无码Av网曝门| 久久精品国产亚洲AV先锋| 这里都是精品| JuliaAnnXXX888| 99只有精品| 日日夜夜狠狠| 丁香五月久久| 久久久久久九九九九-美女久久久久久久-成人AV | 日产狠狠干| 亚洲A色| 国产丰满少妇久久久精品影院| 久久精品一区| 综合一区二区影视| 国产成人精品网站| 欧美性第一页| 欧美成人A√在线一区二区| 国产不良强奸视频免费看| 在线天堂999| 亚洲熟女乱色一区二区三区久久久| 欧美日韩人妻少妇 一区二区三区| 欧美日综合| 精品国产国产AV| 91网站18| 亚洲熟妇乱女区二区三区| 亚洲欧美一区二区不卡视频播放| 91久久久视| 78精品| 欧美老妇曰批的视频| 少妇毛片久久| 性欧美第一页| 欧美日韩国产高清在线一二三区 | 91人妻少妇| 国产视频三区四区| 天天做天天爱| 日本国产二线女色| 亚洲一区二区三区麻豆传媒| 天天弄天天操| 欧美精品69性爱| 玖玖超碰熟| 狼人久草| 日韩性爱1级片视频| 久久人| AV中文字幕剧情1区2区3| 97国产色综合| 欧美久久人人网| 欧美大波激情xxxx| 欧美激色| 天天天乱色综合全| 丁香六月婷| 自慰白浆在线观看| 日本午夜久久电影| 自偷自拍的亚洲视频| 精品美女少妇一区二区三区| 私色综合网| 再深点灬舒服灬太大了好硬好爽| 久久三| 爽极品影院| 国产高清MV操逼视频| 日小BB小视频| 欧美大香蕉久| 强奸乱伦免费网站| 无遮挡男女激烈动态图| 欧美伊人久久综合网| 中文字幕人妻丝袜乱一区三区| 大香蕉中文网| 欧美激情综合| 日韩av电影成人在线| 男人的天堂va| 免费精品无码一级毛片牛牛影视| 亚洲密乳AV| 思思视频免费看网站| 性一级黄色录像片网站导航| 狠狠入| 久久老熟女| 偷拍 欧美 日韩| 综合 欧美 亚洲 日本| 国产日韩手机视频在线| 99青青草国产视频| 大香蕉伊人75| 美欧色综合| 久久精品人妻一区| 黄色片A级一区二区三区| 亚洲 日韩 丝袜 熟女 变态| 国产人伦a片信息免费片| 国产欧美精选自拍一区| 九九热精品视频在线观看| 激情文学网伊人| 樱花草社区www中国| 97超碰总站| 女人久久久| 国产多人在线观看视频| 狠狠色综合网| 粉嫩AV一区夜夜嗨| 国产三级中文字幕粉嫩 | AV综合中文字幕干| 国产SV一线| 日日噜噜夜夜久久亚洲一区二区| 97av在线观看| 国产一区二区av综合| 国产女上位好爽在线| 九九热精彩视频| 亚洲日韩美女丝袜美腿人妻视频| 国产欧美日本亚洲精品 | 国产和美国毛片| 热99这里有精品综合久久| 成年人黄色| 精品国产一级久久| 日本片日本片祼观看网站在线看中文版网页在线看| 91偷拍欧美亚洲| 亚洲在线综合| 九九碰九九爱97超碰| 在线播放成人网站| 欧美色自拍| 好属操| 国内毛片婷婷六月色| 久草男人天堂| 无码丰满熟妇一区二区浪潮AV| 久久双插| 骚女高跟AV在线| 国产亚洲女v在线观看| 东北女人性交| 熟妇一区,二区,三区。| 91网亚洲| 国产一区二区精品久久99| 亚欧高清| 丁香六月综合激情| 欧美在线啊啊| 高清国产成人无码| 日韩偷拍色图| 久久9免费视频| www.狠狠| 偷拍导航视频网站| 色色婷婷丁香| 99久久久无码国产精品性啊聊| 色综合色色| 9久9久| 日本一区二区三区欧美日韩中文字幕| 久久欧洲| 日韩一区二区三区四区五区 | 翔田千里爆乳巨臀无码| 欧美天天综合站| 日本色婷婷| 久久精品国产Aⅴ| 色男人色天堂东京热| 熟女被操视频网址| 13小男生GAY自慰脱裤子| 久久久男人的天堂| 美女尤物福利视频| 欧美一级黄色18片免费看| 青青在线视频免费| 欧美视频激情久久久久久| 少妇人妻太紧太深av| 欧美天天综合在线| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 色好看av| 婷婷五月成人| 日韩AV无码中文一区二区| 亚洲色图图片| 97在线观看免费视频l| 日韩精品区二区三区不卡| 欧美性爱无码一区二区三区| 97日韩| 色综合 加勒比| 91网站视频在线观看| 伊色综合天堂色97| 97人人草| 国产精品视频精品一二| 午夜激情成人在线观看| 天天综合-91入口| 午夜综合在线| 精品四五区| 天天日天天舔天天喷天天射| 欧美性爱在线无码| 久久精品亚洲成a人天堂| 91人精品妻入口| 蜜臀久久99精品久久久久久无删减 | 久久精品一区二区三区蜜桃臀| 蜜奶av| 久久久久九九九九| 欧州91高潮| 久这精品中文在线观看视频| 美女t无毒不卡不卡| 中文字幕一区二区三区蜜桃视频| 无码99| 性色中出| 欧美的精品的视频| 日韩熟妇二区| 中文自拍欧美影视| 欧洲亚洲少妇| 激情专区综合| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 少妇一级无码精品| 中文字幕日韩专区精品系列| 91伊人久| 超碰91在线| 精品性爱一二三区| 五月天精品| 偷窥自拍亚洲色图| 亚洲另类久操网| 神马久久久久久久久久| 大香蕉92| 久久久偷拍| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 天天肏夜夜肏| 骚货| 超碰97在线色男人??| 东京太热男人的天堂久久久| 好涩综合| 欧美日韩免费性爱| 免费观看欧美日韩操逼视频| 天天享受天天看| 亚洲伊人青青草| 亚洲色图欧美一区二区不卡| 亚洲国产一区二区入口| 国产人妻天天干精品| 国产日韩美女小穴视频网站不卡| 青青草视频导航官网| 天天碰操中国年青熟妇| 婷婷色综合欧美日韩| 97国产色综合| 欧美,亚洲,日韩,v,天堂,手机在线观看| 国产自啪精品视频网站黑丝| 东亚亚洲无码高清| AV中文字幕三四五| 国产农村妇女一区二区| 国产欧美日韩女同性恋ww喷水精品| 久久久久久久久久久999| 久干9操| 女生看匆91网站| 性爱乱伦网址| 久久精品店| 东京热大香焦| 欧美一级美片在线观看免费| 97婷婷色| 色呦呦呦在线观看视频| 欧洲熟妇xxXx欧美老妇裸体 | 国产一级不卡在线观看| 日欧美色| 亚洲自拍天堂| 99re6在线视频精品免费完整版安卓版| 天天夜夜久久| 麻豆a'v电影| 日本阿v天堂在线观看| 91丨国产丨白浆秘 洗澡动漫| 女优视频第10页| 偷拍网站久久男女男| 日韩操逼性鲍| 亚洲综合草草| 上床啊啊啊| 国产三级中文有码在线视频| 国产亚洲欧洲在线观看| 无码久久国产 | 在线看片国产精品每日更新| a人片中文字幕一区二区| 91久久免费视频互動交流| 嗯嗯嗯啊啊啊操的我好爽| 欧美高清16| 久热无码| 色婷婷国产精品一区在线观看| 婷婷综合激情| 精品人妻丰满熟妇一区二区三| 亚洲激情综合| 日韩成人无码| wuyechaopeng| 骚逼高潮久久精品| 丝袜美腿制服人妻二区中文字幕| 青青青青青手机视频| 色九九九综合| 欧美熟女少妇| 狠狠色婷婷777| 一区二区免费电影久久| 加勒比99999| 欲色啪| 欧美呦呦性爱| 97视频免费播放| 天天拍天| 素人无码中文字幕| 夜夜騷av、一區二區| 久热这里| 激情综合五月| 国产精品99久久久www| 日日操免费视频| 久久综合九色综合欧洲98| 中出在线视频| julia ann久久| 久久草视频污视频| 熟女欧美日韩综合婷婷| 91老司机在线视频免费观看| 久久精品小视频| 青娱乐日韩无码| 国产成人自拍视频在线| 国产偷拍自拍在线视频| 成人av影院在线观看| 成人av毛片在线观看| 97精品久久| 国产在线观看一区二区三区| 91色图| 欧美激情久操网| 张柏芝国产一区在线观看| 国产视频第二页| 日韩人妻少妇中文字幕| 久久久com| 亚洲国产一区二区三区在线 | 天天插天天操天天摸天天射天天看| 欧美色图成人网一区二区 | 亚洲麻豆av一区二区| 久久日韩精品一区二区| 啪啪啪东京| 日韩成人精品视频自拍| 黑人黄片在线免费观看| 91粉芽高清在线一区二区| 久久精品人体AV| 亚洲欧综合另类无码一区| 97超碰磁| 污污汅18禁网站在线永久免费观看 | 夜夜嗨一区二区三区直播内容| 日韩操啪| 欧美亚洲玖玖玖| 精品成人久久久人人亚洲| 你想操日本小逼吗| 亚州综合AⅤ| 日韩激情毛片一级久久久| 日韩乱码Av| 美女久久久| 精品精品精品| 蜜臀久久久99久久久久 | 亚洲高清视频在线观看| 丰满人妻一区二区三区| 日韩人妻资源在线看| 欧亚 另类 久| 99热精品在线观看| 国产一区在线看| 欧美综合骚| 日本视频在线中文字幕| 五月久久HDAV| 最近2018中文字幕在线高清第一页| 婷婷三区| 日本高清视频xxxx| 丝袜美腿射精91| 久久久免费一级黄片| 自怕偷自怕亚洲精品| 欧美色66| 东北女人性交| 91久久青青草原精品| 激情无码日韩| 老女人爆菊| 中文字幕免费看| 亚洲av噜噜噜噜噜噜| 国产尤物AV尤物在线观看不卡| 男人的天堂在线有码| 夜夜狠狠躁日日躁色视频| 中文字幕黄色一起草| 巨爆乳一区二区爆乳区| 丝袜AV一二三区| 色九九九九九九| 亚洲av综合色区图片亚洲| 激情文学网伊人| 99热99re6国产在线播放| www.色吧5.com| 嗯嗯嗯好爽| 亚州色图欧美色图| 日韩欧美综合激情| 九九九九九九成人| 欧美黄色手机在线观看| 91大学精品激情戏| 久久精品女同亚洲女同13| 无码外流操逼视频| 中文字幕91综合| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 道久久五香丁月婷婷激情综合| w w w.久久精品| 色九月| 久久久成人免费av电影| 日本免费一级AAA大片器| 久久久久久性爱视频| 欧美天天干| 精品久热| 亚洲激情在线| 色情综合| 天天肏夜夜肏| AV综合中文字幕干| 欧美 日韩第一性色| 99久久e免费热视| 试看福利| 色色色色日本| 中文字幕人乱码中文字的预防方法| 一级性爱视频免费在线| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 少妇一级婬片免费放一级a性色.| 性色中出| 国产精品免费1区2区视频| a男人的天堂| 欧美成人免费在线观看| 精品一区二区三区最新| 无码久久国产| 久久超碰免费的| heyZO天然素人无码AⅤ专区| 精品乱子一区二区三区99| 香蕉国产精品麻豆亚洲欧美日韩 | av大香蕉网站| 牛牛操视频逼| 亚洲精品国产av天美传媒| 成人精品一区二区91毛片不卡| WWW.加勒比人妻一区不卡.com| 成人无码电影在线观看网| 欧美色日本| 亚洲成人免费中文字幕| 亚洲精品久久一区二区三区蜜桃臀| 最新中文字幕精品在线| 中出在线视频| 丁香激情网| 黑人综合网| 国产精品乱码久久久久久久久久久久| 影音先锋每日最新资源在线观看 | 最新av在线| 国产一级作爱毛片| 97ai亚洲| 少妇蜜汁| 国产东北女人在线视频| 天天天堂影视日韩亚洲91| 天堂8在线新版官网| www欧美91| 精品久久久久瑟瑟| 精品久久久久久中文| 国产精品午夜福利| 日韩在线女优天天干| 高潮毛片无遮挡高清免费| 亚洲日韩黑丝| 青青草密桃在线播放| 91东京热男人的天堂| 久久视频,这里只有精品 | 九九探花视频在线观看| 久久久久久久| 欧美在线大香蕉| 成人性爱全视频观看| 日本不卡一二区| 亚州综合电影| 日韩中文字幕在线视频观看| 日韩射精| 青青草成人视频在线观看二区| 99热只有这里有精品| 欧在线一二区| 男人的天堂2000| www.99热| 免费公开人人操| 97在线观| 亚洲日产专区婷婷| 亚洲色吧网| 日韩精品免费高清视频在线| 色逼综合| 久热大香蕉网站| 国产天美欧美| 人妻精品一区二区在线| 97精品久久| 日本久久久精品电影| 99自拍B亚洲| 超碰成人国产| 日韩无码视频黄色| 男人的天堂VA| 青青青艹在线视频| 色综合美国| 干婷婷综合网| 成人97人人超碰人人| 97视频播放| 日韩视频小说在线观看| 97人肏| 亚洲图片偷拍视频区| 青娱乐福利99| 日韩精品-原创伙伴| 天天综合网~91入口| 久九干| 啪啪啪大香蕉| 亚洲色 国产 欧美 日韩| 亚洲欧美另类激情小说| 四虎精品永久在线观看| 天天看高清麻豆| 久久久久久亚洲精品中文字幕人妻| 啪啪啪精品视频| 欧美性生活男人的天堂| 97亚洲在线| 欧美另类天堂| 啊啊啊啊好大好硬啊啊啊啊啊| 老女人日韩美91| 大香蕉AV在线| 国产亚洲精品第一最新| 99国产精品视频尤物| 婷婷超| 日本久久超碰| 欧美高清91| 91九色丰满高潮| 天天综合网1| 91天美传媒精品| 丁香五月天婷婷姐| 你操综合| 人妻AV 中文字幕的| 丁香六月啪| 亚欧高清在线| 99久久久er直播网址| 日本熟女免费視颖| 岛国1区2区3区在线观看| 亚洲精品久久久久毛片A片拉屎| 亚洲丝袜二区在线| 97日韩欧美亚洲| 亚洲AV不卡在线观看| 天堂涩涩| 欧美激色| 久久高清无码夜夜操| 亚洲色图伊人网| 91久久国外网| 在线中文AV| 国产精品3| 日本免费一区二区不卡| 综合一区二区影视| 午夜精品久久久99热蜜桃的功能特点| 亚洲凸凹超碰成人| 中精品一区二区三区| 色情婷婷久久五月天| 欧美在线视频观看一二三四区高清| 久啪| 欧洲亚洲人人爽爽视频| 久久久精| 午夜啊啊| 亚州男人天堂| 人人弄人人摸| 无码久久亚洲高清,| 亚洲欧美色图小说| 啪啪啪东京| 黄片免费看的| 成人免费不卡在线视频| 免费观看啪视频| 欧美男人一区| 极品白嫩福利在线| 久久精品国产99国产精品亚洲| 久久999久| 久久久久大香青草精品综合| 一区二区三区在线日韩影院观看| 96精品久久久| 囯产精品久久久久久久久久二区三区| 国产h小视频在线观看免费| 国产精品精品系列在线观看| 国产成人拍国产亚洲精品| 欧美性生活免费网| 精品区国产区一区二区三区| www久久久| 欧美成人精品一区二区三区| 传媒免费一区二区三区| 加勒比性爱成人在线| 精品久久97| 乱伦熟女论坛| 逼逼逼逼操操操操操操操操操午夜剧场| 国产激情在线| 偷拍伦理视频| 国产美女激情| 精品女同一区二区三区| 欧美人黑A片无码免视费| 蜜乳AV.COM| 亚洲经典啪啪| 青青草在线视频人人想人人上| 97碰碰日本乱偷人妻中文的| 999久久芭蕾| 中文字幕欧美丝袜07资源| 亚洲 欧美 偷拍 唯美| 秋霞视频一区二区| 亚洲国产剧情少妇激情| 丝袜色综合| 啊啊啊无码| 亚乱色| 日韩精品99999| 蜜臀久久久国产| 麻豆熟妇乱妇熟色A片在线看| 被窝影院午夜看片无码| 欧美在线观看综合国产| 亚洲欧洲小说图片视频 | 久久草草欧美精品| 97色色,97综合| 天美传媒AV在线| 少妇人妻好深太紧了vr91| 天天日夜夜爽| 熟女高潮合集-永久久久-成人AV| 91黄站| 成人七区| 欧美制服另类丝袜| 精品无码产区一区二| 亚洲天堂久久久久久粉红视频| 乱伦AVxx| 久久精品72| 国产精品播放| 日韩av在线免费网站| 成年男人的天堂| 欧美色图片色哟哟| av最新免费中文字幕| 粉嫩国产精品久久粉嫩| 欧美综合在线第一页| 日韩精品中文字幕人妻| 天天天天干| 最新9久久久9免费视频| 天天干天天舔| 91N欧美| 九九九国产精品| 免费看黄视频亚洲网站| 人妻密肉在线观看| 一区二区三区高清| 国产亚洲精品第一最新| 九九热在线精品视频| 欧美色网| 亚欧精品久久久久久久久久久| 欧美极品少妇| 久久精品欧美一区二区三区不卡| 91久久国产综合久久| 日韩成人小视频| 亚洲成a人片在线观看中文!!!| 午夜天堂精品久久| 国内一区二区免费| 东京热亚洲一区二区| 偷拍新久久| 91天堂色男人的天堂| 免费成人在线熟妇网| se吧提供国产乱老熟视频胖女人| 99久久com免费视频′| 大逼色网站| www久| 亚洲欧美啪啪| 人人操人人大香蕉| 超碰日韩美妻| 无码免费精品高清| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 欧美一级黄色免费专区| 天美麻豆精品视频99| 欧美se综合| 99久久9| 亚洲一区二区av| 开心激情婷婷| 极品色综合| 久久草草欧美精品| 久久久久久久97| 亚洲老熟妇xxx| 日韩啪啪视频| 七久久久| 国产精品 视频| 九月AV| 欧美日韩大黄片| 骚熟女吞| 午夜福利免费精品视频| 久久久久久九九九九九九| 国产18精品亚洲精品| 亚洲图片视频小说| 六月丁香五月婷婷| 国产精品扒开腿做爽爽爽视频| 精品国产少妇高潮视频| 色综合一区二区三区| 国产精品九9| 亚洲97成人在线观看| 国产精品视频播放| 亚洲1区2区三区高清中文字幕| 亚洲综合夜色| 午夜一区| 亚洲97在线观看| 欧美少妇第一页| 国产日韩精品无码去免费专区国产| SUV一区二区在线看| 秋霞蝌科网日本一区| 淫纸中9区| 欧美精品成人亚洲| 人人做,人人操,人人摸| 殴洲老熟女| 大香蕉一线视频| 91丝袜视频在线观看| 精品熟女一区=区三区| 吖在线不卡一区二区国产剧情| 97免费视频在线观看视频| 国产精品老师| 国产一级舔足在线观看| 欧美少妇性乱| 国内毛片免费h片在线| 一起草视频在线| 久久超碰免费的| α√在线| 东京热大香蕉| 亚洲一区二区 麻豆传媒| 另类小色呦| 69一区二区三区 | 黄色大片免费在线| 成人资源中文字幕在线观看| 亚州伊人色综台| 日韩激情无码影院| 精品久操| 日韩99999色| 天天天天天天天天天天干美女| 怡红院成人视频| 亚洲影院小综合| 91粉嫩萝控精品福利网站_精品影音先锋国 | 蜜乳AV.COM| 床戏久久久av一区二区麻豆| 4141514逼喷水三级片| 鸡巴插逼视频| 91狠狠综合网| 久久6热精品99视频| 中文高清一区二区的| 人人操人人搞人人草| 久久久久99999| 亚州男人的天堂| 99热免费| 午夜黄色免费在线观看| 91P0RNY大屁股人妻| q2午夜理论片夜色av| 一本正道久久熟女| 亚洲天堂热| 国产欧美精选自拍一区| 91爱网| 人妻精品一区一区三区蜜桃91| 国产a级精品| 中文字幕在线免费观看视频| 国产多人在线观看视频| 欧美热图99| 男人的天堂2000| 日韩伦理视频| 熟女乱伦二区| 欧美在线综合| 亚洲淫乱骚妇AV| 青青国产精品在线| 久久久九九网站| 精品九九国产无码| 福利视频香蕉免费一区二区在线| 亚洲精品蜜桃久久久| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 人妻夜夜爽天天爽三区麻豆AV网站| 丰满人妻一区| 黄色不卡视频| 亚洲情色婷婷五月天| 九九Av| 性爱av在线免费观看| 超碰成人公开| 无码人妻一区二区三区色欲aⅴ| 日日躁夜夜躁狠狠躁超爽| 久久久九精品| 久啪| 97中文字幕色| 污到发麻的视频 国产| 婷婷综合五月天| 综合一区中亚洲国产成人综合精品| 国产一区二区三区久久久精品| 免费成人自拍视频在线| 亚洲欧美日韩不卡人妻| 亚州黄站| 亚州精品人妻一二三区| 亚洲国产亚洲天堂| 国产精品视频在线播放| 中出789在线视频| 一区二区三区四区五区高清无码永久视频 | 首页亚洲国产高跟丝袜诱惑视频| 国产情侣自拍在线播放| 欧美人妻精品一区二区| 波多野结衣一级视频| 日韩性爱视频在线免费观看| 日韩熟女操逼| 日本性感人妻91| 欧州一区二区三区四区| 另类图片综合| 97超碰超碰| 少妇久久久久久| 久久久96| 日韩三级伦理中文字幕| 日产操逼| 欧美日韩国产成人高清| 人人性爱视频免费| 人妻性爱一区二区| 情趣丝袜无码操逼视频| 牛牛操视频逼| 男女激烈网站最新| 久久久久久电影| 亚洲精品一二区| 思思热国产在线视频| 欧美色性爱| 爱av免费| 亚洲色综合| 夜色五月天| 偷窥自拍亚洲色图| 亚洲综合888| 91国产美女丝袜足交精品视频 | 无码WWW免费视频网站| 中国女人内射6XXXXX| 久久精视频美日韩在线视频| 美女被艹尤物视频| 天天爽天天爽| 久久久久久性爱片| 绯色AV粉色AV蜜臀AV| 99蜜桃臀久久久欧美精品网站| av久日| 久久久涩| 国产精品白丝| 免费日韩黄片| 国产小黄片在线免费观看| 日本 欧美 国产一区| 91精品91久久久中77777| 亚洲精品久久久久久久久豆丁网| 色九九九| 亚洲熟女一区| 久久9精品| 国产高清亚洲日韩一区| 成全在线观看免费观看| hd成人一区二区在线| 大香蕉九九| 67194无码不卡| 国产一区二区三区,在线观看观看| 啊啊啊久久久视频| 超碰97综合| 亚洲av国产av综合av卡| 日韩,欧美,中文在线| h在线看免费版在线看| 亚洲熟妇熟在线电影视频| 91AV天美在线视频| 精品传媒在线一区| 影音先锋乱伦资源| 亚洲国产无码精品首页久久久| 欧洲天天在线| 久久久男人的天堂| 国产97色在线| 熟女乱伦A| 91蜜桃婷婷狠狠久久综合9色| 熟妇一区二区三区| 天天综合网亚洲综合网| 天天综合97| 色久桃花影院在线观看| 吻戏激情性巴克| 嗯嗯啊啊好疼| 四虎精品一区二区| 91高清无码下载| 亚洲性爱高潮影院| 老女人老91妇女老热女| 日本大香蕉综合网| 波多野结衣被操50分钟免费视频| 五月丁香综合| 欧美国产有色电影| 深夜国产福利| 蜜桃视频成a人v在线| 亚洲欧美校园另类春色| 一区中文字幕二区日韩| 亚洲色图亚洲无码强奸乱伦| 精品久久久久,69国产成人精| 欧美亚洲高清不卡| 午夜超碰| 黑人无码一区二区| 和协无码影院| 理论久久婷婷网8| 一区二区三区黄片免费观看| 亚洲nv男人的天堂网| 激情四射熟女丝袜| 草草草视频在线免费看| 欧美丰满熟妇XXXX性ppX人交| 欧美黑人与女人91~| 熟女少妇视频| 国产AV久久野战精品| 成年男人的天堂| 一二三区精品视频| 亚洲天堂人妻熟妇视频| 欧美黄色图片| 91 丝袜在线播放| 国产精品视频精品一二| 国产盗摄美女如厕大神作品在线观看 | 国产精品69久久久久孕妇欧美 | AND人妻系列| 日韩欧美女求操每天更新| 天堂中文资源在线bt| 蜜臀99999| 国产毛片片精品天天看视频| 99热日本| 婷婷五月天色网| 国产精品一级片在线看| 青青草日本中文字幕| 91熟女视频| 日韩精品国产精品五码一区二区| 夜夜夜夜爽| 黑人狂躁日本妞一区二区三区| 亚洲情色一区三区| 欧美亚洲天堂| 国产11页| 国产精品夜夜| 日日夜夜天天| 91亚洲黄色网| 日本精品一区二区中文字幕| 综合激情一一91| 国产高清26uuu| 久久亚洲人妻| 亚瑟国产精品久久无码| 欧美日韩少妇色情| 亚洲AV成人精品网站在AV|