Dexter 循环拆解:复刻金融任务分解的 4 个关键点 📅 发布时间:2026/9/4 11:28:41 👁 浏览次数: Dexter 循环拆解复刻金融任务分解的 4 个关键点【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexterDexter 是一款面向深度金融研究的自主智能体它的任务分解核心是 src/agent/agent.ts 里一个朴素的循环问模型、跑工具、把结果塞回上下文如此往复。本文沿一次完整调用讲清写一个同类金融 Agent 前必须先想明白的四个决策。提问前上下文里装了什么工具注册表与提示词策略大部分拆解不写在代码里写在提示词里。循环启动前系统提示词被注入三类内容工具注册表src/tools/registry.ts 把全部工具列在一处——get_financials管财报、get_market_data管价格与新闻、read_filings管 SEC 文件、stock_screener管条件筛选。每条带 1~2 句compactDescription和一个concurrencySafe标记能否并行。注册表还按环境变量动态组装配了 Exa 或 Tavily 的 key 才会出现web_search。工具使用策略写死在 src/agent/prompts.ts 的系统提示词里最硬的一条是调 get_financials 时把完整自然语言问题一次发出不要拆成多次调用——它直接决定模型是拆解得当还是狂刷调用。用户规则.dexter/RULES.md与SOUL.md存在即注入个人研究习惯对每次提问生效。模型选哪个工具并非算法匹配而是读着工具说明自主决定。想改拆解习惯从这层下手。主循环体是 while 不是 for四个细节主循环骨架很薄while (ctx.iteration this.maxIterations) { microcompactMessages(messages); // 先做轻量裁剪 const response await this.callModel(messages); if (!hasToolCalls(response)) { // 无工具调用 回答完毕 return this.handleDirectResponse(response); } const { toolMessages } await this.executeTools(response); // 只读工具并行 toolMessages enforceResultBudget(toolMessages); // 单轮预算 messages.push(response, ...toolMessages); // 塞回上下文 }四件事容易被忽略终止条件双保险模型不再调用工具或轮数跑满二者居其一。没有任务完成状态机代码信任模型自己收手——朴素也是最可能失控的点。工具执行支持并行只读工具一轮里同时跑写操作与需审批的工具串行。每轮先过一遍 microcompact下一节细说。运行期间用户可继续发消息循环每轮末尾排空队列并入上下文追问不必等整轮结束。工具结果回来后为什么不能原样进上下文金融工具单次返回可能几百 KB原始数据直接入上下文第三轮就爆。代码按代价从低到高分三层处理大结果落盘超阈值的工具结果经persistLargeResult写入磁盘上下文只留预览和文件路径模型需要时再用read_file取段落。microcompactsrc/agent/microcompact.ts旧工具结果超过 8 条或估算 token 超 8 万时把较早的替换为占位符只留最近 4 条。纯字符串操作不调 LLM成本接近零。全量 compactsrc/agent/compact.ts仍超阈值才调用快模型把所有结果归纳为九段式摘要——原始问题、已取数据、全部数字、未完成项、建议下一步。提示词反复强调别丢任何数字金融分析里漏一个营收数后面全错。先清再总结按需付费。⏱️ 为什么默认 10 轮迭代为什么每工具限 3 次两个常量配合DEFAULT_MAX_ITERATIONS 10和 Scratchpad 的每工具 3 次调用上限。10 是成本与完整的折中中等问题通常 4~7 轮收尾。跑满时循环不抛错而是发出done事件明说步数内没做完并交出全部工具调用记录。更有意思的是 src/agent/scratchpad.ts。每个 query 开一个 JSONL 文件init、thinking、tool_result 追加写入落在.dexter/scratchpad/下。两个用途调试回放崩了也能还原全过程防循环——Scratchpad 记录每个工具的调用次数与查询文本达到 3 次、或新查询与旧查询的词语相似度超阈值时不硬拦截而是把软警告注入下一轮提示词已调用 3 次建议换工具或向用户说明数据缺口。软警告而非硬封因为第四次调用也可能合理模型自己最清楚。 重放一次提问ServiceNow 是不是高估了拿NOW 是不是高估了走一遍这个循环第 1 轮模型并行调get_market_data与get_financials各带完整自然语言问题——前者出价格、远期 P/E 与近期新闻后者出近 4 年收入增速、经营利润率与 FCF。第一节别拆调用的策略在这里兑现。第 2 轮发现需要管理层指引read_filings取最新 10-Q 的 Outlook 段落stock_screener拉几个 SaaS 同行对比。第 3 轮同行差距太大决定做估值触发skill工具走 DCF 流程步骤在 src/skills/dcf/子任务重就spawn_subagent交给隔离的子代理主上下文保持干净。中途工具结果已触发 microcompact第 1 轮原始数据被清掉只剩摘要里的关键数字。第 4 轮不再调工具输出结论——远期 P/E 高于五年均值、增速放缓、DCF 合理价低于现价判定略高估。若 RULES.md 写了引用数据必须标来源报告里每个数字都带工具调用记录。全程 4~6 轮离 10 还远。想复刻这套循环先读 src/agent/agent.ts 的 run 方法与 src/agent/prompts.ts 的提示词组装然后执行git clone https://gitcode.com/GitHub_Trending/dexter19/dexter按 README 与 env.example 填好模型和数据 API key就能在 CLI 里提问并到.dexter/scratchpad/目录回放每一轮。【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考