Android开发转AI Agent:第7天——写一个能用的Kotlin代码审查工具
·
作者:一位Android开发工程师 | 2026年6月6日
系列:第一阶段收官,把前6天学的全部串起来
前言
前6天我把 LLM API 调用的所有参数拆了一遍:model、temperature、system prompt、messages 数组、Few-shot、CoT。今天把这些技能融进一个真正能用的工具——Kotlin 代码审查命令行工具。
需求
输入一段有问题的 Kotlin 代码,输出结构化的审查报告。故意埋了两个坑:
fun getUserName(user: User): String {
return user.name.toString() // 问题1:toString() 多余
}
fun processList(list: ArrayList<String>) {
for (i in 0..list.size) { // 问题2:数组越界
println(list.get(i))
}
}
核心代码
response = client.chat.completions.create(
model="turing/gpt-4o-mini",
messages=[
{
"role": "system",
"content": """你是Kotlin 代码审查专家,按照以下格式输出:
【问题等级】🔴严重 / 🟡建议 / 🟢优化
【问题代码】代码片段
【说明】为什么不好
【建议】怎么改""",
},
{
"role": "user",
"content": "审查这一段代码:\n" + code,
},
],
temperature=0.3,
)
print(response.choices[0].message.content)
关键设计:
system prompt控制输出格式(第3天学的)temperature=0.3保证审查结果稳定(第2天学的)messages数组结构(第1天学的)
运行结果
【问题等级】🔴严重
【问题代码】for (i in 0..list.size) { println(list.get(i)) }
【说明】0..list.size 会导致数组越界异常,索引应该从0到size-1
【建议】改为 for (i in 0 until list.size)
【问题等级】🟡建议
【问题代码】return user.name.toString()
【说明】user.name 已经是 String 类型,调用 toString() 是多余的
【建议】直接返回 user.name
【问题等级】🟢优化
【问题代码】fun processList(list: ArrayList<String>)
【说明】ArrayList 限制了函数通用性,Kotlin 提供了更通用的 List 接口
【建议】改为 List<String>
三个问题全部命中,等级划分准确。
这比用豆包/ChatGPT强在哪
| 聊天工具 | 自己写的代码 | |
|---|---|---|
| 一次审查 | 1段代码(手动粘贴) | 可遍历整个 src 目录批量审查 |
| 结果存储 | 聊天框,复制粘贴 | 存入 JSON 文件,接入 CI 流水线 |
| 自动化 | 不能 | Git Hook 自动触发 |
| 可定制 | 不能 | system prompt 任意调整审查规则 |
区别:聊天工具是"用 AI",自己写代码是"做 AI 应用"。
第一阶段总结
7天学完,一次 LLM API 调用的全部要素已经齐了:
response = client.chat.completions.create(
model="...", # 第1天:模型选择
messages=[ # 第1天:消息数组
{"role": "system", "content": "..."}, # 第3天:人设/格式
{"role": "user", "content": "..."}, # 第1天:提问
{"role": "assistant", "content": "..."},# 第4天:历史对话
],
temperature=0.3, # 第2天:创造力控制
max_tokens=250, # 第2天:长度限制
)
下一阶段:RAG(检索增强生成)——让 LLM 能回答"知识库以外"的问题。
本系列记录一位Android开发者转行AI Agent的完整学习过程,欢迎关注交流。
更多推荐

所有评论(0)