Dexter 使用指南:复杂金融研究问题如何被自动拆解成可执行步骤
【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexter
把"这家公司估值合不合理"这类大问题直接丢给大模型,你多半只能收到几句没有数据、没有出处的套话。Dexter 是一个开源金融研究智能体:它把复杂问题自动拆成可执行的研究步骤,自己抓取实时财务数据,再检查自己的工作,最后才给出答案。本文带你从源码层面走一遍这条"提问→取数→作答"的路径。
为什么复杂金融问题,直接问大模型总差口气
你晚上翻财报,想搞清楚特斯拉上季度现金流到底健康不健康。打开聊天框问一句,回来的是"品牌力强、但竞争激烈"之类的三行字,没有一个数字,也没有一个出处。
问题在于:金融答案必须落在数据上,而模型不知道数据在哪。你得自己去终端拉财报、自己算比率、自己找同行对照。这些脏活,正是 Dexter 想替你干的部分。
那它是怎么干成的?答案在一个循环里。
核心循环:智能体是怎么想一步做一步的 🔁
大白话讲,Dexter 的核心是一个智能体循环(Agent Loop,即模型"想一步、做一步、再看结果"的反复过程)。分三步看:
输入:你发一句问题。系统先给模型拼好"开场简报"——系统提示词、历史对话、你这句提问,同时为这次提问开一个 scratchpad(草稿板),一个只增不改的记录文件,后面每次工具调用都记进去。
处理:模型判断"我是否还缺数据"。缺,就发起工具调用(tool call,即模型告诉程序"去取这份数据",程序执行并把结果写回对话)。系统执行这些调用,把结果追加回对话。
输出:模型认为数据够了,就不再调工具,它的回复就是最终答案。
主循环就在 Agent 类 里:
// src/agent/agent.ts 主循环(节选简化) while (ctx.iteration < this.maxIterations) { const mc = microcompactMessages(messages); // 1. 清理上下文 const response = await this.callModel(messages); // 2. 让模型想一步 if (!hasToolCalls(response)) { // 3. 无工具调用 = 最终答案 yield* this.handleDirectResponse(responseText, ctx); return; } const { toolMessages } = await this.executeTools(response, ctx); // 4. 执行工具 messages.push(...toolMessages); }整个过程默认最多跑 10 轮。到点就停,并说明原因,不会无限转圈。
循环只是骨架,真正的难点在三个细节上。
关键能力拆解:拆任务、压上下文、防跑偏 🧩
任务怎么拆:工具表就是行动清单
Dexter 没有单独的"规划"模块,它拆任务靠的是看工具清单。工具注册表 里登记着 get_financials(财务报表)、get_market_data(行情与新闻)、read_filings(SEC 文件)、stock_screener(选股筛选)这些金融工具,每个工具还带一个"能否并发"标记。
模型看到问题后从这张清单里挑:先取什么数、再取什么数,一个复杂问题就这样变成一串工具调用,不需要你事先写计划。
上下文怎么压:三层防线防过载
一次工具结果动辄几万字符,模型窗口装不下这么多。Dexter 布了三层防线:第一层,超过 5 万字符的结果先落盘,上下文里只留 2000 字符预览加文件路径,见大结果持久化;第二层,每轮对话做一次轻量裁剪,把过老的只读工具结果清掉腾位置;第三层,当上下文逼近阈值,调一个快速模型把所有结果压缩成一份结构化"研究进度纪要",关键数字一个不落,接着干,见压缩模块。
怎么防跑偏:软限额而不是硬拦截
你可能会问:模型要是不停取数,会不会一直转?答案是 scratchpad 里的软限额。
它把每次工具调用记成 JSONL 文件,同时做软限制统计:每个工具默认最多调 3 次;发现你在重复几乎相同的参数,就往提示词里注入一条提醒,让模型自己意识到"该停手了"。
提醒而不是拦截,给模型留了自我纠正的余地。再叠加 10 轮迭代上限,"无限取数"这种死循环基本被堵死了。
原理讲完,看看它在真实任务里怎么跑。
实战走查:一句估值问题背后的三轮调用
举个例子,你输入:"NVDA 现在的估值合理吗?对比一下同行。"
第一轮:模型先用 get_financials 拉 NVDA 最新财报,同时并发起 get_market_data 取行情——只读工具可以并行跑,一步顶两步。
第二轮:它发现缺同行数据,用 stock_screener 或 web_search 补一列同业估值倍数。此时上一轮的大结果开始被裁剪:microcompact 把最老的内容清成占位标记,窗口腾出来了。
第三轮:数据够了,模型停止调用工具,直接输出答案:用了哪些估值倍数、对照了哪些数据、结论是什么,一次讲清。
你最终拿到两样东西:一份带数字和来源的回答;外加.dexter/scratchpad/里一个 JSONL 文件,完整记录每次工具调用和摘要。想核对某一步的算法,翻它就行。
想自己跑一遍的话,配置并不复杂。
快速上手:三步跑通 Dexter ⚡
git clone https://gitcode.com/GitHub_Trending/dexter19/dexter cd dexter && bun install cp env.example .env # 填上密钥 bun start细节见 README。提醒一句:.env 里至少填好 LLM 密钥(如 OPENAI_API_KEY)和 FINANCIAL_DATASETS_API_KEY,行情数据全靠后者,缺了工具集就是空的。
Dexter 的价值不在于它替你说出答案,而在于"问题→数据→结论"这条链路全程留痕、可复查。做 Agent 开发的话,值得把 src/agent/ 下的循环与压缩逻辑完整读一遍;做研究的话,clone 下来填好密钥,把你的第一个问题丢给它。
【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考