Kotlin ADK实战
静态类型语言在写AI Agent时简直是救星,尤其是当你得处理复杂的工具Schema和模型返回结果时,编译器能帮你挡掉绝大多数低级错误。这次试了下Google出的Kotlin Agent Development Kit (ADK),配合Gemini 1.5 Flash-lite,跑通一个简单的MCP工具调用链路比想象中快。
实际运行效果很稳,只要输入“帮我问候一下 XXX”,Agent 就会立刻触发 MCP 接口,拿到结果后再反馈给我。这种 code-first 的构建方式比在 Web 界面里调提示词要可控得多。
下一篇
Writekin:在Mac本地微调大模型,让AI写出你的“人味” →
如果你想尝试,得先准备好 Java 25(建议用 SDKMAN! 管理版本)和 Gemini API Key。
快速部署流程
一、环境初始化
直接克隆示例库并跑初始化脚本,这步会帮你生成 .env 文件。

git clone https://github.com/xbill9/adk-hello-world-kotlin
cd adk-hello-world-kotlin
source init.sh二、配置凭证
把你的 API Key 填进 .env,然后加载到当前 Shell 环境里。
GOOGLE_API_KEY=your-api-key
source set_env.sh三、启动 Agent
这个项目分成了 agent 和 server 两个模块。你需要先启动 Ktor 写的 MCP 服务器(提供 greet 工具),然后再运行 Agent 客户端。
核心 Prompt 与逻辑分析

这个 Agent 的核心定义在 GreetingAgent.kt 里。最关键的是 LlmAgent 的配置,它把模型、指令和工具集(toolsets)绑定在一起。
这里用到的提示词非常精简,但定义了明确的触发逻辑:
return LlmAgent(
name = "kotlin_greeting_agent",
description = "A Kotlin ADK agent that greets people through an MCP tool.",
model =
Gemini(
name = modelName,
apiKey = apiKey,
),
instruction =
Instruction(
"""
You are a concise greeting assistant.
When the user asks you to greet someone, always call the greet tool with that
person's name. Return the greeting produced by the tool.
""".trimIndent(),
),
toolsets = listOf(mcpToolset),
)这个 Prompt 为什么有效?因为它采用了典型的「角色+触发条件+动作指令」结构。
- 角色定义:
concise greeting assistant(简洁的问候助手),限制了模型的废话程度。 - 硬性约束:
always call the greet tool,强制模型在遇到特定需求时必须调用工具,而不是自己编一个问候语。 - 输出闭环:
Return the greeting produced by the tool,确保模型只做传递,不篡改工具返回的结果。
实际运行效果很稳,只要输入“帮我问候一下 XXX”,Agent 就会立刻触发 MCP 接口,拿到结果后再反馈给我。这种 code-first 的构建方式比在 Web 界面里调提示词要可控得多。
