构建语言伴侣 AI 代理
Source: Dev.to
背景
在过去的几周里,我一直在学习 Google 的 ADK(Agent Development Kit),并为 AI 代理课程完成一个顶点项目。由于我的背景是前端(最近也做了一些后端),我想探索 AI 代理的 UI/UX,并尝试专门的界面,让用户在不切换上下文的情况下完成任务。
问题陈述
我学习中文已有好几年,并把 AI 当作语言伴侣使用。一个主要痛点是需要在对话、编辑器和浏览器之间不断搬运信息,以查找视频或其他资源。我希望有一个统一的地方,能够同时容纳对话、解释和交互式测验。
初始设置挑战
- 开发环境 – Kaggle Notebook 适合学习,但在生产级项目中显得受限。
- Python 版本差异 – ADK 示例使用的 Python 环境与学习材料略有不同,我不确定该采用哪些工具。于是我引入了
uvicorn和类型化 Python,最终创建了 Dockerfile 来隔离环境。
在几天的环境搭建后,我把重点从完善环境转向优化提示词和代理架构。
代理架构
子代理
- Prompt Inspector – 分析用户的目标。
- Meaning Extractor – 判断输入的语义含义。
- Vocabulary Retriever – 查找相关词汇。
- Pattern Finder – 识别常见语言模式。
- Summarizer – 整合前面子代理的输出。
经验教训
- 文档字符串的细微改动(例如提到 “English language”)会导致代理拒绝非英文输入。
- 最初的 summarizer 会忽略子代理的结果,有时甚至对自己的摘要再做摘要。通过添加显式条件解决了该行为。
交互流程
- 解释短语 – 代理拆解特定句子,提供含义、词汇和模式。
- 解释主题 – 代理生成示例短语,然后对每个短语应用相同的子代理,提供更广泛的上下文理解。
记忆与状态
虽然课程笔记本建议使用简易的会话和长期记忆处理,但配置 ADK runner 和会话相当繁琐。原型中我省略了持久记忆,专注于核心功能。
人在回路 & 引导
我探索了一种称为 elicitation(引导)的人工在回路模式。为协调外部调用,我使用 FastMCP 构建了一个 MCP(Multi‑Component Protocol)服务器,它简化了请求处理。官方云服务尚未支持部署,所以我在本地运行服务器,并提供流式 HTTP 接口。
测验生成工作流
- ADK 捕获对话上下文并生成 MCP 请求。
- 创建测验页面,并返回链接给用户。
- 用户完成测验后,可请求代理对其进行评估。
- 答案存储在外部数据库中,以实现持久化和共享。
- AI 代理对测验进行评分,包括开放式问题——这在没有 LLM 的情况下很难实现。
结果
该原型实现了一个 AI 驱动的语言导师,能够:
- 通过详细的语言拆解解释短语和主题。
- 生成在主对话之外运行的交互式测验。
- 持久化测验结果并提供基于 AI 的评分。
未来工作
- 将 MCP 服务器部署到云平台,以提升可访问性。
- 实现稳健的会话和长期记忆处理。
- 优化 summarizer,使其始终整合子代理输出。
- 扩展测验系统,支持更丰富的题型和协作共享。
结论
构建此语言伴侣项目凸显了 Google ADK 的强大以及 FastMCP 在简化样板代码方面的便利。虽然仍需进一步工作才能达到生产质量,但该项目展示了一种将对话式 AI 与交互式语言学习工具相结合的可行路径。