07 Go Eino AI应用开发实战 | 多 Agent 编排

17 阅读7分钟

声明:本AI应用开发系列教程首发在同名公众号:王中阳,未经授权禁止转载。

Go-Eino 面试 Agent 平台

Go-Eino 面试 Agent 平台实现了一套复杂的多 Agent 编排系统,用于协调专门化的 AI Agent,为面试准备和评估提供全面支持。该架构利用 Eino 框架构建了一个模块化、可扩展的系统,其中每个 Agent 专注于特定的面试场景和候选人评估领域。

Agent 架构概览

多 Agent 系统围绕一个集中式编排服务构建,该服务管理不同类型的面试 Agent,每种 Agent 都为特定的评估场景而设计。该架构采用工厂模式并结合面向服务的设计原则,确保了系统的可扩展性和可维护性。

核心 Agent 类型

平台支持两大类面试 Agent:

综合面试 Agent

专为全面候选人评估而设计,这些 Agent 评估广泛的能力,包括基础知识、学习潜力和专业素养。系统包含针对不同招聘场景的专门变体:

  • ComprehensiveSchool:专注于应届毕业生评估 backend/chatApp/agent_service/interview/interview_agent_service.go#L20
  • ComprehensiveSocial:针对有经验的专业人士评估 backend/chatApp/agent_service/interview/interview_agent_service.go#L21

专业面试 Agent

这些领域特定的 Agent 在特定技术栈中进行深入技术评估:

  • SpecializedGo:Go 语言专业知识评估 backend/chatApp/agent_service/interview/interview_agent_service.go#L24
  • SpecializedJava:Java 编程评估 backend/chatApp/agent_service/interview/interview_agent_service.go#L25
  • SpecializedMQ:消息队列知识测试 backend/chatApp/agent_service/interview/interview_agent_service.go#L26
  • SpecializedMySQL:数据库管理评估 backend/chatApp/agent_service/interview/interview/interview_agent_service.go#L27
  • SpecializedRedis:缓存和数据结构评估 backend/chatApp/agent_service/interview/interview_agent_service.go#L28

编排服务实现

InterviewAgentService 作为中心编排器,实现了用于 Agent 创建和执行管理的工厂模式。该服务处理 Agent 生命周期管理,并为运行不同的面试场景提供统一接口。

Agent 工厂模式

该服务实现了一个复杂的工厂模式,根据类型规范动态创建 Agent:

func (s *InterviewAgentService) GetInterviewAgent(agentType InterviewAgentType, needResumeTool bool) (adk.Agent, error) {
    switch agentType {
    case ComprehensiveSchool:
        return comprehensive.NewSchoolComprehensiveAgent(s.userId, needResumeTool)
    case SpecializedGo:
        return specialized.NewGoSpecializedAgent(s.userId, needResumeTool)
    // ... additional agent types
    }
}

每个 Agent 都配置了:

  • 动态工具集成:根据面试需求有条件地包含简历解析工具 backend/chatApp/agent/interview/comprehensive/school_comprehensive_agent.go#L19-L26
  • 专门指令:领域特定的提示词和评估标准
  • 迭代限制:可配置的最大迭代次数以防止无限循环(默认:15)backend/chatApp/agent/interview/specialized/go_agent.go#L42

流处理架构

image.png

编排系统实现了高级流处理用于实时 Agent 交互:

runAgentWithIterator 函数通过事件驱动的迭代器模式处理 Agent 输出 [backend/chatApp/agent_service/interview/interview_agent_service.go#L114-L156](backend/chatApp/agent_service/interview/interview_agent_service.go#L114-L156),实现:

  • 实时流式传输:通过回调函数立即传递响应
  • 错误处理:全面的错误传播和日志记录
  • 消息聚合:收集完整的 Agent 响应

专业化 Agent 实现

简历分析 Agent

ResumeParserAgent 作为基础组件,从简历文档中提取和分析候选人信息。该 Agent 利用专门的 PDF 解析工具并实现结构化提取工作流:

**Instruction**: `你是一个专业的简历分析专家。你的任务是解析候选人的简历,提取关键信息用于面试准备。
重要提示:
- 你必须使用 pdf_to_text 工具来解析简历文件路径
- 不要跳过工具调用,直接返回空数据
- 必须从简历内容中提取真实的信息`

该 Agent 遵循强制性的三步流程:

  1. 文档解析:使用 PDF 提取工具将简历转换为文本 backend/chatApp/agent/resume/resume.go#L29-L33
  2. 信息提取:包括教育背景、经验和技术技能的结构化数据提取
  3. 背景分析:生成全面的候选人档案

预测 Agent

PredictionAgent 基于候选人档案和职位要求实现智能面试问题生成。该 Agent 使用复杂的提示词工程确保一致的 JSON 输出格式:

**Instruction**: `你是一个资深的面试官和技术专家。你的任务是根据求职者的简历和指定的要求,预测可能会问到的5道面试题。
【重要要求】
1. 必须严格生成 5 道题目,少于 5 道是不允许的。
2. 必须返回标准的 JSON 格式,不要包含 markdown 标记
3. 题目内容必须结合简历中的项目经历和技能点`

该 Agent 生成结构化问题对象,包含:

  • 问题内容:主要面试问题
  • 关注领域:被评估的具体能力
  • 思考路径:预期的答题框架
  • 参考答案:用于评估的模范回答
  • 追问:潜在的进一步提问 backend/chatApp/agent/prediction/prediction_agent.go#L11-L20

工具集成框架

多 Agent 系统集成了一个复杂的工具集成框架,扩展了 Agent 的能力:

简历信息工具

Agent 可以有选择地集成简历解析工具以增强面试个性化:

var toolsConfig adk.ToolsConfig
if needResumeTool {
    toolsConfig = adk.ToolsConfig{
        ToolsNodeConfig: compose.ToolsNodeConfig{
            Tools: []componenttool.BaseTool{
                tool2.GetResumeInfoTool(),
            },
        },
    }
}

这种有条件的工具集成允许 Agent:

  • 访问候选人档案:实时简历数据检索
  • 个性化问题:根据特定候选人背景定制内容
  • 验证回答:与提供的信息交叉引用答案

向量搜索集成

系统支持 Milvus 向量数据库集成以实现语义搜索能力 backend/chatApp/tool/milvus_retriever_tool.go,实现:

  • 题库搜索:相似面试问题的语义匹配
  • 答案评估:与参考答案的比较
  • 知识检索:访问领域特定信息

执行流程和协调

多 Agent 编排遵循复杂的执行模式,确保适当的协调和资源管理:

错误处理和弹性

编排系统实现了全面的错误处理:

  • Agent 创建失败:优雅的回退和错误报告 backend/chatApp/agent_service/interview/interview_agent_service.go#L54-L57
  • 执行错误:详细的日志记录和错误传播
  • 工具失败:将工具特定错误与 Agent 执行隔离

性能优化

系统包括多项性能优化:

  • Agent 重用:高效的 Agent 实例管理
  • 流处理:通过实时响应传递降低延迟
  • 资源管理:适当的清理和上下文处理

与 Eino 框架的集成

多 Agent 系统利用 Eino 框架的高级功能实现稳健的 Agent 编排:

image.png

聊天模型集成

所有 Agent 都使用 Eino 聊天模型抽象进行一致的 AI 交互:

model, err := chat.CreatOpenAiChatModel(ctx, userId)
if err != nil {
    return nil, fmt.Errorf("failed to create OpenAI chat model: %w", err)
}

Compose 框架

系统使用 Eino 的 compose 框架进行工具配置和 Agent 组装 backend/chatApp/agent/interview/comprehensive/school_comprehensive_agent.go#L9,实现:

  • 声明式配置:基于 YAML 的 Agent 定义
  • 工具组合:灵活的工具组合和编排
  • 管道构建:复杂的处理工作流

未来可扩展性

该架构为可扩展性而设计,支持:

  • 新 Agent 类型:轻松添加专业面试领域
  • 自定义工具:集成额外的分析和评估工具
  • 多模型支持:与不同 AI 提供商集成
  • 工作流定制:可配置的面试流程和评估标准

多 Agent 编排系统为智能面试自动化提供了坚实的基础,同时保持了未来增强和定制的灵活性。

要更深入地了解底层框架,请参阅 Eino 组件架构。要探索具体的 AI 实现,请参考 简历分析 Agent 和 面试问题生成。

总结

  1. Go-Eino 面试 Agent 平台基于 Eino 框架构建,采用工厂模式+面向服务设计,实现了模块化、可扩展的多 Agent 编排系统,分为综合面试和专业面试两大类 Agent。
  2. 核心能力包括简历解析、面试题智能生成、工具集成(简历工具、Milvus 向量搜索),并通过流处理实现实时交互、完善的错误处理保障系统稳定性。
  3. 架构具备强可扩展性,支持新增 Agent 类型、自定义工具、多模型集成和工作流定制,为智能面试自动化提供了灵活且稳健的基础。

一起学习进步

对这个项目感兴趣的朋友欢迎关注我,私信我,免费领取学习资料,一起成长进步。

本文首发在我的同名公众号:王中阳,未经授权禁止转载。

系列教程查看下方专栏即可: