
Dexter 任务分解机制拆解AI 金融分析智能体如何把复杂问题拆成可执行步骤【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexter为什么让大模型直接回答金融问题总显得不靠谱它跳过了查数和核对环节结论靠编。Dexter 是为深度金融研究而生的自主智能体核心能力是任务分解把复杂金融问题拆成可执行步骤用真实数据一步步推出结论。Dexter 拆解问题的底层循环Dexter 的任务分解就是一个不停打转的 Agent Loop智能体循环模型思考一轮、执行一轮、再基于结果思考下一轮也就是 Agent 任务拆解的全部骨架。先看主循环的四个动作它们都在 src/agent/agent.ts 的 run() 方法里依次发生。接收问题用户提问进入上下文同时开一个 Scratchpad临时工作区存放中间结果的草稿本把原始问题以每行一条 JSON 的格式落盘。选择工具模型对照系统提示里的工具说明输出工具调用指令比如拉财报、查行情。执行与回灌能并发的只读工具并行跑结果作为新消息放回上下文超大的结果先写盘上下文里只留预览。收口判断这一轮模型不再发起工具调用就认定数据够了生成自然语言终答若 10 轮还没收口则主动停止并汇报已拿到的内容。金融问题如何被 AI 解决答案就藏在这四步里。让拆解不跑偏的三个设计循环骨架本身不复杂真正让拆解不失控的是三处刹车拆开看。 工具映射问题到工具的翻译写在系统提示里选哪个工具不靠运行时拍脑袋而是靠注册表里预先写好的工具描述来约束。src/tools/registry.ts 的 getToolRegistry() 给每个工具配详细说明和一句话简述这两段文字会注入系统提示告诉模型什么场景该用它、什么场景别碰。金融工具覆盖四类get_financials 拉三大报表get_market_data 查行情、新闻和内部人交易read_filings 读 10-K、10-Q 这类 SEC 文件stock_screener 按市盈率、增速等指标筛股。举个例子问英伟达最近几个季度的盈利质量怎么样模型会先调 get_financials 拿收入、毛利率、经营现金流再用 read_filings 翻 10-Q 里的管理层讨论交叉验证收入确认口径。工具描述里写明了多公司、多指标可以一次调用所以模型不会一个指标一个指标地来回磨。 结果摘要压缩原始数据不进记忆只有摘要进工具返回的原始 JSON 动辄几万 token全塞进上下文模型很快被撑爆。src/agent/compact.ts 里的 compactContext() 在上下文逼近阈值时出手让一个快模型把到目前为止的全部工具结果压成一份结构化摘要提示词里明确要求保留收入、比率、增长率这些关键数字随后用原始问题 摘要替换掉整段历史消息。压缩不等于删数据。完整结果一直留在 Scratchpad 的文件里事后可逐条回溯单个结果超过体积上限时还会先写盘上下文只挂文件路径加预览逻辑在 src/utils/tool-result-storage.ts。 最大迭代上限给循环系上安全带再顺的循环也需要刹车防止它在同一件事上反复打转。src/agent/agent.ts 顶部定义了 DEFAULT_MAX_ITERATIONS 10循环条件就是轮次小于上限到顶后不再硬撑直接输出已到最大迭代的说明并把已执行的全部工具记录附上让你看清它停在哪一步。还有第二道软约束Scratchpad 给每个工具计数默认同一工具每问最多调 3 次再检测到连续相似查询就向上下文注入警告。典型场景是数据源故障时模型反复重试同一请求这两道防线保证它最多浪费几轮就收手。跟着一个真实问题走完全程一个季度财务健康评估Dexter 用六步工具调用就能走完全程下面以评估微软 2025 财年 Q3 的财务健康状况为例还原。问题进循环拼系统提示、开 Scratchpad。得到干净的上下文和一份可回溯的工作记录。拉报表get_financials 取最近几个季度的收入、毛利率、自由现金流。得到营收增长和盈利能力的原始数字。读文件read_filings 定位 10-Q 的流动性与资本资源章节。得到管理层对营运资本变化的原话解释。同行对比get_financials 同一次调用拉亚马逊和谷歌的对应指标。得到利润率、增速的相对位置。查一次性事件web_search 搜该季度 8-K 与重大公告。确认没有大额减值或资产剥离干扰判断。收口模型不再发起工具调用整合前几步数字生成报告。得到带具体数值的结论现金储备、负债结构、增速对比逐一标注了数据来源。每一步都是调用一个工具、落一份结果Scratchpad 文件按时间顺序记录了全过程你可以逐条核对模型拿了什么、怎么解读的。源码指路三个必读文件看懂这套机制不需要通读整个仓库三个文件按顺序读完就够。src/agent/agent.tsAgent 类run() 是主循环入口callModelWithStreaming() 负责带工具的模型调用hasToolCalls() 判断是否收口。主循环骨架长这样while (ctx.iteration this.maxIterations) { const response await callModelWithStreaming(messages); if (!hasToolCalls(response)) return finalAnswer; // 不再调用工具即收口 const { toolMessages } await executeToolsAndCollectMessages(response, ctx); messages.push(...toolMessages); // 结果回灌进入下一轮 }src/tools/registry.tsgetToolRegistry() 返回全部工具及其描述getTools() 抽出纯工具实例绑定给模型搜索类工具按环境变量里配的密钥动态增减。src/agent/compact.tscompactContext() 是摘要压缩的实现配合 agent.ts 里的 compactMessages() 完成原问题 摘要的替换。迭代上限常量也在这条链路上const DEFAULT_MAX_ITERATIONS 10;五步跑起来本地跑通只需 5 步命令可直接复制执行。git clone https://gitcode.com/GitHub_Trending/dexter19/dextercd dexter bun installcp env.example .env编辑 .env至少填入 OPENAI_API_KEY 和 FINANCIAL_DATASETS_API_KEY模板见 env.examplebun start一句话记住它Dexter 的精髓可以浓缩成三点。任务分解不是一次性生成而是思考、调工具、压缩结果、再思考的循环以工具调用停止作为收口信号。防跑偏靠三个设计系统提示里的工具描述、LLM 摘要压缩、10 轮迭代硬上限。读源码从 run() 入手再顺藤摸到 getToolRegistry() 和 compactContext()。【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考