者極簡入門大模型應(yīng)用開發(fā):從本地部署到RAG實戰(zhàn))
1. 從“Java開發(fā)”到“大模型應(yīng)用開發(fā)”的認(rèn)知躍遷最近和不少做Java后端的朋友聊天發(fā)現(xiàn)一個挺有意思的現(xiàn)象大家普遍對“大模型應(yīng)用開發(fā)”既感到焦慮又覺得無從下手。焦慮的是感覺不學(xué)點AI就要被淘汰了無從下手的是面對鋪天蓋地的概念——RAG、Agent、微調(diào)、LangChain、Spring AI——完全不知道從哪里開始感覺和熟悉的Spring Boot、MyBatis是另一個世界的東西。我完全理解這種感受因為我也是從純后端開發(fā)轉(zhuǎn)過來的。今天我就結(jié)合自己踩過的坑和實際項目經(jīng)驗給各位Java背景的開發(fā)者梳理一條從易到難、可快速上手的“大模型應(yīng)用開發(fā)”極簡入門路線。這條路線的核心思想是不要一上來就想著去訓(xùn)練或者微調(diào)一個大模型那不是應(yīng)用開發(fā)者的首要任務(wù)。我們的核心價值在于利用現(xiàn)有的、強大的大模型能力結(jié)合我們擅長的工程化、架構(gòu)設(shè)計和業(yè)務(wù)邏輯去解決實際的業(yè)務(wù)問題。你可以把它理解為以前我們調(diào)用的是支付寶的支付API、微信的登錄API現(xiàn)在我們調(diào)用的是更智能的“大腦API”。我們的工作從“業(yè)務(wù)邏輯編排”部分轉(zhuǎn)向了“智能邏輯編排”?;谶@個思路整個學(xué)習(xí)路徑可以清晰地分為四個階段環(huán)境與認(rèn)知準(zhǔn)備 → 基礎(chǔ)API調(diào)用與對話應(yīng)用 → RAG知識庫應(yīng)用實戰(zhàn) → Agentic智能體應(yīng)用進階。我會在每個階段告訴你重點學(xué)什么、用什么工具、以及如何與你已有的Java技能結(jié)合。2. 第一階段環(huán)境準(zhǔn)備與核心概念掃盲在寫第一行代碼之前我們需要先把“場子”搭起來并把幾個最核心的概念搞清楚。這個階段的目標(biāo)是消除陌生感讓你能本地運行起一個大模型并理解后續(xù)所有操作的基礎(chǔ)。2.1 本地大模型部署從Ollama開始對于初學(xué)者我強烈不建議一上來就去申請什么GPT-4的API或者折騰復(fù)雜的云端GPU服務(wù)器。成本高、網(wǎng)絡(luò)不穩(wěn)定而且不利于我們理解模型本身。最好的起點是在本地電腦上運行一個輕量級開源模型。這里首推Ollama。Ollama是一個極其簡單的本地大模型運行和管理的工具它把模型下載、加載、運行、提供API接口這些繁瑣步驟全部打包好了你只需要幾條命令。為什么選它第一它支持Mac、Windows、Linux安裝就是下載一個安裝包或者一行命令的事。第二它有豐富的模型庫從很小的到能力不錯的都有。第三它直接提供了類OpenAI的API接口這意味著你以后換到真正的OpenAI API時代碼幾乎不用改。實操步驟安裝Ollama去官網(wǎng)下載對應(yīng)操作系統(tǒng)的安裝包安裝過程無腦下一步。拉取模型打開終端或命令行輸入ollama run qwen2.5:0.5b。這個命令會下載并運行一個只有5億參數(shù)的“千問”模型非常小幾乎任何電腦都能跑起來。qwen2.5:0.5b就是模型名稱和標(biāo)簽。驗證運行運行后會進入一個交互式對話界面你可以直接輸入“你好”它會用中文回復(fù)你。恭喜你的第一個本地大模型已經(jīng)跑起來了探索更多模型你可以嘗試ollama run llama3.2:1bMeta的小模型或ollama run qwen2.5:7b能力更強的7B模型需要電腦有8G以上空閑內(nèi)存。用ollama list查看已下載的模型。注意運行更大的模型如7B、14B需要足夠的內(nèi)存。如果遇到insufficient memory報錯要么加內(nèi)存要么就老老實實用小參數(shù)模型如0.5B、1B做學(xué)習(xí)和開發(fā)測試完全夠用。應(yīng)用開發(fā)階段我們更關(guān)注如何“用”模型而不是“跑”多大的模型。2.2 核心概念五分鐘速通在模型跑起來的時候我們快速過一下接下來會頻繁出現(xiàn)的幾個詞大模型 (Large Language Model, LLM)你就把它理解為一個“萬事通”的文本生成器。你給它一段輸入提示詞它根據(jù)海量數(shù)據(jù)訓(xùn)練出的規(guī)律生成一段相關(guān)的輸出。它不“懂”知識只是概率預(yù)測。我們本地跑的Qwen、Llama就是具體的模型實例。API (Application Programming Interface)模型的能力如何被我們的程序調(diào)用就是通過API。Ollama本地運行后會在http://localhost:11434提供一個API服務(wù)。我們寫的Java程序通過發(fā)送HTTP請求到這個地址就能讓模型干活。以后用阿里云、百度云、OpenAI的模型也是類似的道理只是換一個API地址和密鑰。提示詞 (Prompt)這是你與模型溝通的“指令”。它的質(zhì)量直接決定模型輸出的質(zhì)量。不是簡單地把問題丟進去而是需要精心設(shè)計。例如比起“寫一篇散文”更好的提示詞是“你是一位優(yōu)秀的散文家請以‘故鄉(xiāng)的秋天’為題寫一篇300字左右、情感細(xì)膩、略帶傷感的散文?!盧AG (Retrieval-Augmented Generation檢索增強生成)這是當(dāng)前大模型應(yīng)用落地的核心范式。核心思想是模型本身的知識可能過時或不專業(yè)我們不讓它憑空編造而是先從我們自己的知識庫比如公司文檔、產(chǎn)品手冊、法律條文里找到相關(guān)材料然后把“問題材料”一起交給模型讓它基于這些材料生成答案。這樣答案更準(zhǔn)確、更可控。你可以把它想象成一個“開卷考試”模型可以翻看我們提供的參考資料再答題。Agent (智能體)這不是一個具體工具而是一種設(shè)計模式。一個Agent可以理解為一個能自主調(diào)用工具來完成復(fù)雜任務(wù)的AI程序。比如你告訴Agent“幫我分析一下上周的銷售數(shù)據(jù)并寫一份總結(jié)報告”它可能會自主執(zhí)行以下步驟1. 調(diào)用數(shù)據(jù)庫查詢工具獲取數(shù)據(jù)2. 調(diào)用數(shù)據(jù)分析工具生成圖表3. 調(diào)用大模型結(jié)合數(shù)據(jù)和圖表撰寫報告。Agent的核心是“規(guī)劃-執(zhí)行-反思”的循環(huán)能力。理解了這些你就有了一個基本的地圖。接下來我們開始用Java來真正“驅(qū)動”這個模型。3. 第二階段用Java連接大模型構(gòu)建第一個對話應(yīng)用現(xiàn)在我們進入熟悉的Java世界。目標(biāo)是用我們擅長的Java代碼去調(diào)用剛才在本地運行的Ollama模型實現(xiàn)一個簡單的命令行或Web對話應(yīng)用。這里有兩條路原生的HTTP客戶端和Spring AI。3.1 方案一使用HTTP客戶端直連理解本質(zhì)我建議所有人都從這里開始因為它能讓你最清晰地理解底層發(fā)生了什么。我們使用Java里常見的HttpClientJDK 11自帶或OkHttp3。核心邏輯構(gòu)造一個符合Ollama API格式的JSON請求發(fā)送POST請求到http://localhost:11434/api/generate然后解析返回的JSON響應(yīng)。Maven依賴如果使用OkHttp3dependency groupIdcom.squareup.okhttp3/groupId artifactIdokhttp/artifactId version4.12.0/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.15.2/version /dependency一個極簡的示例代碼片段import okhttp3.*; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; public class OllamaSimpleClient { private static final String OLLAMA_URL http://localhost:11434/api/generate; private static final MediaType JSON MediaType.get(application/json; charsetutf-8); private final OkHttpClient client new OkHttpClient(); private final ObjectMapper mapper new ObjectMapper(); public String chat(String model, String prompt) throws Exception { MapString, Object requestBody new HashMap(); requestBody.put(model, model); // 例如 qwen2.5:0.5b requestBody.put(prompt, prompt); requestBody.put(stream, false); // 先關(guān)閉流式輸出簡化處理 String json mapper.writeValueAsString(requestBody); RequestBody body RequestBody.create(json, JSON); Request request new Request.Builder().url(OLLAMA_URL).post(body).build(); try (Response response client.newCall(request).execute()) { if (!response.isSuccessful()) throw new RuntimeException(Unexpected code response); String responseBody response.body().string(); // 解析響應(yīng)提取 response 字段 MapString, Object result mapper.readValue(responseBody, Map.class); return (String) result.get(response); } } public static void main(String[] args) throws Exception { OllamaSimpleClient client new OllamaSimpleClient(); String answer client.chat(qwen2.5:0.5b, 為什么天空是藍(lán)色的); System.out.println(模型回答 answer); } }運行這段代碼如果你的Ollama服務(wù)正在運行你就會在控制臺看到模型的回答。這個過程和你調(diào)用任何一個第三方RESTful API沒有任何本質(zhì)區(qū)別。這就是大模型應(yīng)用開發(fā)最基礎(chǔ)的一環(huán)API調(diào)用。3.2 方案二使用Spring AI框架提升效率如果你熟悉Spring生態(tài)那么Spring AI絕對是你的福音。它就像Spring Data對數(shù)據(jù)庫的操作一樣為AI模型調(diào)用提供了一層優(yōu)雅的抽象。你不需要再手動拼裝JSON、解析響應(yīng)而是通過聲明式的AiClient和自動配置來完成。首先引入Spring AI的依賴。注意Spring AI的版本迭代較快目前主推的是基于Spring Boot 3.x的版本。!-- 在Spring Boot項目中 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-ollama-spring-boot-starter/artifactId !-- 請查看Spring AI官方文檔獲取最新版本號 -- version0.8.1/version /dependency然后在application.yml中配置spring: ai: ollama: base-url: http://localhost:11434 # Ollama服務(wù)地址 chat: options: model: qwen2.5:0.5b # 默認(rèn)使用的模型最后在代碼中注入AiClient并使用import org.springframework.ai.client.AiClient; import org.springframework.ai.client.AiResponse; import org.springframework.ai.prompt.Prompt; import org.springframework.ai.prompt.SystemPromptTemplate; import org.springframework.ai.prompt.messages.UserMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController public class ChatController { Autowired private AiClient aiClient; GetMapping(/chat) public String chat(RequestParam String message) { // 構(gòu)建一個簡單的用戶消息Prompt Prompt prompt new Prompt(new UserMessage(message)); // 調(diào)用模型 AiResponse response aiClient.generate(prompt); // 提取結(jié)果 return response.getGeneration().getText(); } // 更復(fù)雜的例子使用System消息設(shè)定角色 GetMapping(/chat/poet) public String chatWithPoet(RequestParam String topic) { String systemText 你是一位才華橫溢的唐代詩人擅長創(chuàng)作七言絕句。請根據(jù)用戶提供的主題創(chuàng)作一首符合格律、意境深遠(yuǎn)的詩。; SystemPromptTemplate systemPromptTemplate new SystemPromptTemplate(systemText); Prompt prompt new Prompt(systemPromptTemplate.createMessage(), new UserMessage(主題 topic)); AiResponse response aiClient.generate(prompt); return response.getGeneration().getText(); } }啟動Spring Boot應(yīng)用訪問/chat?message你好和/chat/poet?topic明月你就能得到模型的回應(yīng)??梢钥吹絊pring AI極大地簡化了調(diào)用流程讓你能更專注于業(yè)務(wù)邏輯比如設(shè)計提示詞、處理返回結(jié)果而不是底層的HTTP通信。實操心得我建議你先用方案一HTTP客戶端寫一個簡單的demo理解整個數(shù)據(jù)流。然后再用方案二Spring AI進行正式項目開發(fā)。這能讓你在遇到Spring AI的配置或封裝問題時有能力進行底層調(diào)試。永遠(yuǎn)不要讓自己的技術(shù)棧完全建立在你不理解的黑盒之上。4. 第三階段構(gòu)建你的第一個RAG知識庫應(yīng)用掌握了基礎(chǔ)調(diào)用我們就可以解決大模型“胡說八道”和“知識陳舊”的核心痛點了。這就是RAG的用武之地。我們來構(gòu)建一個最簡單的RAG應(yīng)用一個基于本地文檔的問答系統(tǒng)。4.1 RAG的核心工作流程拆解一個典型的RAG流程分為索引Indexing和檢索生成Retrieval Generation兩個階段索引階段預(yù)處理知識庫加載文檔從各種來源TXT、PDF、Word、網(wǎng)頁、數(shù)據(jù)庫加載文本。分割文本大模型有上下文長度限制比如4096個token。不能把整本書塞給它。需要把長文檔按語義切分成大小合適的“文本塊”Chunk比如每塊500字。向量化嵌入這是最關(guān)鍵的一步。使用一個“嵌入模型”Embedding Model將每個文本塊轉(zhuǎn)換成一個高維度的數(shù)值向量比如768維。這個向量代表了文本的語義信息。語義相近的文本其向量在空間中的距離也相近。存儲向量將這些向量和對應(yīng)的原始文本塊存儲到專門的“向量數(shù)據(jù)庫”中。檢索生成階段用戶提問時用戶提問。向量化問題使用同一個嵌入模型將用戶的問題也轉(zhuǎn)換成一個向量。相似度檢索在向量數(shù)據(jù)庫中尋找與“問題向量”最相似的幾個“文本塊向量”通常使用余弦相似度計算。這一步就是“開卷考試”中的“翻書找答案”。組合提示詞將找到的最相關(guān)的幾個文本塊作為“參考材料”和用戶原始問題一起組合成一個新的、更詳細(xì)的提示詞。例如“請基于以下材料回答問題材料1... 材料2... 問題...”。調(diào)用大模型生成將這個組合后的提示詞發(fā)給大模型讓它基于材料生成最終答案。4.2 基于Spring AI 本地向量庫的極簡實現(xiàn)Spring AI目前對RAG有初步支持我們可以用它快速搭建一個原型。這里我們使用一個簡單的內(nèi)存向量庫避免引入復(fù)雜的外部數(shù)據(jù)庫。步驟1添加依賴除了之前的Ollama依賴還需要嵌入模型和向量存儲的依賴。我們可以繼續(xù)用Ollama提供的嵌入模型。dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-ollama-spring-boot-starter/artifactId version0.8.1/version /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-transformers-spring-boot-starter/artifactId version0.8.1/version /dependency !-- 使用簡單的內(nèi)存向量庫 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-vector-store-simple/artifactId version0.8.1/version /dependency步驟2準(zhǔn)備知識庫文檔在項目的resources目錄下創(chuàng)建一個docs文件夾里面放一些.txt文件比如company_rules.txt內(nèi)容可以是公司的請假制度、報銷流程等。步驟3編寫RAG服務(wù)核心代碼import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; import org.springframework.ai.reader.TextReader; import org.springframework.ai.transformer.splitter.TokenTextSplitter; import org.springframework.ai.vectorstore.SimpleVectorStore; import org.springframework.ai.vectorstore.VectorStore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.stereotype.Service; import jakarta.annotation.PostConstruct; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; Service public class SimpleRagService { Autowired private EmbeddingClient embeddingClient; // 嵌入模型客戶端Spring AI會自動配置使用Ollama private VectorStore vectorStore; // 項目啟動時加載并索引文檔 PostConstruct public void init() throws IOException { // 1. 初始化一個簡單的內(nèi)存向量庫 this.vectorStore new SimpleVectorStore(embeddingClient); // 2. 加載資源文件下的所有txt文檔 PathMatchingResourcePatternResolver resolver new PathMatchingResourcePatternResolver(); Resource[] resources resolver.getResources(classpath:docs/*.txt); ListDocument documents new java.util.ArrayList(); for (Resource resource : resources) { TextReader textReader new TextReader(resource); textReader.getCustomMetadata().put(filename, resource.getFilename()); documents.addAll(textReader.get()); } // 3. 分割文本將長文檔切成小塊 TokenTextSplitter splitter new TokenTextSplitter(500, 100); // 每塊約500token重疊100token ListDocument splitDocuments splitter.apply(documents); // 4. 將分割后的文檔存入向量庫會自動調(diào)用EmbeddingClient生成向量 vectorStore.add(splitDocuments); System.out.println(知識庫文檔索引完成共 splitDocuments.size() 個文本塊。); } // RAG檢索與生成 public String ragQuery(String question) { // 1. 相似度檢索在向量庫中查找與問題最相關(guān)的4個文本塊 ListDocument similarDocuments vectorStore.similaritySearch(question, 4); // 2. 構(gòu)建增強后的提示詞 StringBuilder context new StringBuilder(); for (Document doc : similarDocuments) { context.append(doc.getContent()).append(\n---\n); } String enhancedPrompt String.format( 請嚴(yán)格根據(jù)以下提供的信息來回答問題。如果信息中沒有明確答案請直接說“根據(jù)現(xiàn)有資料無法回答”。 信息 %s 問題%s 答案 , context.toString(), question); // 3. 調(diào)用大模型生成答案這里需要注入AiClient代碼略 // AiResponse response aiClient.generate(new Prompt(enhancedPrompt)); // return response.getGeneration().getText(); return 【模擬答案】基于檢索到的信息答案是... 提示詞已構(gòu)建:\n enhancedPrompt; } }步驟4創(chuàng)建控制器暴露接口RestController RequestMapping(/rag) public class RagController { Autowired private SimpleRagService ragService; GetMapping(/ask) public String ask(RequestParam String q) { return ragService.ragQuery(q); } }啟動應(yīng)用訪問/rag/ask?q公司年假有多少天。如果你的company_rules.txt文檔里有相關(guān)描述RAG服務(wù)就會先找到那段話然后讓模型基于那段話生成答案。踩坑實錄與核心要點文本分割是門藝術(shù)TokenTextSplitter的參數(shù)塊大小、重疊大小極大影響效果。塊太大可能包含無關(guān)信息塊太小可能割裂語義。通常需要根據(jù)你的文檔類型技術(shù)文檔、小說、法律條文進行調(diào)優(yōu)。重疊是為了避免一個答案恰好被切到兩個塊中間。嵌入模型的選擇我們這里偷懶用了Ollama的嵌入模型通常是nomic-embed-text對于中文場景可以探索更好的開源嵌入模型如bge-large-zh但需要單獨部署。Spring AI也支持OpenAI的嵌入API效果更好但需付費。向量數(shù)據(jù)庫選型我們這個例子用了內(nèi)存存儲重啟就沒了。生產(chǎn)環(huán)境必須用持久化的向量數(shù)據(jù)庫如PgVectorPostgreSQL插件、Milvus、Qdrant、Chroma等。Spring AI對其中一些有starter支持。提示詞工程上面例子里的提示詞“請嚴(yán)格根據(jù)以下提供的信息...”非常關(guān)鍵它強制模型“照本宣科”減少幻覺。這是RAG提示詞的核心技巧。5. 第四階段邁向Agentic智能體與生產(chǎn)級考量當(dāng)你成功構(gòu)建了RAG應(yīng)用意味著你已經(jīng)掌握了當(dāng)前大模型應(yīng)用開發(fā)最主流、最實用的模式。接下來可以朝著更自動化的Agent智能體和更生產(chǎn)級的架構(gòu)去探索。5.1 從RAG到Agentic RAG傳統(tǒng)的RAG是被動的用戶問系統(tǒng)檢索然后生成。Agentic RAG則讓系統(tǒng)變得更主動。例如用戶問“我們公司去年在云計算方面的投入和收益情況如何”一個簡單的RAG可能直接在財務(wù)文檔里搜索“云計算 投入”。而一個Agentic RAG可能會規(guī)劃理解問題拆解成子任務(wù)a) 查找去年財務(wù)報告b) 在報告中定位“云計算”或“IT基礎(chǔ)設(shè)施”相關(guān)章節(jié)c) 提取投入成本數(shù)據(jù)d) 查找云計算業(yè)務(wù)帶來的營收數(shù)據(jù)e) 進行對比分析。執(zhí)行針對每個子任務(wù)可能調(diào)用不同的工具或檢索策略。比如任務(wù)a和b用向量檢索任務(wù)c和d可能用更精確的關(guān)鍵詞提取或表格解析工具。反思檢查提取到的數(shù)據(jù)是否完整、是否矛盾必要時重新規(guī)劃或檢索。生成綜合所有信息形成一份結(jié)構(gòu)化的分析報告。Spring AI 2.0 版本開始大力推廣Function Calling和Agent的概念。你可以通過定義Bean類型的Tool工具讓AiClient在對話中自主選擇調(diào)用。例如定義一個查詢天氣的Tool一個查詢數(shù)據(jù)庫的Tool。當(dāng)用戶說“北京天氣怎么樣順便看看我今天的日程”模型可以自主決定先調(diào)用天氣Tool再調(diào)用日程查詢Tool最后把結(jié)果總結(jié)給用戶。這就是智能體的雛形。5.2 生產(chǎn)級架構(gòu)與學(xué)習(xí)路線延伸要把Demo變成真正可用的服務(wù)還需要考慮很多工程問題穩(wěn)定性與監(jiān)控大模型API調(diào)用可能超時、限流。需要實現(xiàn)重試、熔斷、降級策略可用Resilience4j或Sentinel。監(jiān)控每次調(diào)用的耗時、token消耗、費用。性能優(yōu)化緩存對常見的、不變的問題答案進行緩存避免重復(fù)調(diào)用模型和檢索。異步處理對于耗時的文檔索引、復(fù)雜Agent任務(wù)采用異步隊列處理。流式響應(yīng)像ChatGPT一樣一個字一個字地輸出提升用戶體驗。Ollama和Spring AI都支持。安全與合規(guī)輸入輸出過濾防止用戶輸入惡意提示詞Prompt Injection導(dǎo)致模型越獄或輸出有害內(nèi)容。數(shù)據(jù)隱私敏感數(shù)據(jù)不上傳公有云API用本地或私有化部署的模型。審計日志記錄所有的用戶問答用于效果分析和合規(guī)審查。持續(xù)學(xué)習(xí)與迭代評估與反饋建立評估體系收集用戶對回答的“點贊/點踩”用于優(yōu)化檢索策略和提示詞。深入微調(diào)當(dāng)通用模型在特定領(lǐng)域如醫(yī)療、法律表現(xiàn)不佳時可以考慮用LlamaFactory等工具對開源模型進行領(lǐng)域微調(diào)但這需要數(shù)據(jù)、算力和更深的專業(yè)知識。5.3 給Java開發(fā)者的學(xué)習(xí)資源與心態(tài)建議學(xué)習(xí)路線圖總結(jié)基礎(chǔ)認(rèn)知理解LLM、Prompt、RAG、Agent概念。環(huán)境搭建用Ollama在本地跑通一個小模型。API調(diào)用用Java HTTP Client或Spring AI連接模型完成簡單對話。RAG實戰(zhàn)用Spring AI 向量數(shù)據(jù)庫從Simple到PgVector構(gòu)建知識庫問答。Agent進階學(xué)習(xí)Spring AI的Function Calling設(shè)計工具鏈構(gòu)建能自動執(zhí)行任務(wù)的智能體。生產(chǎn)深化關(guān)注性能、安全、監(jiān)控、評估等工程化問題。資源推薦官方文檔永遠(yuǎn)是第一選擇Spring AI項目文檔、Ollama文檔。開源項目參考在GitHub上搜索spring-ai rag example、qwen java demo等關(guān)鍵詞參考別人的實現(xiàn)。社區(qū)與資訊關(guān)注Hugging Face、知乎、掘金上相關(guān)領(lǐng)域的技術(shù)博主。心態(tài)建議 別被“AI”、“大模型”這些詞嚇到。對于應(yīng)用層開發(fā)者來說它本質(zhì)上是一種新的、能力更強的“外部服務(wù)”。我們過去集成短信服務(wù)、支付服務(wù)、地圖服務(wù)現(xiàn)在集成“智能服務(wù)”。你的Java功底、你的系統(tǒng)設(shè)計能力、你的工程化思維不僅沒有過時反而因為要處理AI的不確定性幻覺、延遲、成本而變得更加重要。從今天開始動手跑通第一個本地模型寫出第一行調(diào)用代碼你就已經(jīng)上路了。這條路和你當(dāng)年學(xué)習(xí)Spring Boot、學(xué)習(xí)微服務(wù)一樣充滿挑戰(zhàn)但也充滿機遇。