Dexter 实战指南:AI 金融分析师的任务拆解术全揭秘
【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexter
想 10 分钟搞清一家公司上个季度的财务健康度,你得翻几份报表、算多少比率?Dexter 是一个自主金融研究智能体,能把这类复杂金融分析拆成可执行的步骤,替你把数据找齐、算完,再写成一份能读的报告。它怎么做到的?拆开看。
一、它到底在解决什么问题?
把 Dexter 想象成一位从不疲倦的财务分析师:你只给问题,它自己决定查什么、算什么、查几轮,最后把散落在各处的数字缝成一份结论。
它接住的是自然语言问题——"AAPL 和 MSFT 谁的增长更快"、"这个币最近的走势如何"。能覆盖的输入包括三张财务报表、SEC 监管文件(10-K、10-Q)、股票与加密货币行情、公司新闻、内部人交易、机构持仓,输出则是一段自然语言分析,必要时附带数据表格。
你不需要知道哪个 API 查三表、哪个查行情——它替你选。
二、一次问答的完整旅程
问题真正进来时,它第一步做什么?
把它想象成医生问诊:先听你说哪里不舒服,判断该做哪几项检查;每次检查结果一回来,就决定要不要再开单,直到能下诊断。
Dexter 的核心循环在 src/agent/agent.ts 的run()方法里,每一轮都是"想清楚 → 做动作 → 记结果 → 判断够不够":
- 模型读入你的问题和工具清单,决定调用哪些工具;每个决定都先记进工作区
- 工具执行完,结果回传,模型重新评估:信息够了就出答案,不够就进入下一轮
- 模型不再要工具、直接给文字答案时,循环结束,这份文字就是最终报告
中间有个关键角色:Scratchpad(临时工作区)。它定义在 src/agent/scratchpad.ts,每次提问开一份新档案,把原问题、每轮思考、每次工具调用的参数和结果逐条追加,以 JSONL 格式存到.dexter/scratchpad/:
append(entry: ScratchpadEntry): void { appendFileSync(this.filepath, JSON.stringify(entry) + '\n'); }需要它的原因:上下文迟早要压缩,而原始数据不能丢——档案既是压缩时的数据源,也是每次调用的完整审计记录。
问题 → 思考 → 工具执行 → 记入 Scratchpad → 再思考 → … → 最终答案三、三个让分析不跑偏的"旋钮"
旋钮 1:工具匹配
工具统一在 src/tools/registry.ts 注册。每个金融工具都带一份"何时用、何时别用"的说明,直接写进系统提示词——模型按说明对号入座。比如查三表走get_financials,行情走get_market_data;且约定一次调用就传完整问题,由工具内部做路由。
没有它,模型会在相近工具间反复横跳,拿回来的数据一半用不上。
旋钮 2:上下文瘦身
工具结果塞回对话上下文,上下文会越滚越肥。src/utils/tool-result-storage.ts 里设了单条结果的体积上限:
export const MAX_TOOL_RESULT_CHARS = 50_000;超限的完整结果落盘,上下文里只留 2000 字符预览和文件路径;上下文逼近模型窗口时,src/agent/compact.ts 让一个快的 LLM 把累积结果总结成保留全部关键数字的摘要,用"原问题 + 摘要"替换原始消息继续跑。
没有它,十几轮之后上下文溢出报错,前面的数据全部作废。
旋钮 3:迭代刹车
const DEFAULT_MAX_ITERATIONS = 10;这是硬上限,写在 src/agent/agent.ts。另外每个工具单次提问建议最多调 3 次,接近上限时模型会收到提醒:"换工具、换关键词,或承认数据缺口"。
没有它,一个查不到数据的工具能被反复重试到耗尽 Token。
四、跟着一个真实问题走完全程
问题:"评估特斯拉 2024 年 Q3 的财务健康度。"
- 问题进来:识别要素——公司(Tesla)、时间点(2024Q3)、维度(财务健康度),Scratchpad 建档
- 第一轮取数:调
read_filings拿 10-Q 里的资产负债与现金流(src/tools/finance/filings.ts);同时调get_financials要利润表、营收增长和关键比率(src/tools/finance/get-financials.ts)——两个调用并发执行 - 摘要压缩:两份结果回传,只把关键数字留在上下文,原始数据落盘(src/utils/tool-result-storage.ts)
- 继续深挖:看到现金流为正但资本开支高,补查自由现金流与历史比率趋势(src/tools/finance/key-ratios.ts);再调
get_market_data拿股价区间与当季新闻(src/tools/finance/stock-price.ts) - 整合输出:第三轮工具返回后模型判断信息足够,不再调用工具,直接输出结论——现金储备、资本开支压力、营收增速对比,一段能读的话
机制是真的在跑:工具按轮次并发、结果逐条入账、刹车随时生效。
五、代码地图(快速定位)
| 文件 | 职责 |
|---|---|
| src/agent/agent.ts | 智能体主循环:思考、执行、收敛 |
| src/agent/scratchpad.ts | 每次提问的临时工作区,记录全部中间过程 |
| src/tools/registry.ts | 工具注册表,决定模型"手里有什么" |
| src/agent/prompts.ts | 系统提示词模板:行为准则 + 工具用法 |
| src/tools/finance/ | 财务工具集:三表、文件、行情、比率、筛选 |
| src/agent/compact.ts | 上下文压缩:把累积结果总结成摘要 |
六、三步跑起来
git clone https://gitcode.com/GitHub_Trending/dexter19/dexter cd dexter && bun install cp env.example .env # 填入 OPENAI_API_KEY 与 FINANCIAL_DATASETS_API_KEY,然后 bun start适合谁:想体验"提问 → 拿到研究报告"的金融数据流,或者想拆解一个 Agent 怎么管好上下文与工具的开发者。
拆解术的价值不在模型本身,而在模型周围那张工作台。
【免费下载链接】dexterAn autonomous agent for deep financial research项目地址: https://gitcode.com/GitHub_Trending/dexter19/dexter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考