Android开发转AI Agent:第1天——用Kotlin思维理解LLM API调用
本文记录了一位Android开发者转行AI Agent开发的第一天学习经历。作者通过Kotlin思维理解LLM API调用,发现其本质与Android中的HTTP请求类似。文章详细介绍了环境准备、核心代码实现(仅需3行),并对比了Python与Kotlin的对应写法。重点讲解了Token计费概念,并分享了"先跑通再理解"的学习方法。最后总结指出LLM API本质上就是一次HTTP POST请求,为
Android开发转AI Agent:第1天——用Kotlin思维理解LLM API调用
作者:一位Android开发工程师 | 2026年5月24日
背景:零AI基础,熟悉Kotlin/Java,了解Python基本语法
目标:3个月转行AI Agent应用开发工程师
前言
做了几年Android开发,最近决定转行AI Agent方向。今天是我学习的第一天,目标是:用代码调通第一次LLM API。
作为一个Android开发,我对Python并不熟练。但跑通之后发现——LLM API调用和我们在Android里调HTTP接口的逻辑完全一样。这篇文章就用Kotlin作对照,记录我的理解。
一、环境准备
只装了两个包:
pip install openai python-dotenv
openai:OpenAI兼容的HTTP客户端,负责发请求python-dotenv:从.env文件读取配置,类似Android的BuildConfig
配置.env文件:
DEEPSEEK_API_KEY=sk-xxx
DEEPSEEK_BASE_URL=https://xxx.com/api/v1
二、核心代码(3行就够)
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
# ① 创建客户端
client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url=os.getenv("DEEPSEEK_BASE_URL"),
)
# ② 发送请求
response = client.chat.completions.create(
model="turing/gpt-4o-mini",
messages=[
{"role": "system", "content": "你是一个Android开发助手"},
{"role": "user", "content": "用一句话解释什么是Kotlin协程"},
],
)
# ③ 取结果
print(response.choices[0].message.content)
输出:
Kotlin协程是一种轻量级的并发编程机制,可以简化异步任务的编写...
三、用Kotlin思维逐行理解
作为Android开发者,如果你写过OkHttp或Retrofit请求,Python这边做的事完全一样:
3.1 创建客户端
client = OpenAI(api_key="...", base_url="...")
等价于 Kotlin:
val client = OkHttpClient.Builder()
.addInterceptor { chain ->
chain.proceed(chain.request().newBuilder()
.addHeader("Authorization", "Bearer $apiKey")
.build())
}
.build()
本质就是创建一个带认证头的HTTP客户端。
3.2 构造请求
response = client.chat.completions.create(
model="turing/gpt-4o-mini",
messages=[
{"role": "system", "content": "你是一个Android开发助手"},
{"role": "user", "content": "用一句话解释什么是Kotlin协程"},
],
)
等价于 Kotlin 中的 Retrofit 请求体:
@POST("/chat/completions")
suspend fun chat(@Body request: ChatRequest): ChatResponse
data class ChatRequest(
val model: String,
val messages: List<Message>
)
data class Message(val role: String, val content: String)
其中messages数组里每个元素有两个字段:
| 字段 | 含义 | Android类比 |
|---|---|---|
role: "system" |
设定LLM的"人设"和行为规则 | 类似在build.gradle里配置项目属性 |
role: "user" |
你真正的提问 | 类似API的请求参数 |
3.3 解析响应
response.choices[0].message.content
等价于:
response.body()?.choices?.firstOrNull()?.message?.content
注意这里的链式结构:
response
└─ choices[0] # 第一个候选回答(通常只有一个)
└─ message # 消息对象
└─ content # 实际文本内容
四、一个重要的概念:Token
运行代码后,控制台还输出了一行:
Token 用量:输入: 27 tokens,输出: 47 tokens,总计: 74 tokens
Token ≠ 字数。
- 一个英文单词可能占 1-2 个token
- 一个中文字通常占 1.5-2 个token
- 粗略估算:100 token ≈ 75个英文单词 ≈ 60个中文字
Token是LLM的计费单位,类似于Android开发中API调用的QPS配额。在后面的学习中,Token消耗会直接影响成本和Agent的性能优化。
五、今天的学习方法总结
作为有编程经验的开发者,我采用的方法是:
- 不求精通Python:只学到能跑通代码的程度
- 用已有知识类比对标:每行Python代码都找Kotlin对应写法
- 先跑通再理解:不是看完所有文档才动手,先看到结果再说
- 改一行验证理解:把问题内容换成自己的,重新运行看输出是否不同
六、写给自己的一句话总结
LLM API本质上就是一次HTTP POST请求——把
messages数组发过去,从response.choices[0].message.content取回结果。后面所有Agent、RAG、多轮对话,都在这3行代码的基础上加花样。
下一篇预告
第2天:控制LLM的"创造力"——temperature参数实验。同一个问题,temperature=0和temperature=1.5,输出差异有多大?
本系列记录一位Android开发者转行AI Agent的完整学习过程,欢迎关注交流。
更多推荐


所有评论(0)