Kotlin ADK实战

前端大鹏 初级 1小时前 410 浏览 14 点赞 约 1 分钟

静态类型语言在写AI Agent时简直是救星,尤其是当你得处理复杂的工具Schema和模型返回结果时,编译器能帮你挡掉绝大多数低级错误。这次试了下Google出的Kotlin Agent Development Kit (ADK),配合Gemini 1.5 Flash-lite,跑通一个简单的MCP工具调用链路比想象中快。

如果你想尝试,得先准备好 Java 25(建议用 SDKMAN! 管理版本)和 Gemini API Key。

快速部署流程

一、环境初始化
直接克隆示例库并跑初始化脚本,这步会帮你生成 .env 文件。

Kotlin ADK实战

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

Kotlin ADK实战

source set_env.sh

三、启动 Agent
这个项目分成了 agentserver 两个模块。你需要先启动 Ktor 写的 MCP 服务器(提供 greet 工具),然后再运行 Agent 客户端。

核心 Prompt 与逻辑分析

Kotlin ADK实战

这个 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,确保模型只做传递,不篡改工具返回的结果。
Kotlin ADK实战

实际运行效果很稳,只要输入“帮我问候一下 XXX”,Agent 就会立刻触发 MCP 接口,拿到结果后再反馈给我。这种 code-first 的构建方式比在 Web 界面里调提示词要可控得多。
Gemini提示词AIPromptkotlin

全部回复 (3)

老大鹏 专家 9小时前
确实,用密封类定义状态机,处理模型回传结果稳多了。
0 回复
副业中测试 中级 9小时前
直接用Python写不就完了?没必要为了类型安全折腾这么复杂。
0 回复
副业中创业者 初级 9小时前
建议把依赖注入配上,不然项目大了之后管理工具类挺头大的。
0 回复

发表回复

支持 Markdown 格式