欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

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

Spring AI 2.0實(shí)戰(zhàn):Java開發(fā)者快速構(gòu)建多模型Agent應(yīng)用 從 2024 年開始AI 應(yīng)用開發(fā)幾乎成了 Python 開發(fā)者專屬賽道LangChain、LlamaIndex 各種框架層出不窮。Java 開發(fā)者想在自己的 Spring Boot 項(xiàng)目里接一個(gè)大模型要么寫裸 HTTP 請求調(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——完整串起來講一遍。不是單純介紹概念而是從一個(gè)小型實(shí)戰(zhàn)項(xiàng)目出發(fā)把每一步的配置、代碼、踩坑點(diǎn)全部鋪開。如果你是一個(gè) Java 工程師正在糾結(jié)怎么在公司項(xiàng)目里落地 AI 能力這篇文章可以直接當(dāng)參考手冊用。先說結(jié)論Spring AI 2.0 真正解決的問題是把“和大模型打交道”這件事變成了符合 Spring 編程模型的普通后端開發(fā)。它不追求把 LangChain 那套 Python 生態(tài)搬過來而是用 Spring 自己的依賴注入、自動配置、約定優(yōu)于配置把多模型切換、工具調(diào)用、協(xié)議接入、Agent 編排統(tǒng)一成一個(gè)標(biāo)準(zhǔn)范式。讀完這篇文章你能獨(dú)立搭出一個(gè)支持多模型切換、能調(diào)用自定義工具、能通過 MCP 接入外部服務(wù)、帶記憶和會話的客服 Agent 原型。1. 這篇文章真正要解決的問題很多 Java 開發(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è)級 AI 應(yīng)用開發(fā)中必須面對的問題同一個(gè)業(yè)務(wù)要支持多家模型供應(yīng)商比如線上用 GPT-4o本地開發(fā)用 Ollama 里的開源模型怎么做到切換模型而不改業(yè)務(wù)代碼模型返回的是 JSON 文本怎么穩(wěn)定地映射成 Java 對象而不是靠正則硬解析大模型不知道你的訂單數(shù)據(jù)、用戶數(shù)據(jù)怎么安全地讓它調(diào)用你已有的 Service 方法外部工具生態(tài)已經(jīng)約定了統(tǒng)一接入?yún)f(xié)議比如數(shù)據(jù)庫 MCP Server、文件系統(tǒng) MCP ServerSpring 項(xiàng)目怎么接入最省事一個(gè)智能客服 Agent 需要有角色設(shè)定、工具列表、會話記憶、多輪上下文這些怎么工程化管理這些問題的答案就是 Spring AI 2.0 的核心抽象體系。它跟 Python 的 LangChain 解決的問題高度重合但實(shí)現(xiàn)思路完全是 Java 式的自動配置、Bean 管理、類型安全、Starter 依賴。從實(shí)用角度看這篇文章適合四類讀者還沒接觸過 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 對 LLM 的抽象核心就是ChatModel接口。不管底層是 OpenAI、Anthropic、通義千問、DeepSeek 還是 Ollama 里的本地模型對上層業(yè)務(wù)代碼來說暴露出來的都是同一個(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、工具注冊、結(jié)構(gòu)化輸出。這是最常用的對象。EmbeddingModel負(fù)責(zé)把文本轉(zhuǎn)成向量用于 RAG、語義搜索等場景。StructuredOutputConverter將模型輸出解析為指定 Java 類型。2.2 Tools讓大模型調(diào)用你的函數(shù)大模型本身不持有你的業(yè)務(wù)數(shù)據(jù)它只能“說出”一個(gè)新的 JSON 結(jié)構(gòu)表達(dá)“我想調(diào)用某個(gè)函數(shù)”。Tools 就是把這層機(jī)制封裝成了 Spring 風(fēng)格的工具方法。在 Spring AI 中只需要在方法上標(biāo)記Tool注解框架自動完成“模型生成函數(shù)調(diào)用參數(shù) → 框架反射調(diào)用方法 → 把結(jié)果回傳給模型 → 模型基于結(jié)果繼續(xù)生成”的循環(huán)。這里真正容易踩坑的地方在于模型是否真的會調(diào)用你的 Tool取決于你寫的description是否足夠清晰。描述寫得含糊模型就會跳過函數(shù)調(diào)用直接憑幻覺回答。2.3 MCP模型上下文協(xié)議MCPModel Context Protocol是 Anthropic 在 2024 年底提出的開放協(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 對 MCP 的支持是完整的可以作為 MCP Client連接現(xiàn)成的 MCP Server比如文件系統(tǒng)、數(shù)據(jù)庫、藍(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)用、跨語言的工具發(fā)現(xiàn)與傳輸標(biāo)準(zhǔn)。MCP Server 在遠(yuǎn)端提供的工具最終會被 Spring AI 包裝成本地 Tool 參與模型對話。2.4 Skills更貼近業(yè)務(wù)的 Agent 能力封裝如果說 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è)“訂單查詢技能”可以包含“按訂單號查狀態(tài)”“按手機(jī)號查訂單列表”“查詢物流軌跡”三個(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 解決的是“怎么連接、傳什么格式”的問題比如你用 npx 啟動一個(gè) filesystem MCP Server客戶端連上它就能列出可用的工具列表。Skill 解決的是“以什么方式參與 Agent 編排”的問題它更像是一個(gè)高層的業(yè)務(wù)抽象背后既可以封裝本地 Tools也可以封裝對 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ū)動和推薦配置。兩者不在同一個(gè)抽象層。2.6 Agent用對話能力編排一切Agent 不是一個(gè)新框架而是ChatModel Tools Skills 記憶 多輪編排的組合產(chǎn)物。在 Spring AI 2.0 中一個(gè) Agent 的編程模型非常簡單準(zhǔn)備好一個(gè)ChatClient給它配置系統(tǒng)角色、工具列表和會話記憶剩下的循環(huán)推理全部交給框架。Agent 內(nèi)部會反復(fù)執(zhí)行“模型生成 → 決定是否調(diào)用工具 → 拿到結(jié)果 → 繼續(xù)生成”的流程直到它能給出最終回答。不過簡單不代表沒有難點(diǎn)。真正考驗(yàn)工程能力的是 Agent 的安全邊界、工具權(quán)限、會話存儲、失敗降級這些外圍問題。后面會專門用一整節(jié)說清楚。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 對 JDK 21 的完整官方支持。構(gòu)建工具用 Maven 或 Gradle 都可以。本文示例以 Maven 為主因?yàn)閲鴥?nèi) Java 項(xiàng)目里 Maven 還是絕對主流。版本方面Spring AI 的版本更新速度比較快不建議把具體版本號寫死在文章里。正確做法在pom.xml里通過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í)的具體小版本號即可。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。本文的示例會先做 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)地址。本地開發(fā)優(yōu)先推薦 Ollama 方式下載 Ollama再拉一個(gè)支持 function calling 的模型比如qwen2.5系列。這樣即使沒有公網(wǎng) API Key也可以完成 Tools 和 Agent 的全流程測試。這里補(bǔ)充一個(gè)重要約定任何 API Key 都不要硬編碼到application.yml里更不要提交到 Git 倉庫。用環(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 的自動配置會為每個(gè)已引入的模型 Starter 創(chuàng)建對應(yīng)的ChatModelBean比如引入spring-ai-openai會自動創(chuàng)建OpenAiChatModel引入spring-ai-ollama會自動創(chuàng)建OllamaChatModel。但問題來了如果項(xiàng)目里同時(shí)有多個(gè)ChatModelBean注入ChatClient.Builder時(shí) Spring 會由于類型不唯一而報(bào)錯(cuò)。解決辦法就是顯式聲明一個(gè)多模型路由服務(wù)用 Map 按名稱保存所有模型。這個(gè)設(shè)計(jì)本質(zhì)上是“多模型策略模式”后續(xù)切換模型時(shí)業(yè)務(wù)層只面向ChatModel接口編程選誰用誰由配置或路由邏輯決定。這是 Spring AI 多模型落地最實(shí)用的架構(gòu)。4.2 第二步搞定結(jié)構(gòu)化輸出大模型返回的是自然語言但業(yè)務(wù)系統(tǒng)需要的是FlightReservation、UserInfo這樣的 Java 對象。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描述要寫到“模型一聽就懂”的程度。然后用ChatClient.Builder.defaultTools()把工具傳進(jìn)去。驗(yàn)證這一步是否成功最直接的辦法是問一個(gè)必須靠工具才能回答的問題比如“北京今天天氣怎么樣”。如果模型準(zhǔn)確返回了天氣說明函數(shù)調(diào)用鏈路已經(jīng)通了。4.4 第四步接入 MCP引入 MCP Client 依賴在配置里聲明要連的 stdio MCP ServerSpring AI 會自動把這個(gè)服務(wù)器提供的工具合并到模型對話中。如果公司內(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 方法再通過構(gòu)造器注入到ChatClient。這里的一個(gè)工程建議每個(gè) Skill 類都寫清楚Description讓 Agent 知道這個(gè)技能在什么場景下使用。Agent 判斷“該不該用這個(gè)技能”依賴的就是這個(gè)描述。4.6 第六步用 Agent 編排落地把系統(tǒng)角色、工具列表、Skills、會話記憶整合到一個(gè)ChatClientBean 里對外暴露一個(gè)chat(userMessage, conversationId)方法。這個(gè) Bean 就是你的客服 Agent。會話記憶的實(shí)現(xiàn)方式依賴于ChatClient的id(conversationId)參數(shù)框架會把同一 id 的多輪對話保存到ChatMemory。生產(chǎn)環(huán)境應(yīng)該替換成 Redis 或數(shù)據(jù)庫存儲避免單機(jī)內(nèi)存丟失。現(xiàn)在整條鏈路就通了。下面用可運(yùn)行代碼過一遍。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 模塊的版本號避免手動逐個(gè)對齊版本。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ù)組不同版本對分隔符的處理略有差異。如果啟動時(shí) MCP Server 沒有連上第一優(yōu)先排查的就是這個(gè)參數(shù)里的逗號分隔是否正確以及本機(jī)是否安裝并可以使用 npx。5.3 多模型調(diào)用用具體的ChatModel實(shí)現(xiàn)類型做構(gòu)造器注入這樣不會被多 Bean 問題干擾// 文件路徑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 保持簡潔// 文件路徑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í)一旦格式不匹配會直接拋出類型轉(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(你是航班信息解析助手。請從用戶文本中抽取航班編號、出發(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級; } return city 多云22℃東北風(fēng)1級; } Tool(description 根據(jù)城市名稱查詢未來三天天氣預(yù)報(bào)需要傳入城市和天數(shù)) public String getForecast(String city, int days) { return city 未來 days 天晴轉(zhuǎn)多云最低18℃最高27℃; } }注意Tool的描述寫清楚“需要傳入什么參數(shù)”這直接影響模型生成參數(shù)的成功率。5.6 MCP 客戶端接入前面已經(jīng)在application.yml里配置了 filesystem 這個(gè) stdio 服務(wù)。當(dāng) Spring AI 檢測到 MCP Client 依賴時(shí)會自動連接該服務(wù)并把它暴露出的工具合并到工具注冊表。如果不想使用 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è)重要過程MCP 工具是“動態(tài)發(fā)現(xiàn)”的。你在代碼里看不到 filesystem 工具的 Java 類但它會在運(yùn)行期被注冊成一個(gè)ToolCallback。排查 MCP 工具是否生效看啟動日志里是否打印了 MCP 工具調(diào)用的注冊信息即可。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ù)訂單號查詢訂單狀態(tài)和物流信息訂單號為數(shù)字字符串) public String queryOrderStatus(String orderId) { if (orderId null || !orderId.matches(\\d{6,})) { return 訂單號格式不正確; } // 實(shí)際項(xiàng)目里注入 OrderRepository 查詢數(shù)據(jù)庫 return 訂單 orderId 狀態(tài)已發(fā)貨預(yù)計(jì) 3 天內(nèi)送達(dá); } Tool(description 根據(jù)用戶手機(jī)號查詢最近三個(gè)月訂單列表) public String listRecentOrders(String mobile) { if (mobile null || !mobile.matches(1\\d{10})) { return 手機(jī)號格式不正確; } 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è)智能客服回答要簡潔、準(zhǔn)確、友好。當(dāng)用戶詢問天氣時(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ì)量的重要來源。模型有概率忽略模糊指令但你把指令寫進(jìn)系統(tǒng)提示詞輔助工具描述清晰成功率會大幅提高。再提供一個(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 能力封裝、多輪會話記憶的 Agent 原型已經(jīng)完整落地。下面看看怎么驗(yàn)證它。6. 運(yùn)行結(jié)果與效果驗(yàn)證啟動項(xiàng)目mvn spring-boot:run如果本地Ollama已經(jīng)拉取了qwen2.5:7b啟動日志里會同時(shí)出現(xiàn) OpenAI 和 Ollama 的模型初始化信息。MCP Client 啟動時(shí)會嘗試執(zhí)行npx -y modelcontextprotocol/server-filesystem /tmp/data日志里會出現(xiàn) MCP Server connected 之類的記錄。依次驗(yàn)證幾個(gè)核心能力基礎(chǔ)對話curl http://localhost:8080/api/agent/chat?message你好conversationIdtest-001預(yù)期輸出一句問候語說明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)動curl http://localhost:8080/api/agent/chat?message北京今天天氣怎么樣conversationIdtest-001如果模型沒有調(diào)工具可能只會回答“我無法獲取實(shí)時(shí)天氣”。如果正確調(diào)用了WeatherTools.getWeatherByCity會返回“北京晴25℃”等相關(guān)信息。多輪會話驗(yàn)證curl http://localhost:8080/api/agent/chat?message我的手機(jī)號是13800138000幫我查一下最近訂單conversationIdtest-001 curl http://localhost:8080/api/agent/chat?message再看看第一單的物流conversationIdtest-001第二次提問依賴第一次的上下文。如果返回結(jié)果包含第一單的訂單號或狀態(tài)說明會話記憶已生效。判斷 Agent 是否正常不能只看是否返回結(jié)果還要看它是不是在正確的步驟調(diào)用了正確的工具。建議在本地開發(fā)時(shí)打開 Spring AI 的調(diào)試日志logging: level: org.springframework.ai: DEBUG這樣可以在控制臺看到完整的工具調(diào)用鏈模型請求 → 工具調(diào)用 → 工具返回 → 模型最終回答。如果失敗優(yōu)先看這幾個(gè)位置啟動階段MCP Server 是否連接成功Ollama 服務(wù)是否可用調(diào)用階段模型返回是否超時(shí)工具階段Tool方法是否有日志返回內(nèi)容是否被模型正確消費(fèi)。7. 常見問題與排查思路問題現(xiàn)象可能原因排查方式解決方案啟動報(bào)錯(cuò)說存在多個(gè) ChatModel Bean同時(shí)引入了多個(gè)模型 Starter自動配置創(chuàng)建了多個(gè)同類型 Bean查看啟動日志中 Bean 創(chuàng)建記錄用Qualifier或顯式配置指定使用的模型或封裝多模型路由服務(wù)請求時(shí)模型長時(shí)間無響應(yīng)模型 API Key 無效、網(wǎng)絡(luò)不通、本地 Ollama 沒有啟動先 curl 模型供應(yīng)商接口查看 Ollama 是否在 11434 端口監(jiān)聽修正 API Key / base-url啟動 Ollama 并確認(rèn)模型已拉取工具沒有被調(diào)用模型直接瞎回答Tool的描述不夠清晰或 system prompt 沒有強(qiáng)制要求檢查工具描述打開 DEBUG 日志確認(rèn)模型請求里是否包含 tool_calls重寫描述加入“必須使用工具回答”等約束結(jié)構(gòu)化輸出解析失敗拋類型轉(zhuǎn)換異常模型返回文本格式不匹配 Java 類型查看實(shí)際返回的 JSON簡化實(shí)體字段統(tǒng)一使用 String逐步增加字段MCP Server 連接失敗npx 未安裝、args 參數(shù)格式錯(cuò)誤、服務(wù)端地址不通在終端手動執(zhí)行npx -y modelcontextprotocol/server-filesystem /tmp/data檢查啟動日志 MCP 部分修正 args 寫法安裝 npx改用可訪問的 HTTP MCP Server多輪對話上下文丟失conversationId傳遞不一致或沒有配置持久化 ChatMemory檢查每次請求是否傳同一個(gè) id查看內(nèi)存存儲的日志用 Redis/數(shù)據(jù)庫實(shí)現(xiàn) ChatMemory統(tǒng)一會話 id 生成規(guī)則本地模型不支持 function callingOllama 拉取的模型版本較老或本身不支持工具調(diào)用查詢模型文檔確認(rèn)是否支持 tools更換支持 function calling 的模型例如qwen2.5系列這些問題是獨(dú)立開發(fā)者在完整跑通鏈路時(shí)最容易遇到的。嚴(yán)格按照排查路徑走大多數(shù)問題會在十分鐘內(nèi)定位。8. 最佳實(shí)踐與工程建議8.1 模型接入層統(tǒng)一路由隔離供應(yīng)商不要把模型供應(yīng)商的 SDK 直接散落在業(yè)務(wù)代碼里。所有模型訪問統(tǒng)一走ChatModel接口模型路由邏輯收斂到一個(gè)服務(wù)中。這樣才能做到“線上用商業(yè)模型、測試用本地模型”而不修改業(yè)務(wù)代碼。8.2 提示詞管理模板化、版本化System prompt 不要散落在 Controller 里。建議用提示詞模板文件配合 Spring 的Resource加載放到系統(tǒng)資源目錄下。提示詞實(shí)際上是需要評審和版本管理的“代碼”它直接影響模型行為質(zhì)量。8.3 工具安全最小權(quán)限原則Tool方法本質(zhì)上是把內(nèi)部能力暴露給外部模型調(diào)用。必須遵守最小權(quán)限原則工具方法只做自己該做的事不要聲明一個(gè)大而全的方法例如“執(zhí)行任意 SQL”。所有涉及數(shù)據(jù)庫、文件、外部 API 的工具都要做參數(shù)校驗(yàn)就像對待用戶輸入一樣。8.4 會話記憶生產(chǎn)環(huán)境不要用默認(rèn)內(nèi)存實(shí)現(xiàn)ChatClient的默認(rèn)記憶是內(nèi)存級的應(yīng)用重啟即丟失。生產(chǎn)環(huán)境應(yīng)該把ChatMemory替換為 Redis 或數(shù)據(jù)庫實(shí)現(xiàn)。會話 ID 必須由后端統(tǒng)一生成不要信任前端傳入的任意 key否則容易出現(xiàn)會話串臺問題。8.5 MCP 生命周期管理MCP stdio 服務(wù)本質(zhì)上是啟動一個(gè)子進(jìn)程它的生命周期需要被關(guān)注。不要在生產(chǎn)環(huán)境用 npx 臨時(shí)拉取 MCP Server盡量構(gòu)建成獨(dú)立服務(wù)用 HTTP 方式接入這樣便于監(jiān)控和擴(kuò)縮容。8.6 Agent 可觀測性Agent 是一個(gè)多步?jīng)Q策系統(tǒng)每一步都可能出錯(cuò)。生產(chǎn)環(huán)境必須記錄用戶問題原文模型是否發(fā)起了工具調(diào)用調(diào)用了哪個(gè)工具、參數(shù)是什么工具返回結(jié)果最終回答內(nèi)容。這些日志鏈路是排查問題的唯一依據(jù)。建議在Tool方法和 Agent 調(diào)用層都加上結(jié)構(gòu)化日志而不是只靠框架默認(rèn)日志。8.7 成本與限流多模型配置帶來成本控制能力的同時(shí)也帶來新的風(fēng)險(xiǎn)工具循環(huán)次數(shù)過多會導(dǎo)致 Token 消耗膨脹。建議給 Agent 調(diào)用設(shè)置超時(shí)時(shí)間、最大工具調(diào)用輪數(shù)并針對不同模型配置不同的限流策略。8.8 版本升級策略Spring AI 版本迭代快API 偶有調(diào)整。升級前先看官方遷移指南并且保留一個(gè)小范圍的兼容層。比如你寫一個(gè)AgentChatService包裝ChatClient未來內(nèi)部 API 變化時(shí)只改這個(gè)類業(yè)務(wù)層不受影響。9. 總結(jié)與后續(xù)學(xué)習(xí)方向Spring AI 2.0 給 Java 生態(tài)帶來的價(jià)值不只是一套可以調(diào)大模型的 Starter而是一整套符合 Spring 編程模型的 AI 應(yīng)用開發(fā)范式。本文把這條鏈路完整拆解了一遍多模型解決了供應(yīng)商鎖定問題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ù)庫服務(wù)。這三步做完Spring AI 2.0 的主要能力就算真正掌握。接下來值得深入的方向包括RAG 與向量數(shù)據(jù)庫的集成、Agent 與業(yè)務(wù)流程引擎的結(jié)合、基于 MCP Server 暴露公司內(nèi)部服務(wù)給 AI 應(yīng)用、以及多 Agent 協(xié)作模式。每一條都比單純調(diào)大模型接口更有工程價(jià)值也是 Java 工程師在 AI 時(shí)代不可替代的底牌。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
开心五月深爱五月婷| 六月丁香婷婷五月天| 欧美日韩成人在线网站| 99热国产国产| 狠狠穞A片一區二區三區| 久99久视频| 99热欧美| www.sebowuyue| 99久久婷婷国产综合| 丁香婷婷五月天色综合| 五月婷在线观看| 丁香五月婷久久| 99年操人人爽| 色99网| 婷婷五月天.com| 丝袜激情网| 五月天久久久| 丁香五月Av| 久久综合丁香激情五月| 丁香五月婷婷影院| 丁香五月日啪| 丁香五月综合| 狠狠干狠狠操狠狠爱| 婷婷亚洲天堂| 色五月婷婷五月天激情综合| CHINESE熟女老女人HD视频| 婷婷久久爱| 五月婷婷另类| 六月婷婷综合| 亚洲天堂婷婷| 色情五月丁香婷婷网| 婷婷色情六月| 亚洲愉拍99热成人精品| 五月天社区| 色综合综合网| 色情综合网| 91人人操人人看| 天天操夜夜夜拍拍拍| 亚洲网站999| 日本精品人妻无码77777| 中文字幕网站在线观看| 日日艹思思热| 色色欧美。| 超碰大香蕉网| 婷婷成人五月天成人文学| 无码AV免费精品一区二区三区 | 91久久99久久91熟女精品| 苗黎美女四级成人版一级二级毛片| 4399人妻无码久久久| 婷婷丁香五月天狠狠| 99色网站| 六月婷色| 五月婷激情| www.夜夜| 九九视频网| 婷婷久久色| 全部老头和老太XXXXX| 丁香五月激情网| 丁香五月婷婷亚洲另类| 深爱五月天| 成人av在线电影| 色五月婷婷五月天激情综合| 久久婷婷五月天丁香| 99久re热视频精品98| 五月激情综合美女久久| 中文字幕丰满乱孑伦无码专区| 丁香五月婷婷亚洲色图| 五月天婷婷综合| 狼人婷婷久久| 激情九九六月激情免费视频| 日韩久综合| 开心五月丁香啪| www.久久爱| 久热 91| 色婷婷亚洲五月天| 伊人久久大香天蕉亚洲特级| www.99热视频| 狠狠综合色网| 色色a| 国内自拍1区| 精品无码人妻一区| 国产精品18久久久| 免费久久这里只有精品99| 丁香五月天婷婷激情| 九九99九九99| 大香蕉啪啪啪| 激情 五月 婷婷 丁香| 久久综合婷婷| 丁香五月天偷拍| 色婷婷导航| 丁香五月六月综合激情| 久久九九爽| 五月婷婷|欧美| 婷婷五月天堂| 六月丁香婷婷综合狠狠爱夜夜爱| 亚洲旡码| 亚洲视频在线观看| 丁香五月另类小说在线阅读| 黄色热99| 国产精品成人av在线观看春天| 这里只有精品96| 婷婷激情蜜桃玖玖丁香| 北条麻妃九九九国产精品视频| A一级操| 日日操日日撸| www.精品99| 丁香六月综合激情| 99精品视频免费观看,| 五月激情综合网| 天天看片日日夜夜| 五月婷婷综合在线亚洲视频| 九九色综合九九色| 五月天丁香婷| 99性爱| 亚洲视频a| 五月天色婷婷综合| 操嫩逼电影| 9久久精品| 五月天婷婷激情春色小说| 色婷婷成人做爰A片免费看网站 | 丁香五月中文字幕久色| 五月丁香婷婷俺| 亚洲成人AV电影在线| 激情婷婷亚洲五月| 99操网站| 久久婷狠狠色| 久久这有这里精品| 大香蕉视频婷| 色情丁香五月婷婷精品| 激情综合啪啪啪| 99re这里只有| 激情综合丁| 丁香六月婷婷操逼网| 丁香 婷婷 亚洲 熟女| 色九九一二| 97色色网| 丁香五月综合久久八| 可以看的av| 97色色色色色色色色色色色色色| 九九九九中文字幕| 综合色播| 色综合色综合色综合| 婷婷久久18| 九九久久99精品免费观看www| 九月丁香| 国产97在线日韩亚洲女人被黑人巨大| 九九无码| 激情桃色网| 国产性av| 久热一本| 另类小说五月天激情| 亚洲天堂制| 99热精品观看| 深爱开心激情网| 久久久久视剧HD| 日韩色久| 九月婷婷丁香| 丁香五月最新地址| 中文字幕日产A片在线看| 99久久九九| 大香蕉欧美在线| 婷婷九月| 激情欧美五月丁香| AV堂狠狠干| 色婷婷综合久久| 激情综合网色播五月| AA丁香综合激情| 午夜天堂一区人妻| 亚洲九区| 久热网站| 天天日夜夜高潮| 色色六月| 丁香五月天视频| 5月婷婷激情网| 日本不卡中文字幕| 欧美性爱专区| 激情网开心网| 99综合一区| 99国产精品久久久久久久久久久 | 人人干99| 99热在线观看这里只有精品| 亚洲精久久| 国产黄色在线| 99热在线精品观看| 亚洲操B| 天天爽夜夜爽夜夜爽精| 天堂中文国产| 日本韩国视频在线观看社区免费的9| 五月丁香自拍| 婷婷色狠狠| 亚洲国产色婷婷| 婷五月天| 五月丁香婷婷成人网| www久久艹| 日日操日日干| 婷婷激情伍月网| 婷婷五月天首页激情| 国产激情视频在线观看| 九月综合| 激情五月天激情小说| 精品久久二6| 人妻中文字幕网| 久久小说| 91Chinese在线| 五月天国产| 天天色伊人| 无码啪啪| 成人av在线网址| 五月婷婷涩涩爱| 婷婷综合| 久久久激情视频| 国产VA亚洲VA96| 日日操夜夜操狠狠操| 亚州操逼网| 亚洲av电影网站| 99色视频| 亚洲综合五月| 黄网在线免费观看| 色色五月婷婷久久| 久久这里只精品| 91日综合欧美| 五月停停大香蕉| 色色国产| 久久小视频| 婷婷色综合| 天天夜夜操| 思思视频这里是精品| 九九久久99精品免费观看www| 五月婷久久综合| 女人高潮内射99精品| 国产午夜一区二区三区| 啪啪一区| 成人丁香五月天| 精品99在线| 1024操逼| 中文字幕综合| 色婷久| 99爱视频在线播放| 岛国AV网站| 天天成人综合视频| 亚洲AAAA网| 青青操avbb| 五月天激情小说婷婷| 婷婷情色五月天| 97成人在线视频精品| 九九Y精品热播| 色六月 婷婷| 成熟妇人A片免费看网站 | 开心婷婷五月天激情网| 五月婷婷av| 五月天狠狠草| 26uuu精品一区二区| www,av好吊操| jizzdr| 另类激情五月天| 色播丁香婷婷五月激情| 五月婷婷视频28| 先锋av性爱成人电影| 五月天成人伊人| 激情开心五月婷婷| 狠狠久综合| 激情久久天天| 五月婷婷第四色| 人人噜天天上| 六月丁香五月婷婷| 亚洲国产成人在线| 婷婷五月在线视频| 99久久国产宗和精品1上映| 开心五月天激情网| 日本V在线观看不卡视频网站| 欧美成人AAA片一区国产精品| 开心五月深爱五月| 伊人久久丁香五月91| 久久五月婷综合| 一本婷婷丁香久久| 亚洲AV无码影院| 九艹在线| 丁香五月六月久久综合| 九九热这里只有精品12| 深夜激情网| 精品久久艹| 九九热精品在线| 美国十月色婷婷在线观看| 激情五月综合亚洲另类| 婷婷丁香色五月| 99人人干| 97操在线| 91丨九色丨丰满人妖| 人妻AV在线| 五月在线婷色| 伊人午夜综合色啪| 五月天伊人久久久久| 97超碰人人操| JAPANRCEP老熟妇乱子伦视频| 97超碰婷婷五月天| 色一情一乱一乱一区9| 香蕉狠狠爱视频| 婷婷色色狠狠| 婷婷丁香色情| 亚洲中文av| 欧美精品999| 久久性爱网| 大香蕉懂9| 六月丁香六月婷婷欧美| 国产阿姨日皮艹逼内射视频| 美国色五月天婷婷资源站| 人妻视频在线| 无码人妻丰满熟妇奶水区码| 五月花激情网| 五月丁香色婷婷伊人| 99热综合在线观看| 99狠狠| 婷婷深爱五月天| 欧美精品中文字幕亚洲专区| 久久五月情| 无码激情| 婷婷五月天电影在线| 色综合九九| 五月六月丁香激情| 婷婷丁香18| 香蕉97碰碰碰欧美| 日韩色久| 6080av| www.狠狠| 艳妇野外情欲放荡HD| 九月久久婷婷| 六月丁香婷婷尤物| 五月婷婷综合激情网| 国产又黄又爽又色的免费| 五月丁香天堂| www久久五月com| 婷婷色色欧美| 99热这里只有精品9| 丁香五月婷婷综合激情啪啪啪| 99精品人人| 日日干日日s| 色欧美影院| 狠狠干,狠狠操| 色原狠狠综合| 五月天婷婷伊人| 九九综合色综合| 风流少妇A片一区二区蜜桃| www.yw色| 亚洲国产成人裸舞| 综合网天天| 激情婷婷五月综合| 婷婷色系婷色| 狠狠色综合网| 五月婷婷九九久久| 开心五月婷婷激情网| 中文AV在线播放| 五月天丁香啪啪网| 【乱子伦】黄色| 婷婷激情六月视频| 色在线免费观看| 婷婷丁香六月五月天| 天天做天天爱天天要| 亚洲国产99| 97精品综合久久内射| 五月丁香激情综合网官网| 99热久草| 97香蕉人人在线观看| 婷婷久久五月天亚洲欧美国产日韩在线观看| 99视频精品全部观看10| 一级片无码| 超碰三级秋霞| 久操人妻| www.jiujiujiu| 丁香五月婷婷手机| 国产一区二区av免费| 亚洲sesesese| 欧美 日韩 成人在线| 婷婷五月综合基地| 1010日日无码| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 色约约视频一区二区三区四区五区| 六月丁香婷婷拍拍| 97色婷婷成人综合在线观看| 久艹伊| www.人人操人人看人人想人人摸 人人人人操,COM | 99免费| 六月婷婷久久| 色综合五月| 玖玖婷婷色欲| 婷婷玉月丁香五月在线视频| 亚洲亚洲人成综合网络 | 欧美三级韩国三级日本三斤| 丁香五月激情视频在线| 99热久久这里只有精品| 九九热这里精品| www.久久| 午夜丁香| 五月天婷婷视频| 九色无码| 五月激情小说| 九九青草热| 色五月在线观看| 久久精彩视频18| 五月亭亭激情综合| 精品香蕉99久久久久网站| 激情五月天婷婷激情| 激情综合亚洲| 99熟女| 自拍偷窥99热| 91狠狠综合久久| 激情综合色婷婷啪啪六月天| 男人的天堂五月丁香| 久久99网| 九九99香蕉在线视频播放| 亚洲国产精品VA在线看黑人| 国产44页| 色老久久| 香蕉综合在线| 婷婷综合视频| 欧美成人无码高清一区二区三区| 99激情| 国产99精品免费视频| 五月天婷婷久久| 99热在线爱| 五月激情综合网| 天天久久66xxx| 五月天婷婷色综合| 99无码免费视频| 婷婷五月天丁香| 这里只有精品热| 欧美大肥婆大肥BBBBB| 另类图片五月天婷婷| 五月天激情网站| 婷婷六月中文字幕| 色婷婷影视99| 99热丁香| 99re思思| www免费在线视频| 婷婷五月天激情AV影院| 五月丁香激情啪啪网| 九九综合| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 亚洲五月天激情| 夜夜天天久久婷婷| 久久38视频| 国产在这里只有精品| 婷婷 伊人 久久| 日韩久热| 日韩人妻无码一区二区| 婷婷综合九色伊人| 丁香五月在线观看| 久久激情综合| 国色天香成人网| 丁香欧美| 色播播婷婷| 九九99在线免费在线观看视频| 思恩热国产视频右线观看| 大香蕉人妻| 天天天添天天操| 婷婷五月天天激情| 任你爽精品免费视频6| 色色色综合网| 久久婷婷综合五月| 99热亚洲精品| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 色婷婷香蕉在线| 亚洲热综合| 欧美色色色色色色色| 婷婷丁香五月综合| 五月 婷婷 成人| 激情五月,激情综合网| 婷婷激情五月| 五月天色视频| 开心五月综合激情网| 99自拍视频| 五月天俺去也| 久久久久9| 男男野外做爰全过程69| 思思久久99| 丁香五月激情六月欧亚激情综合导航 | 成人片黄网站色大片免费毛片| 26uuu精品国产| 日韩无码专区| 黄色激情网站在线观看| AV九九| www.俺去也com| 久久久久亚洲AV无码网影音先锋| 午夜天堂一区人妻| 丁香五月激情网| yazhou seshipin| 性爱五月婷婷| 强辱丰满人妻HD中文字幕| 99re思思热久久| 婷婷五月丁香综合亚洲 | 婷婷四色五月| 99热精品免费在线观看| 99色激| 丁香深五月婷婷| 东京热免费视频| 开心五月深爱五月丁香五月激情五月 | 色色色777| 伊人大蕉香| 91操操| 丁香五月在线| 五月丁香综合啪啪対白| 92久久| 久99久视频精品| 婷婷五月av| 狠狠插日日干撸| 天天爽夜夜爽夜夜爽精品| 任你干线上免费视频有3吗| 久久ab| 开心激情综合| 26UUU在线观看| 亚洲综合99| 丁香五月婷婷综合激情啪啪啪| 五月天国产| 5月丁香婷婷激情网| 亚洲俩性性爱图片久久第六页| 中文字幕激情综合| 婷婷丁香91综合| 色色色综合色| 五月天婷综合| 婷婷久久亚洲| www.日韩艹| 婷婷色中文字幕| 日本 色综合| 丰满少妇乱A片无码| 操操碰| 五月婷婷五月丁香| 久久99久久99精品免观看软件 | 99久久国产宗和精品1上映| 激情综合五月天| 亚洲视色| 99热这里有精品2| 亚洲小视频免费看| 91精品久久久久久久| 久久99免费视频| 超pen个人视频97| 一起草性爱不卡视频| 婷婷色五月婷| 狠狠色综合网站久久久久| 日韩一区二区三区无码| 色久播播| 玖玖在线视频福利| 国产激情综合| 色综合久久99色| 色婷婷最新域名| 99se丁香| 亚洲春色奇米影视| 亚洲精品一区无码A片| 99亚洲精品视频| 久久作爱| 五月丁香成人| 欧美天堂久久| 婷婷色五月激情强奸四射| 亚洲色优| 婷婷五月六月丁香| 丁香五月成人社区| 婷婷开心激情| 亚州操人在线视频| 亚洲99精品欧美一区| 久久99成人性爱高清视频| 婷婷九月激情网| 深爱五月激情网| 五月久久五月激情| 色婷婷色五月另类综合| 五月丁香久久综合| 最新午夜理论片| 色欲婷婷夜夜| 怡红院院在线导航网| 激情婷婷五月女| 日日骑夜夜撸| 五月天伊人av| 色天天狠狠干| 色高清无码视频| 激情五月五月五月婷婷| 丁香五月六月激情| jiqingliuyuetian| 丁香五月伊人| 五月婷婷,狠狠操| 在线观看欧美| 国产精品久久久久久白浆色欲| 日本啪啪天堂| 偷拍五月丁香| 乱精品一区字幕二区| 午夜精品人妻无码一区二区三区| 日本操B视频在线观看| 激情综合丁香六| 在线观看视频1区| 色色草97| 丁香五月激情网| 九九热自拍| 六月婷婷激情图片| 六月婷婷网| 狠狠色性| 五月婷婷伊人在线| 久热免费视频| 超碰99在线| 婷婷色五月激情| 少妇AB又爽又紧无码网站| 日本强伦片中文字幕免费看| 无码人妻一区二区一牛影视| 五月久久婷婷天堂视频| 欧美日韩成人在线| 天天操天天操| 欧美人妻一区二区| 久久久久久久97| 激情深爱五月天| 三年高清大片免费观看国语| 丁香影院五月综合| 热99免费在线| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 97精品综合久久| WwW色婷婷| 久久久久久久五月| 久久婷婷色| 五月丁香啪啪激情| 色五月色五天免费视频| 91丨九色丨国产打屁股| 熟妇内谢69XXXXXA片| 色爱爱综合网| 91操网| 婷婷五月综合欧美在线播放| 曰日爽日日操| 婷婷香蕉| 人操综合| 粉嫩av懂色av蜜臀av熟妇| 国内裸舞二区| 丁香六月欧美| 色色热| 91精品刘玥| 超碰色综合| 五月婷婷天天色| 天天撸天天干天天插| 色婷婷亚洲| 国产乱妇乱子在线播视频播放网站| 久久香视频| 狠狠综合| 天天撸天天干天天插| 丁香九月婷婷综合| 婷婷伊人久久无码色五月| 综合色吧| 天天插天天很| 五月婷婷偷拍| 色欧美色色色| 99日本黄站| 六月亭亭久久综合激情| 大香蕉网站,大香蕉综合| 成人无码髙潮喷水A片| 日亚二欧美| 色播五月天天| 国产成人高清| 碰99在线| www,8050,午夜三级| 欧美人人草| 亚洲五月婷婷| se99热久久一本| 天天人人天天爽| 九九这里只有精品| 精品欧美性爱超级爽| 久久性操| 亚洲免费99| 色情婷婷五月天| 天天综合色99| 五月丁香视频在线观看| 庭庭久久内射| 激情婷婷在线| 婷婷5月天激情综合| 欧美日韩成人在线网站| 91丨九色丨首页| 伊人春天av| 99性爱| 色婷婷呢狠禁久禁| 亚洲精品色色| xxxx久| 婷婷丁香精品视频在线观看| www.sd-xiangsu.cpm| 操人久久| 96精品国产综合久久久久久| 天天操天天操综合| 99热在线观看精品| 蜜乳人妻一区二区三区| 色五月天在线| 丰满人妻一区二区三区| 色色五月丁香婷婷| 色播五月天激情| 丁香五月综合狠狠| 亚洲精品操一操、噜一噜、摸一摸、爽| 婷婷五月天综合AV| 色五月色五天色情网址| 日日噜狠狠色综合久久| 五月丁香啪啪| 青草青草久热这里只有精品| 五月天丁香成人| 亚洲 成人 电影av在线观看| 玖玖精品资源| 99在线免费观看| 色五月色五天色情网| 亚洲丁香五月天视频| www.lchjjc.com| 激情婷婷综合| 色人久久| 激情婷婷| 大香蕉久| 五月天开心色情网| 色噜噜97视频在线观看| 丁香婷婷婷五月综合色情| 激情色视频| 影音先锋91在线资源站| 天天噜天天爱| 五月综合激情| 玖玖99福利| www婷婷| 婷婷伊人綜合中文字幕小说| 欧美 日韩 成人 在线| 婷婷五月中文字幕| 色五月综合资源推荐| 黄色短视频在线观看| 婷婷五月噜噜| 日操熟女| 婷婷五月天婷婷| 丁香婷婷九月在线| VA婷婷亚洲| .青娱乐天天操B| 天天射综合网天天插| 熟女人妻一区二区三区免费看| 五月丁香色婷婷婷基地| www.91久久| 激情五月激情综合俺也去婷婷小说| 五月婷婷综合激情网| 久久综合五月天| 日韩婷婷| 国产亚洲99| 亚洲欧美成人在线| 久久激情综合| 成人免费120分钟啪啪| 丁香婷婷少妇| 97超碰,人人舔,人人操,人人摸| 激情婷婷狠狠干| 99五月香婷婷丁香在线视频| 色婷婷先锋| yirenjiqingshiping| 亚城区在线| 久热婷婷在线视频| 人人综合久| 91热久久| 狠狠色色| 婷婷五月天激情视频| 999热视频精品99免费在线| 久久精品亚洲一级牲爱综合| 综合超碰熟| 99久精品视频| 婷婷五月av| 天天成人丁香美女AV| 91日在线视频| www.99热这里只有精品| 99热久只有| 影音先锋AV资源男人站| 2025天天爽天天摸| 九九色插| 五月丁香六月天| 91人人操人人| 婷婷99狠狠| 日韩五月天婷婷| 97色五月丁香婷婷| 日本爆乳片手机在线播放| A片一曲| 丁香激情五月天| 夜夜噜夜夜奇| 91窝窝| 九九九九综合| 丁香婷婷免费| 精品9l九九九九九77777| 综合色色婷婷| 中文网AV| 婷婷影视久久| 久久五月天网| 伊人五月天日日夜夜久久久天天| 综合av在线| 日日干天天| 激情五月婷婷| 国产又色又爽又黄又免费| 亚洲天堂无码| 五月天啪啪啪| 久久深爱激情网| 九九色天堂| 丁香六月欧美| 五月婷婷在线观看| 99福利导航| 国精产品一区一区三区免费视频| 日本色色视频| 噜噜色天天开心| 色级停停| 激情综合网五月丁香| 五月综合激情图片| 九九久久高清| 任你草| 天天精品视频免费观看| 激情五月天在线观看婷婷| 色综合色香蕉网| 色5月婷婷色| 欧美五月丁香在线观看| 免费播放片大片| 免费无码毛片一区二区A片| 五月天综合视频网| aaaaaa片| 538任你爽视频不一样的| 色五月av| 大天天伊人| 六月香五月婷| 婷婷精品综合| 99久久户外勾搭| 91超级碰在线视频| 天天操天天日天天爽| 五月丁香六月成人| 热热色色五月天婷婷| 丁香五月香蕉| 欧美日韩aaaa| 婷婷精品| 9 9热这里有精品| 久色网| 久久人妻人人| 天天做天天要天天爽| 9有码中文| 99热在线观看成人| 操骚货在线| 激情六月丁| 五月天婷婷丁香蜜桃91| 激情伊人| Av在线不卡一区| 激情综合网激情五月天| 中文av网站| 综合在线丁香五月| 97色婷婷成人综合在线观看| 久久久久九九九九视屏小说88| 91丨九色丨43老版熟女| 色日本综合| 五月情涩综合婷婷| 五月丁香久久网| 欧美日韩国产伦精品日韩人妻一| 五月丁香婷婷钟和色图| www.五月天| 九九99热| 婷婷五月天黄色小说| 五月婷婷天天色| 另类亚洲2| 99色免费| 九一娱乐在线观看视频| 97五月天| 婷婷激情社区| 久久久无码精品成人A片小说| 五月婷婷色吧!| 亚洲美女婷婷五月天| WWW99热| 亚洲五月天色色| 五月天丁香婷婷久久九| 天天干天天干天天| 色999五月色| 丁香五月社区| 午夜丁香五月天综合| 精品无码色欲AV| 九九视频免费| 色综合激情| 色五月婷婷综合在线| 久久日曰| www91色网站| 久久精品凹凸分类| 精品无码久久久久久久久| 免费亚洲婷婷| 亚洲1区| 丁香五月影视| 欧美乱码国产一级A片| 天天草比天天爽| 天天免费日日夜夜夜夜| 亚洲瑟瑟精品在线| 五月情四婷婷| 天天天操天天天爰| 思思99热热热99| 日韩成人综合网| 久久婷婷综合网| 五月天操逼网| 丁香五月色网| 99操免费视频| 97色婷婷在线观看| 91久久色| 91在线看免费 九九九九| 亚洲AV永久无码影院黑人| 五月丁香亭亭A片| 99九九精品视频推荐| 北条麻妃九九九国产精品视频| 欧美激情综合色综合啪啪五月| www久| 99精品热| 99久久久99久久91熟女| 丁香五月天堂网| 夜夜撸日日操| 99人人干| 色色五月天婷婷| 国产亚洲99久久精品| 婷婷视频网| 五月天激情小说网| 国外亚洲成AV人片在线观看| 无码AV免费精品一区二区三区 | www.日日日.com| 色久婷婷网| www.日日日.com| 夜夜骑日日夜夜| 色宗合久久五月婷婷| 五月天婷婷深深爱| 色五月丁香五月婷婷五月成人网| 99er精品视频| 丁香五月成人av| 丁香综合婷婷五月天| 九九99热| 99在线观看| 成人片在线播放| 天天射影院| 90色免费视频| 久艹久| 九热久| www.激情| 婷婷五月天激情偷拍| 国产精品色色色色| 六月丁香成人网| 婷婷五月天伊人| 玖玖爱伊人| 九九在线视频| 国产一二区爆乳_1国产日韩一区二区三-成人AV | 99久久综合狠狠综合久久| 超碰成人影视| 另类视屏| 日韩无码专区| 婷婷五月天无码熟女| 婷婷综合伊人丁香| 五月激情影视| 亚洲av网站在线观看| 久久九色| 91黄色五月天视频| 伊人9在线| 91狠狠色丁香婷婷综合久久精品| 婷婷成人综合免费视频| Www.婷婷五月| 深爱激情综合| 色综合激情| 免费无码毛片一区二区A片| 久久综合9| 狠狠人妻色综合| 伊人青草成人| 看国产探花操逼三级片| 婷婷色在线播放| 囯产精品久久欠久久久久久九大| 亚洲成人在线在线| 91婷婷五月丁香碰| 一级黄色影片| 日撸夜撸日操| 丁香六月激情四射| 风流少妇A片一区二区蜜桃| 香蕉99网| 色综合激情| 热的无码综合视频| 五月天色色婷婷| 99色在线视频| 五月婷婷之综合激情在线| 亚洲综合网 665566| oVV4WIB3vFi8D| 久久久噜噜噜久久人妻| 丁香五月六月| 五月天天综合网色婷婷| 婷婷五月花| 99福利视频| 91超级碰在线视频| 成人无码髙潮喷水A片| 色婷婷瘦婷婷日韩| 欧美va视频不用播放器的va视频网| 逼里香不卡| 亚洲色99| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 日本久久视频| 就爱啪啪婷婷| 色香久久| 99ree6| 色色色婷婷五月| 99er在线观看| 美女激情综合| 丁香五月欧美婷婷综合| 激情婷婷丁香五月天| 九九热思思热| 人妻九九九九| 丁香五月婷婷av影院| 色九网| 丁香五月亚洲| 丁香五月激情综合| 婷婷色情五月| 日韩欧美四五区| 91超级碰在线视频| 色啪久| 那里有AV网址| 婷婷五月天六月丁香| 桃色成人网| 五月天婷婷免费| 另类视频丁香五月| 狠狠干夜夜干| 亚洲无码激情| 五月丁香激情综合欧美| 日韩啪啪视频| 99在线小视频| 人色五月天婷婷| 色玖玖综合网| 国产免费av网站| 99er免费在线观看| AV在线大香蕉| 黄色AAAAAAA| 色五月开心五月激情五月| 最新av在线观看| 99福利视频导航| 国产裸舞福利资源在线视频| 丁香九九九九| 97偷拍在线视频| 5月婷婷六月丁香| 久久婷婷五月| 激情99| 五月婷婷六月丁香综合| 精品亚洲国产成AV人片传媒| 婷婷五月天奸女| 色色AV色色色东莞| 欧美久久一级内射wwwwww.| 五月天激情国产综合婷婷婷就去爱| 色五月婷婷在线| 综合狠久久| 日本色婷婷综合| 日本色色网| 欧美色色色色色色色色色色| 丁香五月天在线| 江苏少妇性BBB搡BBB爽爽爽 | 五月天久久激情| AV天堂婷婷五月天| 午夜69成人做爰视频| 97色婷婷| 99热亚洲| 五月天另类图片区99| 岛国AV网站| 色无婷婷| 人妻五月天激情开心网| 天天插天天干| 91色久| 日本啪啪网| 久99久99精品免| 综合网视频| 99爱在线| 深爱激情网噜噜色| 性色做爰片在线观看WW| 婷婷五月天av网| 五月婷婷影| 99九九在线| 激情六月丁香| 亚卅毛片| 五月丁香六月激情| 色五月中文字幕| 欧美xx激情视频在线观看| 1024欧美看片| 丁香婷婷久久综合在线| Blackedraw视频一区二区| 五月天欧美 另类小说| 另类小说五月天| 五月丁香激情综合啪| 激情丁香五月婷婷| 99热最新精品| 欧美成人精品A片免费一区99| 99热欧美| 五月婷婷丁香在线| 九九黄色网| 色人久久| 婷婷丁香五月综合| 中文字幕成人| 99小视频在线| 五月婷婷之综合激情| 婷婷在线播放av| 久草热在线视频| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 久久婷婷六月综合国际| 青青福利网| 雪千夏麻豆| 丁香五月区| 六月丁香成人| 色色亚洲| 天天射天天干天插色综合| 乱码操操| 欧美色图45678| 婷婷丁香在线| 激情5月婷婷狠狠干| 国产精品天天狠天天看| 国产精品久久久久久五月天加勒比 | 久久免片| 伊人九九综合| 色六月婷婷| 久久99久久99精品免视看婷婷| 网站免费一站二站| 天天爽—爽| 色五月婷婷777| http://www.sd-xiangsu.com/| 激情淫乱男女| 日本99在线| 婷婷综合五月| 色色婷婷丁香| 99精品在| 99久久五月婷婷| 日韩淑女人妻luan伦激情精品一区二| 成人 视频免费观看网站| 色吧五月婷婷| 婷婷 激情 五月| 色色亚洲99com| 狠狠干婷婷| 五月天婷婷影院| 99爱精品| 五月激情网综合| A1片久久| 97人人射| 日韩狠狠色婷婷| 色婷婷yy久| 啪色综合| 色五月开心婷婷| 另类五月激情| 亚洲操B| 日本久久99| 成 人片 黄 色 大 片| 五月激情婷婷女| 九九热99熟女| 九九99久久| 97超碰9久热婷婷热| 五月天婷婷AV| 99re在线视频精品,这里只有精品18,| 狠狠色丁香| 26uuu亚洲欧美| 丁香五月激情网| 九九综合| 欧美激情综合色丁香婷婷五月天| 日本丁香久在线| 96丁香六月婷婷蜜桃综合久久| 伊人五月网| 久久嘟嘟丁香| www.五月天| ss视频xx91| 五月丁香色婷基地综合久久| 五月综合激情网| 亚洲久热无码| 九色91视频| 青柠影视免费高清电视剧| 色婷狠狠| 婷婷五月综合婷婷| tingtingseav| 日本啪啪天堂| 乱抡小BB| 99色五月| 粉嫩AV久久一区二区三区| 婷婷五月天视频亚洲| 亚洲视频a| 精品九九久久| 亚洲第一第二网站| 精品51XX| 色综合com| 久99久视频精品| 久草大| 五月婷在线视频免费播放| 国产在线黄色| www.金莲av| 综合网色| 亚洲色婷婷视频| 九九热这里只有精品5| 婷婷综合玖玖五月| 99热精品在线播放| 五月天五月天成人网亭亭成人色网站| 婷婷亚洲天堂| Y11111111111少妇电影院| 直接看的av| 欧美日韩AAAA| 丁香六月色婷婷欧美| 九九热99精品| 丁香激情网| www.五月天婷婷| 五月丁香好婷婷A片网 | 五月婷婷 六月丁香| 五月天婷综合| 日本操B视频在线观看| 久久婷婷亚洲| 婷婷丁香五月亚洲| 国产精品久久在线观看技巧| enecarbon-materials.com污K127封锁请涟系@wip1688 | 裸体做A爰片毛片A片免费| 在线视频99| 五月丁香六月婷婷亚洲| 大香蕉av在线| 绿色小导航AV| 亚洲熟妇AV乱码在线观看| 91玖玖| 久色欧美| 丁香色啪综合| 99黄色性生活| 欧美在线视频9| 极品人妻VIDEOSSS人妻| 99视频内射三四| 天天透天天爱| 丁香五月 六月婷婷首页| 人人干人人干骚美女| 五月天婷婷色色网| 亚洲丁香婷婷| 五月丁香六月婷| 欧美精品999| 婷婷五月免费视频| 五月丁香激情六月| 91精品熟女| 日本片日本片祼观看网站在线看中文版网页在线看 | 青青草原伊人网| ztEJj| 99国产精品久久久久久久久久久 | 婷婷五月图片小说视频| 激情综合网五月天天| 成人网址在线观看| 日本视频欧美观看免费| 亚洲六月综合激情久久下卡| 99精品在线| www.超碰在线| 婷婷综合视频| 狠狠狠夜夜夜| 日本在线噜噜| 日日色五月天| 色婷婷五月影视| 开心五月综合激情网| av免费在线网站| 99久久婷婷国产综合亚洲| 精品久久久久成人码免费动漫| 久久精品人妻| 丁香五月性| 97资源欧美日韩大香蕉超碰一区| 国产激情婷婷| 丁香月六月| 婷婷色情小说| 亚洲人人干| 99热在线里有精品| 中海油常州环保涂料有限公司| 变态另类9| 九九这里是免费的视频5| 懂色av蜜臀av粉嫩av永陈冠希| 五月丁香色色色| 五月丁香六月激情| 免费三级黄色| 婷婷丁香社区| 日本乱子人伦在线视频| 成人丁香五月| 婷婷久热| 五月综合视频| 可以免费观看的av| 六月婷婷中文字幕| 97福利视频| 久久久中文| 丁香五月婷婷基地| 色婷五月天| 久九色| 五月婷婷AV| 俺去也五月| 成人丁香| 综合久久婷婷| 五月丁香啪啪啪| 五月丁香在线| 亚洲乱码日产精品BD在线观看| 欧美色五月| 日韩免费视频| 国产熟妇的荡欲午夜视频| 日本少妇裸体做爰高潮片| 亚洲成人在线在线| 日本久久久97|