构建多智能体金融顾问系统:架构解析与实战指南)
使用 Go 版 Agent Development KitADK构建多智能体金融顾问系统架构解析与实战指南【免费下载链接】adk-samplesA collection of sample agents built with Agent Development Kit (ADK)项目地址: https://gitcode.com/GitHub_Trending/ad/adk-samples本文以 adk-samples 仓库中的 Go 版 Financial Advisor 示例 为主线讲解如何用 Go 版 Agent Development KitADK搭建一个由数据分析师、交易分析师、执行分析师、风险评估师四大专家子代理协作的金融顾问多智能体系统。读完本文你将掌握 ADK Go SDK 中llmagent、agenttool、launcher的核心用法理解子代理编排、状态键State Key数据流转与 Prompt 契约设计并能在本地完整运行该示例。一、示例概述为人类金融顾问服务的 AI 专家团队Financial Advisor 是一个由多个专业化 AI 代理组成的团队其定位是辅助人类金融顾问而不是替代用户做投资决策。它采用 Go 语言实现是 ADK 官方示例中展示多智能体Multi-Agent系统构建方式的典型范例。该示例的核心工作流是一条四阶段流水线每个阶段由一名专家子代理负责阶段子代理职责1Data Analyst数据分析师针对指定股票代码ticker反复调用 Google Search 检索规定数量的、近期的、有洞察力的信息聚焦 SEC 文件与市场情报并仅基于检索到的数据生成结构化市场分析报告2Trading Analyst交易分析师基于数据分析师的报告开发并描述至少五种不同的交易策略每种策略都必须贴合用户声明的风险承受能力与投资期限3Execution Analyst执行分析师为选定的交易策略制定详尽、有理有据的实施计划包括建仓、持有、加仓、部分卖出与完全离场的时机与最优方式4Risk Evaluation Agent风险评估师对特定交易策略及其执行计划进行详细、有理有据的风险分析输出明确的风险清单与可落地的缓释措施从 README 特性表 可以快速把握该示例的关键属性FeatureDescriptionInteraction TypeConversational对话式ComplexityMedium中等复杂度Agent TypeMulti Agent多智能体ComponentsTools: built-in Google Search内置 Google Search 工具VerticalFinancial金融垂直领域⚠️重要声明该工具输出的所有分析、评论与策略大纲均由 AI 模型生成仅用于教育与信息参考目的不构成财务建议、投资推荐或任何买卖证券的要约。金融市场存在风险过往表现不代表未来结果做任何投资决策前请自行研究并咨询合格的专业金融顾问。严禁将本示例的输出用于真实投资决策。二、多智能体架构协调者 子代理编排在 main.go 中可以看到整个系统的装配方式一个名为financial_coordinator的协调者Coordinator代理持有四个子代理作为可调用工具。2.1 协调者代理的装配协调者是整个系统对外的唯一入口其定义如下main.gofinancialCoordinator, err : llmagent.New(llmagent.Config{ Name: financial_coordinator, Model: model, Description: guide users through a structured process to receive financial advice by orchestrating a series of expert subagents. help them analyze a market ticker, develop trading strategies, define execution plans, and evaluate the overall risk., Instruction: instruction, OutputKey: financial_coordinator_output, Tools: []tool.Tool{ agenttool.New(dataAnalyst, nil), agenttool.New(tradingAnalyst, nil), agenttool.New(executionAnalyst, nil), agenttool.New(riskAnalyst, nil), }, })关键点拆解llmagent.New创建基于 LLM 的代理。协调者使用gemini-2.5-flash模型见 main.go四个子代理则统一使用成本更低的gemini-2.5-flash-lite见各子代理构造文件。Instruction通过//go:embed agents/prompts/financial_coordinator.md把 financial_coordinator.md 编译期嵌入二进制定义了协调者的人设与四步编排流程。agenttool.New(...)ADK 的 Agent-as-Tool 机制——把子代理包装成协调者可调用的工具这是 Go 版 ADK 实现多智能体编排的核心 API。协调者不直接调用子代理而是通过工具调用tool calling让 LLM 决定何时调用哪个子代理。OutputKey每个代理的输出会写入指定的状态键State Key用于在多代理之间传递数据。2.2 四个子代理的构造每个子代理都以独立文件、独立构造函数的形式组织在agents/目录下便于复用与测试文件代理名OutputKey输出状态键agents/data_analyst.godata_analyst_agentmarket_data_analysis_outputagents/trading_analyst.gotrading_analyst_agentproposed_trading_strategies_outputagents/execution_analyst.goexecution_analyst_agentexecution_plan_outputagents/risk_analyst.gorisk_analyst_agentfinal_risk_assessment_output以数据分析师为例agents/data_analyst.go它是唯一挂载外部工具的代理func NewDataAnalyst(ctx context.Context) agent.Agent { model, err : gemini.NewModel(ctx, gemini-2.5-flash-lite, nil) ... dataAnalyst, err : llmagent.New(llmagent.Config{ Name: data_analyst_agent, Model: model, Description: Analyze financial data and provide insights., Instruction: dataAnalystInstruction, Tools: []tool.Tool{geminitool.GoogleSearch{}}, OutputKey: market_data_analysis_output, }) ... }注意这里使用了geminitool.GoogleSearch{}即 ADK 内置的 Google Search 工具。四个子代理共享同一个agents包并各自通过//go:embed嵌入对应的 Prompt 文件agents/prompts/data_analyst.mdagents/prompts/trading_analyst.mdagents/prompts/execution_analyst.mdagents/prompts/risk_analyst.mdagents/prompts/financial_coordinator.md2.3 启动器与运行入口main.go 的结尾把协调者包装为单一代理加载器交给full.NewLauncher()启动config : launcher.Config{ AgentLoader: agent.NewSingleLoader(financialCoordinator), } l : full.NewLauncher() if err l.Execute(ctx, config, os.Args[1:]); err ! nil { log.Fatalf(Run failed: %v\n\n%s, err, l.CommandLineSyntax()) }launcher是 ADK Go SDK 的命令行启动组件full子包提供了web、api、webui等子命令支持后文运行 Agent一节会用到。命令行参数直接透传os.Args[1:]出错时会打印完整的命令语法提示。三、状态键多代理之间的数据流转契约多智能体系统能否正确协作关键在于子代理之间的数据如何传递。本示例的答案是状态键State Key机制协调者与各子代理把产出写入固定的状态键下游子代理从状态键中读取上游产出。结合 financial_coordinator.md 与各子代理 Prompt四步流水线的完整数据流如下用户输入 ticker │ ▼ data_analyst ──写入──► market_data_analysis_output市场分析报告 │ ▼ trading_analyst ──读取 market_data_analysis_output 用户风险态度 投资期限 │ ──写入──► proposed_trading_strategies_output≥5 种策略 ▼ execution_analyst ──读取 proposed_trading_strategies_output 用户偏好 │ ──写入──► execution_plan_output执行计划 ▼ risk_analyst ──读取 market_data_analysis_output proposed_trading_strategies_output │ execution_plan_output 用户画像 ──写入──► final_risk_assessment_output最终风险评估这套契约在 Prompt 中得到了强制约束上游依赖校验交易分析师在 trading_analyst.md 中被要求先检查market_data_analysis_output状态键是否为空若为空必须立即中止生成并向用户报错提示先完成市场数据分析步骤——从 Prompt 层面防止数据未就绪就生成策略的时序错误。输出格式强制每个子代理都被要求把结果存入新的状态键例如proposed_trading_strategies保证下游能按固定键名取数。协调者的编排责任协调者的 Prompt 明确要求Ensure all state keys are correctly used to pass information between subagents每一步都要显式调用指定子代理并严格遵循输入输出格式。四、Prompt 契约每个子代理的输入输出设计这是本示例最有参考价值的部分——每个子代理的 Prompt 都是一份完整的输入输出契约。下面逐一展开。4.1 Data Analyst只检索、只基于收集到的数据写报告data_analyst.md 定义的输入参数provided_tickerstring必填股票代码如AAPL、GOOGL、MSFT。代理不得向用户反向索要该参数。max_data_age_daysinteger可选默认7信息新鲜度上限超过该天数的结果原则上应排除除非极其重要且无更新替代。target_results_countinteger可选默认10期望收集的高质量去重检索结果数量。其强制流程包含迭代检索多次、变体化的搜索词覆盖 SEC 文件、财报与业绩新闻、市场情绪与分析师观点、风险与机会、重大事件等聚焦面与综合分析仅基于收集结果、不做外部知识外推、识别主题与关键洞察。最终输出是一份结构化报告模板在 Prompt 中完整定义包括执行摘要3-5 条要点、近期 SEC 文件与监管信息、近期新闻/股价表现/市场情绪、近期分析师观点、关键风险与机会清单、以及关键参考文章列表每条含标题、URL、来源、作者、发布日期、相关性说明。若某部分无近期数据必须显式声明未发现。4.2 Trading Analyst至少五种个性化策略trading_analyst.md 的核心约束是至少开发五种互不相同的交易策略且每种策略必须满足strategy_name简洁描述性名称如 Conservative Dividend Growth Focus、Aggressive Tech Momentum Playdescription_rationale策略核心思想及提出理由alignment_with_user_profile与用户风险态度、投资期限的契合点说明key_market_indicators_to_watch该策略最需要跟踪的关键指标potential_entry_conditions潜在入场条件potential_exit_conditions_or_targets止盈/止损目标条件primary_risks_specific_to_this_strategy该策略特有的主要风险。策略需覆盖牛市、熊市、震荡市等不同市场情景若数据支持并在生成后以 Markdown 可视化输出。同时 Prompt 强制在展示策略时显著展示法律免责声明。4.3 Execution Analyst从建仓到离场的完整执行计划execution_analyst.md 要求输出一份六段式执行策略分析基础执行理念Foundational Execution Philosophy综合用户风险态度、投资期限与执行偏好推导推荐路径入场执行策略Entry Execution Strategy高概率入场点的信号汇合、订单类型选择限价/市价/止损限价/条件单、初始仓位规模与止损设置如 ATR 波动率止损、支撑/阻力位止损持仓与盘中管理Holding In-Trade Management监控频率、动态止损调整移动止损、移至盈亏平衡点、波动与回撤应对加仓策略Accumulation / Scaling-In加仓的触发条件、订单执行技巧、加仓后整体风险重算部分卖出Partial Sell / Scaling-Out止盈触发标准、卖出比例、剩余仓位的止损调整完全离场Full Exit盈利离场与亏损离场条件、订单类型、滑点与市场冲击控制。4.4 Risk Analyst全面的风险评估报告risk_analyst.md 的输入包括provided_trading_strategy、provided_execution_strategy以及用户画像三要素风险态度、投资期限、执行偏好输出结构至少覆盖风险执行摘要最关键风险概览 整体定性风险等级Low / Medium / High / Very High市场风险方向性风险、波动率风险、跳空风险、利率敏感度、通胀影响、汇率风险、相关性崩溃等逐一做影响评估与缓释建议流动性风险买卖价差、冲击成本、压力场景下无法成交的风险与应对交易对手与平台风险经纪商、交易所层面的风险以及针对策略与执行的具体风险缓释措施静态/移动止损、仓位管理、对冲、跨资产分散等。从源码结构可以推断协调者 Prompt 要求把market_data_analysis_output、proposed_trading_strategies_output、execution_plan_output三项状态键与用户画像一并传入风险评估师保证评估有据可依。五、环境准备与安装5.1 前置条件README 给出的前置要求如下Go 1.19。注意仓库内 go.mod 实际声明go 1.25.0并依赖google.golang.org/adk v0.6.0因此以 go.mod 为准建议安装较新的 Go 工具链1.25 及以上一个 Google Cloud PlatformGCP项目Google Cloud CLI官方安装指引可从 Google Cloud 官网获取此处不再提供外部链接。5.2 获取代码与安装依赖在当前仓库中示例位于go/agents/financial-advisor/目录。获取仓库后进入该目录并拉取依赖git clone 本仓库地址 cd adk-samples/go/agents/financial-advisor # 安装依赖 go mod tidy5.3 配置凭据与环境变量本示例通过 Gemini 模型gemini-2.5-flash/gemini-2.5-flash-lite驱动且数据分析师使用内置 Google Search 工具因此需要配置 Vertex AI 与 Gemini API 凭据。可在 shell 或.env文件中设置以下环境变量export GOOGLE_GENAI_USE_VERTEXAItrue export GOOGLE_CLOUD_PROJECTyour-project-id export GOOGLE_CLOUD_LOCATIONyour-project-location export GEMINI_API_KEYyour-api-key参数说明GOOGLE_GENAI_USE_VERTEXAI置为true表示走 Vertex AI 通道调用 Gemini 模型若使用 Gemini Developer API则不设置或置为false此时主要依赖GEMINI_API_KEY。GOOGLE_CLOUD_PROJECTGCP 项目 ID用于 Vertex AI 的资源定位与配额归属。GOOGLE_CLOUD_LOCATIONVertex AI 的区域如us-central1需与项目可用区域一致。GEMINI_API_KEYGemini API 密钥Developer API 模式必需。可选若已安装 gcloud CLI可认证默认应用凭据并把配额项目绑定到目标 GCP 项目避免配额/计费归属错误gcloud auth application-default login gcloud auth application-default set-quota-project $GOOGLE_CLOUD_PROJECT六、运行 Agent6.1 两种运行方式进入go/agents/financial-advisor/目录后可二选一启动# GUI 方式启动 Web 界面 API WebUI go run main.go web api webui# CLI 方式终端交互 go run .go run main.go web api webui会启动一个本地服务器之后既可以通过 Web 界面交互也可以通过 API 调用访问go run .则直接在终端进行命令行对话。两种方式背后都是full.NewLauncher()对os.Args[1:]子命令的解析见 main.go。6.2 示例交互以下是 README 提供的真实交互示例注意由于 LLM 输出具有随机性实际回复每次都可能不同以下仅为演示User: who are you I am the financial coordinator agent. My role is to guide you through a structured process to receive financial advice. I work with specialized subagents to help you: Analyze a market ticker. Develop trading strategies based on your risk profile and investment goals. Define an optimal plan for executing those strategies. Evaluate the overall risk of the proposed plan. How can I help you start this process today? For example, we could begin by analyzing a market ticker. User: APPL It looks like there might be a typo in the ticker symbol. Did you mean AAPL for Apple Inc.? Once you confirm the correct ticker symbol, I will start the first step by calling the data_analyst subagent to gather comprehensive market data analysis for it. User: correct Okay, great. I will now call the data_analyst subagent to gather comprehensive market data analysis for the ticker symbol AAPL (Apple Inc.). This analysis will include information like historical performance, key financial ratios, and relevant news sentiment, forming the foundation for our next steps.这段交互清晰展示了协调者的行为模式先自我介绍并展示免责声明 → 引导用户提供 ticker → 发现拼写错误时主动纠正APPL → AAPL→ 确认后调用 data_analyst 子代理。这与 financial_coordinator.md 中每个步骤都要明确告知用户当前调用的子代理及其所需信息的指令完全吻合。用户也可以随时要求show me the detailed result as markdown来查看各阶段的详细 Markdown 输出。七、定制与扩展方向README 结尾给出了三个官方建议的定制方向结合源码可进一步延伸增强 Data Analyst 的检索能力当前数据分析师只挂了geminitool.GoogleSearch{}一个工具agents/data_analyst.go。可以集成专门的行情/财报数据仓库如股票数据 API、数据库为报告补充更深入的结构化市场数据——只需在Tools切片中追加新的tool.Tool实现即可。实现多样化的分析师人设Persona可以为不同分析师创建不同角色配合基于角色的数据与工具访问权限提供更贴合场景的分析。由于每个子代理都是独立的llmagent.New构造复制现有构造函数并替换Instruction与Tools即可快速派生新角色。持续优化 Prompt 工程所有行为契约都集中在 agents/prompts/ 下的 5 个 Markdown 文件中且通过//go:embed编译期嵌入。迭代这些 Prompt例如调整target_results_count、max_data_age_days的默认值或细化状态键校验逻辑即可提升回答的精确度与相关性无需改动 Go 代码——这是该示例在工程上最值得借鉴的设计。八、源码地图速览关注点文件系统入口与协调者装配go/agents/financial-advisor/main.go数据分析师实现go/agents/financial-advisor/agents/data_analyst.go交易分析师实现go/agents/financial-advisor/agents/trading_analyst.go执行分析师实现go/agents/financial-advisor/agents/execution_analyst.go风险评估师实现go/agents/financial-advisor/agents/risk_analyst.go协调者 Prompt编排流程与状态键go/agents/financial-advisor/agents/prompts/financial_coordinator.md各子代理 Prompt输入输出契约go/agents/financial-advisor/agents/prompts/模块依赖与 Go 版本go/agents/financial-advisor/go.mod总之Go 版 Financial Advisor 示例以极小的代码量一个入口文件 四个子代理文件 五个 Prompt 文件完整演示了 ADK Go SDK 的多智能体编排范式用llmagent定义代理、用agenttool把代理变成工具、用状态键串联流水线、用 Prompt 契约约束每一步的输入输出。这一套模式可以平移到客服、法务、研发管理等其他多智能体场景是学习 ADK Go 多代理开发的理想起点。【免费下载链接】adk-samplesA collection of sample agents built with Agent Development Kit (ADK)项目地址: https://gitcode.com/GitHub_Trending/ad/adk-samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考