話App實(shí)戰(zhàn))
1. 為什么建議從Android入手學(xué)大模型先想清楚這件事很多想學(xué)大模型的朋友第一步就栽在了心理門檻上覺得要懂Transformer、要會(huì)煉丹、要有一張看得過去的GPU否則碰都不配碰。這個(gè)想法把一大部分人攔在了門外。實(shí)際情況是大模型并不是只能在大廠服務(wù)器上跑現(xiàn)代移動(dòng)端設(shè)備尤其是Android手機(jī)已經(jīng)完全具備承載小規(guī)模語言模型推理的能力。把一個(gè)幾GB的量化模型丟進(jìn)手機(jī)跟它聊幾句這件事現(xiàn)在真不難。我自己在帶新人時(shí)經(jīng)常發(fā)現(xiàn)一個(gè)規(guī)律凡是先通過手機(jī)App把大模型跑通、聊上的人后面再回頭學(xué)模型原理、學(xué)部署吸收速度明顯快很多。原因是你腦子里先有了一條完整的鏈路——輸入怎么進(jìn)去、模型怎么處理、結(jié)果怎么返回之后學(xué)任何環(huán)節(jié)都有地方安放。反過來一上來就對(duì)著注意力機(jī)制硬啃往往一個(gè)星期就放棄了。這篇指南面向的是零基礎(chǔ)小白目標(biāo)是讓你在一周內(nèi)完成三件事第一搭好Android開發(fā)環(huán)境能創(chuàng)建和運(yùn)行一個(gè)安卓工程第二理解大模型部署的基本概念學(xué)會(huì)用Ollama這類工具在本地拉起一個(gè)可對(duì)話的模型服務(wù)第三在Android App里訪問這個(gè)服務(wù)做一個(gè)最簡單但能用的AI對(duì)話界面。走完這三步你就已經(jīng)站在Android AI應(yīng)用開發(fā)的起跑線上了后續(xù)無論是深入模型微調(diào)還是轉(zhuǎn)向多模態(tài)應(yīng)用都只是在此基礎(chǔ)上做加法。這套學(xué)習(xí)路徑我不止用過一次可以負(fù)責(zé)任地說是符合大多數(shù)人的認(rèn)知習(xí)慣的先看到東西在跑再理解為什么能跑最后才有動(dòng)力去研究還能怎么改。2. Android開發(fā)環(huán)境的搭建細(xì)節(jié)別在第一步就卡死2.1 Android Studio到底裝哪個(gè)版本Android開發(fā)繞不開Android Studio很多人第一步就卡在下載和安裝上。我的建議是直接到官方開發(fā)者網(wǎng)站下載當(dāng)前正式版注意不是預(yù)覽版。新手沒必要追新穩(wěn)定版就夠了。如果你用的是Windows電腦安裝時(shí)直接選擇默認(rèn)路徑遇到提示下載SDK組件時(shí)也全部同意不要手動(dòng)選這個(gè)選那個(gè)。下載完成后第一次啟動(dòng)會(huì)有幾分鐘的初始化時(shí)間它會(huì)自動(dòng)拉取Gradle和部分構(gòu)建工具。這里有個(gè)非常常見的問題國內(nèi)網(wǎng)絡(luò)環(huán)境下初始化可能特別慢甚至卡在某個(gè)百分比半天不動(dòng)。這不是電腦壞了是網(wǎng)絡(luò)波動(dòng)導(dǎo)致的。處理辦法很簡單——保持耐心或者換一個(gè)網(wǎng)絡(luò)環(huán)境再試。千萬不要在初始化過程中反復(fù)殺進(jìn)程重啟那樣容易把未完成的緩存文件搞壞。2.2 創(chuàng)建自己的第一個(gè)Android工程初始化完成后新建項(xiàng)目的界面會(huì)讓你選擇模板新手一律選Empty Views Activity不要選那些帶Compose的模板。不是說Compose不好而是剛開始學(xué)需要先明白Activity和XML布局這兩個(gè)最基礎(chǔ)的概念。后面熟悉了再遷到Compose成本很低但一上來就用Compose很多東西會(huì)被封裝掉不利于理解。項(xiàng)目創(chuàng)建后你會(huì)看到一堆文件和目錄不用怕大多數(shù)文件你現(xiàn)在不需要?jiǎng)?。只需要知道三個(gè)地方MainActivity.kt是代碼入口activity_main.xml是界面布局AndroidManifest.xml是App的配置文件。這就像你剛搬進(jìn)一間新房子只需要認(rèn)識(shí)門、窗戶和電閘的位置就夠了。創(chuàng)建完工程后用USB連上手機(jī)開啟開發(fā)者選項(xiàng)里的USB調(diào)試點(diǎn)擊運(yùn)行就能把App裝到手機(jī)上。第一次跑通一個(gè)Hello World這個(gè)基礎(chǔ)能力直接決定你后面能不能順暢調(diào)試。2.3 SDK和模擬器到底哪個(gè)更省心不少教程會(huì)讓你用模擬器調(diào)試但我個(gè)人建議只要手頭有真機(jī)就優(yōu)先用真機(jī)。模擬器雖然方便但會(huì)額外占用大量內(nèi)存而且它本身無法完全模擬真實(shí)手機(jī)的網(wǎng)絡(luò)和性能狀況。如果你的手機(jī)是華為、小米、OPPO這類品牌首先要確認(rèn)已經(jīng)解鎖了開發(fā)者選項(xiàng)不同品牌的開啟方式略有差異但套路一致在關(guān)于手機(jī)里連續(xù)點(diǎn)版本號(hào)七次就能激活開發(fā)者選項(xiàng)。激活后USB調(diào)試開關(guān)打開插上數(shù)據(jù)線Android Studio一般會(huì)自動(dòng)識(shí)別設(shè)備。調(diào)試時(shí)有兩個(gè)小細(xì)節(jié)容易被忽略手機(jī)連接電腦后手機(jī)上會(huì)彈出是否允許USB調(diào)試的對(duì)話框一定要點(diǎn)允許。每次修改代碼后點(diǎn)擊運(yùn)行App會(huì)在手機(jī)上重新安裝這個(gè)過程要幾秒到十幾秒別以為卡住了。3. 模型到底怎么選別一上來就啃Llama 33.1 手機(jī)能跑的模型不是看名氣是看體積很多新手第一次接觸大模型開口就是ChatGPT、Llama 3這種級(jí)別的名字。但它們要么不開放要么對(duì)硬件要求極高。真正適合Android端學(xué)習(xí)的是那些經(jīng)過量化和剪枝的小參數(shù)模型。這里先說一個(gè)關(guān)鍵概念模型體積、參數(shù)量和精度之間的關(guān)系。一個(gè)70億參數(shù)7B的模型如果按照FP32精度完整存儲(chǔ)大約需要28GB空間如果降到8位整數(shù)存儲(chǔ)大約8GB再降到4位大概4GB左右。手機(jī)內(nèi)存動(dòng)不動(dòng)12GB、16GB但那是整機(jī)內(nèi)存App能申請(qǐng)到的部分有限所以掛著4GB的模型在內(nèi)存里跑還是會(huì)有壓力。適合入門練習(xí)的一般推薦1.5B到3B的量化模型也就是體積在1GB到2GB之間的那種。不要覺得模型小就低級(jí)處理對(duì)話、問答、基礎(chǔ)文本生成小模型夠用。等你把鏈路跑通了再去試更大的模型那時(shí)候你已經(jīng)知道怎么排查問題了。3.2 量化是什么用生活類比講清楚量化這個(gè)詞聽著嚇人其實(shí)類比一下就懂了。想象你拍了一張4K超清照片占內(nèi)存很大打開也慢現(xiàn)在你把它壓縮成720P的照片看起來還是一樣的場(chǎng)景細(xì)節(jié)稍微少一點(diǎn)但體積小了很多。量化干的就是這件事——把模型的浮點(diǎn)數(shù)參數(shù)比如3.14159265壓縮成近似整數(shù)3或者31415換來體積和速度的大幅優(yōu)化代價(jià)是精度略微降低。在實(shí)際操作中常見的有q2_k、q3_k、q4_k、q5_k、q8_0這些量化格式。q4_k是最多人推薦的體積和效果均衡在手機(jī)上跑流暢度也夠。新手選模型時(shí)看到帶Q4字樣的文件優(yōu)先選它就對(duì)了。3.3 適合新手試水的三個(gè)模型目前生態(tài)里面對(duì)新手比較友好的模型主要有這幾類Qwen2.5系列通義千問中文能力強(qiáng)文檔友好阿里開源社區(qū)活躍。特別推薦Qwen2.5-1.5B和Qwen2.5-3B量化后體積很小手機(jī)上跑沒壓力。Phi系列微軟參數(shù)少但邏輯能力意外地強(qiáng)適合英文場(chǎng)景中文稍弱。TinyLlama體積小適合做實(shí)驗(yàn)但對(duì)話質(zhì)量一般更偏向?qū)W習(xí)用途。我在帶新人時(shí)首選Qwen2.5-1.5B。原因是中文回答自然遇到問題時(shí)容易判斷是模型能力問題還是你代碼問題排錯(cuò)體驗(yàn)好很多。4. 用Ollama把部署這個(gè)概念徹底搞明白4.1 Ollama到底解決什么問題很多教程直接講大模型部署但沒說清楚部署是什么意思。部署說白了就是把一個(gè)訓(xùn)練好的模型文件放到一個(gè)能提供服務(wù)的運(yùn)行環(huán)境里讓別人通過網(wǎng)絡(luò)接口來調(diào)用它。你可以把Ollama理解成一個(gè)裝模型的服務(wù)員——你告訴它我要跑哪個(gè)模型它負(fù)責(zé)把模型文件拉下來、起一個(gè)服務(wù)、監(jiān)聽端口然后你就通過HTTP接口跟這個(gè)模型對(duì)話。為什么推薦用Ollama入門因?yàn)樗押芏嗉夹g(shù)細(xì)節(jié)都封裝好了不需要你手動(dòng)處理CUDA、內(nèi)存分配、模型加載等等。你先用Ollama跑通一次部署-調(diào)用的完整流程心里有了一張全景圖之后不管是切到vLLM、TensorRT-LLM還是其他部署框架都能迅速適應(yīng)。4.2 在電腦上從零拉起一個(gè)模型Ollama支持Windows、macOS和Linux。以Windows為例去官網(wǎng)下載安裝包裝完后打開終端CMD或PowerShell執(zhí)行一行命令ollama run qwen2.5:1.5b第一次執(zhí)行會(huì)自動(dòng)下載模型這個(gè)過程取決于你的網(wǎng)絡(luò)通常要幾分鐘到十幾分鐘。下載完成后會(huì)自動(dòng)進(jìn)入對(duì)話界面你直接輸入文字就能跟模型聊天。退出對(duì)話用/bye??吹侥P驮诮K端里正常回復(fù)恭喜你就完成了一次真正的大模型本地部署。雖然界面簡陋但背后涉及的模型加載、推理、會(huì)話管理全都真實(shí)地跑了一遍。4.3 搞清楚模型服務(wù)的接口地址Ollama啟動(dòng)后會(huì)監(jiān)聽本機(jī)的11434端口。你在終端跟模型聊天的時(shí)候其實(shí)背后的每一次問答都在走HTTP接口。在終端里再開一個(gè)窗口執(zhí)行curl http://localhost:11434/api/generate -d {\model\:\qwen2.5:1.5b\,\prompt\:\你好\}你會(huì)看到一個(gè)JSON格式的返回里面包含了模型生成的回答。這個(gè)接口就是后面Android端要對(duì)接的東西。一個(gè)部署好的模型服務(wù)本質(zhì)上就是一個(gè)HTTP接口這個(gè)認(rèn)知非常重要——它讓部署從抽象概念變成了你能摸到的東西。4.4 端側(cè)部署 vs 服務(wù)端部署兩種形態(tài)都要了解把模型跑在電腦上。然后手機(jī)通過局域網(wǎng)訪問電腦的服務(wù)這叫服務(wù)端部署。還有個(gè)思路是把模型文件直接放到手機(jī)上在App內(nèi)完成推理這叫端側(cè)部署。兩者的區(qū)別用一句話概括服務(wù)端部署吃的“力氣”是電腦的手機(jī)只是個(gè)遙控器端側(cè)部署是手機(jī)自己搬磚好處是沒網(wǎng)也能用壞處是手機(jī)性能和內(nèi)存有限。對(duì)初學(xué)者來說我強(qiáng)烈建議先從服務(wù)端部署入手也就是讓電腦當(dāng)模型服務(wù)器手機(jī)App當(dāng)客戶端。因?yàn)檫@種模式下代碼邏輯更簡單排查問題也容易。5. Android端調(diào)用大模型的三種主流方式5.1 直接調(diào)云端API最快但要注意成本這是最簡單的方式注冊(cè)一個(gè)提供大模型API的平臺(tái)拿到一個(gè)API Key然后在App的代碼里通過HTTP請(qǐng)求調(diào)用。市面上主流的云廠商幾乎都有大模型API服務(wù)有的還提供免費(fèi)額度。優(yōu)點(diǎn)是簡單、無需部署、模型能力強(qiáng)缺點(diǎn)是要聯(lián)網(wǎng)而且免費(fèi)額度用完后要付費(fèi)。對(duì)于新手驗(yàn)證代碼邏輯這種方式可以但我個(gè)人不推薦把它作為第一條學(xué)習(xí)路徑。因?yàn)槟阋坏┝?xí)慣了調(diào)API就永遠(yuǎn)搞不清楚底層發(fā)生了什么出了問題也不知道該從哪里查。5.2 局域網(wǎng)內(nèi)調(diào)自己的Ollama服務(wù)強(qiáng)烈推薦入門這是我認(rèn)為最適合入門的方式。電腦裝好Ollama并把模型跑起來手機(jī)和電腦連著同一個(gè)Wi-Fi然后手機(jī)App通過http://電腦的局域網(wǎng)IP:11434訪問模型接口。整個(gè)過程不花錢代碼邏輯跟調(diào)云端API一樣簡單。這里有一個(gè)關(guān)鍵細(xì)節(jié)Ollama默認(rèn)只監(jiān)聽127.0.0.1意思是它只接受本機(jī)訪問。要讓局域網(wǎng)內(nèi)其他設(shè)備訪問需要配置環(huán)境變量讓Ollama監(jiān)聽0.0.0.0。具體改法在Windows上是設(shè)置系統(tǒng)環(huán)境變量OLLAMA_HOST0.0.0.0然后重啟Ollama服務(wù)。很多人卡在這一步明明App代碼沒問題就是連不上其實(shí)就是Ollama沒開局域網(wǎng)監(jiān)聽。還要注意手機(jī)通過局域網(wǎng)訪問電腦時(shí)防火墻可能會(huì)攔截11434端口。Windows第一次運(yùn)行Ollama時(shí)通常會(huì)彈防火墻提示一定要勾選專用網(wǎng)絡(luò)并允許訪問不然手機(jī)照樣連不上。5.3 端側(cè)推理進(jìn)階的玩法可以先了解一下如果你的手機(jī)配置夠高比如運(yùn)行內(nèi)存12GB以上芯片是驍龍8系或者天璣9000系可以嘗試在手機(jī)本地做推理。Android生態(tài)里目前比較常見的是通過MNN、ncnn這類推理框架來加載量化后的模型文件比如Qwen2.5-1.5B的GGUF量化版。好處是不依賴網(wǎng)絡(luò)數(shù)據(jù)完全本地處理響應(yīng)速度也快代價(jià)是要引入原生層代碼對(duì)JNI和C有一定要求不適合零基礎(chǔ)起步。建議把端側(cè)推理放在第二個(gè)月再學(xué)。先把服務(wù)端部署的鏈路吃透再來看端側(cè)推理你會(huì)覺得很多概念似曾相識(shí)。6. 手寫一個(gè)最簡AI對(duì)話App走完整鏈路6.1 新建項(xiàng)目和依賴配置打開Android Studio新建一個(gè)Empty Views Activity工程。在build.gradle.ktsModule級(jí)別里添加網(wǎng)絡(luò)請(qǐng)求庫的依賴dependencies { implementation(com.squareup.okhttp3:okhttp:4.12.0) implementation(org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3) }同步一下Gradle等依賴下載完成。這里注意Android Studio會(huì)提示你Gradle同步失敗的話多半是網(wǎng)絡(luò)原因多試幾次或者檢查一下代理配置是否正常。6.2 在AndroidManifest里開權(quán)限和明文流量打開AndroidManifest.xml在manifest標(biāo)簽下加上網(wǎng)絡(luò)權(quán)限uses-permission android:nameandroid.permission.INTERNET /然后在application標(biāo)簽里加上允許明文流量的屬性因?yàn)閔ttp://192.168.x.x:11434是明文HTTP協(xié)議Android默認(rèn)禁止App訪問application android:usesCleartextTraffictrue ... 很多新手App一跑就報(bào)錯(cuò)顯示Cleartext HTTP traffic to 192.168.x.x not permitted就是因?yàn)槁┝诉@一步。6.3 寫一個(gè)簡單的對(duì)話界面修改activity_main.xml簡單放一個(gè)輸入框、一個(gè)發(fā)送按鈕、一個(gè)文本框用來顯示對(duì)話內(nèi)容LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthmatch_parent android:layout_heightmatch_parent android:orientationvertical android:padding16dp TextView android:idid/tvContent android:layout_widthmatch_parent android:layout_height0dp android:layout_weight1 android:text對(duì)話內(nèi)容顯示區(qū) / EditText android:idid/etInput android:layout_widthmatch_parent android:layout_heightwrap_content android:hint請(qǐng)輸入內(nèi)容 / Button android:idid/btnSend android:layout_widthmatch_parent android:layout_heightwrap_content android:text發(fā)送 / /LinearLayout6.4 在MainActivity里寫調(diào)用邏輯在MainActivity.kt里核心邏輯是點(diǎn)擊按鈕后把輸入框的內(nèi)容通過OkHttp POST到Ollama的生成接口然后解析返回的JSONclass MainActivity : AppCompatActivity() { private lateinit var tvContent: TextView private lateinit var etInput: EditText // 改成你電腦在局域網(wǎng)中的實(shí)際IP private val baseUrl http://192.168.1.100:11434 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) tvContent findViewById(R.id.tvContent) etInput findViewById(R.id.etInput) val btnSend findViewByIdButton(R.id.btnSend) btnSend.setOnClickListener { val input etInput.text.toString() if (input.isNotEmpty()) { requestModel(input) } } } private fun requestModel(prompt: String) { Thread { try { val client OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) .build() val json { model: qwen2.5:1.5b, prompt: $prompt, stream: false } .trimIndent() val body json.toRequestBody(application/json.toMediaType()) val request Request.Builder() .url($baseUrl/api/generate) .post(body) .build() client.newCall(request).execute().use { response - val result response.body?.string() ?: returnuse val jsonObject JSONObject(result) val answer jsonObject.getString(response) runOnUiThread { tvContent.text 你$prompt\n\nAI$answer } } } catch (e: Exception) { runOnUiThread { tvContent.text 請(qǐng)求失敗${e.message} } } }.start() } }這段代碼為了保持簡潔直接用了一個(gè)子線程做網(wǎng)絡(luò)請(qǐng)求沒有引入太復(fù)雜的架構(gòu)。這個(gè)App雖然簡陋但它確確實(shí)實(shí)跑通了一個(gè)完整的AI對(duì)話鏈路用戶在手機(jī)上輸入文字文字通過HTTP發(fā)送到電腦上的本地模型服務(wù)模型推理完把結(jié)果返回手機(jī)上顯示出來。這里有幾個(gè)點(diǎn)值得展開說一下超時(shí)時(shí)間為什么要設(shè)到60秒大模型推理不是瞬間完成的1.5B的模型在CPU上跑一句話可能要幾秒到十幾秒。如果你把超時(shí)設(shè)成10秒大概率會(huì)經(jīng)常超時(shí)報(bào)錯(cuò)。stream: false是關(guān)閉流式輸出接口會(huì)等模型全部生成完一次性返回結(jié)果。對(duì)新手來說這樣解析起來簡單。等你熟練了可以改成stream: true做流式輸出讓文字一個(gè)一個(gè)蹦出來體驗(yàn)會(huì)好很多。為什么用Thread而不是協(xié)程這段代碼為了減少概念負(fù)擔(dān)直接用Java的Thread。實(shí)際上工業(yè)生產(chǎn)會(huì)用協(xié)程加ViewModel但新手先把鏈路跑通最重要。6.5 在真機(jī)上調(diào)試的兩個(gè)常見問題第一個(gè)問題App裝到手機(jī)上打不開或者打開就閃退。先看Logcat里有沒有報(bào)錯(cuò)一般會(huì)是權(quán)限問題或者布局問題。權(quán)限問題檢查Manifest布局問題檢查id引用是否正確。第二個(gè)問題代碼沒問題但請(qǐng)求一直失敗。這時(shí)候要分三步走在電腦上確認(rèn)curl http://localhost:11434/api/generate能正常返回確認(rèn)Ollama監(jiān)聽了0.0.0.0在手機(jī)上用瀏覽器直接訪問http://電腦IP:11434試試如果能打開說明網(wǎng)絡(luò)通了打不開就說明IP或防火墻有問題。7. 小白最容易被卡住的幾個(gè)坑和排查思路7.1 Gradle下載慢導(dǎo)致項(xiàng)目一直構(gòu)建失敗這是所有Android新手遇到的第一個(gè)坎。Android Studio創(chuàng)建項(xiàng)目后會(huì)去拉Gradle發(fā)行版文件幾百M(fèi)B網(wǎng)絡(luò)不好時(shí)能卡一整天。我的經(jīng)驗(yàn)是不要盲目相信改鏡像源這類操作先檢查你自己網(wǎng)絡(luò)環(huán)境是否穩(wěn)定。如果你確實(shí)想改可以去gradle-wrapper.properties里把distributionUrl替換成國內(nèi)可訪問的鏡像地址。這是個(gè)通用做法網(wǎng)上有很多現(xiàn)成鏡像自己按需取用即可。但需要注意不同鏡像的更新速度不一致有時(shí)候用公共鏡像反而會(huì)帶來版本不匹配的新問題。7.2 Ollama模型下載到一半失敗ollama run的時(shí)候模型下載中斷重新執(zhí)行命令通常會(huì)斷點(diǎn)續(xù)傳不用擔(dān)心。但如果反復(fù)失敗建議看看是不是磁盤空間不足——模型文件本身就幾個(gè)GB加上臨時(shí)文件可能更多。下載過程中不要頻繁CtrlC給它一點(diǎn)耐心。7.3 手機(jī)訪問電腦IP超時(shí)首先要確保手機(jī)和電腦在同一個(gè)局域網(wǎng)下手機(jī)連的Wi-Fi和電腦插的網(wǎng)線是同一條路由器的而不是手機(jī)走流量。然后在電腦上執(zhí)行ipconfig查看本機(jī)IP以192.168.x.x開頭的那串一般就是局域網(wǎng)IP。其次檢查防火墻。Windows防火墻默認(rèn)對(duì)新進(jìn)程彈窗如果你當(dāng)時(shí)手快點(diǎn)了取消端口就被攔住了。可以在防火墻的高級(jí)設(shè)置里手動(dòng)添加入站規(guī)則放行TCP 11434端口。最后有些路由器開啟了AP隔離功能導(dǎo)致同一Wi-Fi下的設(shè)備之間無法互訪。如果真的遇到這個(gè)問題登錄路由器后臺(tái)關(guān)掉AP隔離就好。7.4 模型回復(fù)亂碼或者答非所問中文場(chǎng)景下選了英文為主的模型或者模型量化程度太高導(dǎo)致效果崩壞。1.5B的模型本來能力就有限千萬別拿它跟GPT-4比。問它11等于幾這種問題大概率能答對(duì)但讓它寫一篇完整的文章效果就一言難盡了。這是模型能力邊界問題不是代碼問題。7.5 想學(xué)得更深該按什么順序走走完上面這些步驟你已經(jīng)有了一條完整的端到端鏈路。接下來要往深走我建議按這個(gè)順序先學(xué)Python基礎(chǔ)因?yàn)榇竽P蜕鷳B(tài)里的工具和框架大多是Python寫的再學(xué)大模型基礎(chǔ)理論比如Token、上下文窗口、微調(diào)這些概念然后學(xué)LangChain這類編排框架學(xué)會(huì)把多個(gè)模型能力組合起來最后再研究模型微調(diào)和部署優(yōu)化這時(shí)候你已經(jīng)有足夠多的經(jīng)驗(yàn)來支撐你理解那些抽象的概念了。很多人在第一步就放棄了不是因?yàn)樗麄儽慷且驗(yàn)樗麄兲^了先跑通再理解的過程。直接啃理論書就像沒摸過方向盤的人先學(xué)發(fā)動(dòng)機(jī)原理學(xué)得再多也開不了車。反過來先開起來再回去學(xué)原理每個(gè)知識(shí)點(diǎn)都有了鮮活的畫面感。我現(xiàn)在帶人的時(shí)候都是讓他先做今天這篇指南里的內(nèi)容做完再去看理論效果立竿見影。一個(gè)人如果連一次完整的模型調(diào)用都沒做過跟他講上下文窗口、推理優(yōu)化都是空對(duì)空。而一旦你親手調(diào)通過一次AI對(duì)話App后面所有這些概念都是順?biāo)浦鄣氖?。說到底Android和AI大模型的組合是一個(gè)極佳的學(xué)習(xí)入口。它逼著你同時(shí)掌握客戶端開發(fā)、網(wǎng)絡(luò)通信、模型部署這三塊能力但又不像純后端開發(fā)那樣要求你一開始就精通Linux和容器。把這條鏈路玩熟了你在整個(gè)AI應(yīng)用開發(fā)領(lǐng)域就已經(jīng)有了非常扎實(shí)的立足點(diǎn)。