金融领域模型的实现拆解
前文我们整理了场景,完成了基础领域模型的建立,并且在LLM的协助下,完成了领域模型的划分和构建。
接下来,我们需要根据具体面向业务领域内的场景结合起来,完成对领域模型的编排,然后才能完成应用的落地。
我们可以根据Github上一个金融量化项目做例子AI-Hedge-Fund
该项目希望为用户提供一个可复刻的金融分析框架,并通过一个主Agent完成信息的整合和评估,并反馈给用户提供辅助决策,其项目最大亮点是,默认内置了六个金融分析框架,是当前国际金融投资比较出名的六个代表人物所使用的分析框架。
整个项目包含了多个Agent,
- Ben Graham
- Bill Ackman
- Cathie Wood
- Charlie Munger
- Phil Fisher
- Stan Drukenmiller
- Warren Buffett
分别模拟了不同类型的投资经理处理市场信息时候的方法。
让我们一起看看这些Agent都是如何实现的吧。以下是其中两个Agent案例,其他都是类似。
Warren Buffett Agent的实现
其核心代码在以下py文件中:src/agents/warren_buffett.py,我们同样可以让LLM帮助我们进行分析。
prompt如下:
请阅读以下代码,并且帮我分析其实现逻辑。
warren_buffett.py
返回如下:
# 代码分析:Warren Buffett 股票分析代理
这段代码实现了一个基于沃伦·巴菲特(Warren Buffett)投资原则的股票分析代理。下面我将详细分析其实现逻辑:
## 1. 整体架构
代码主要由以下几个部分组成:
- `WarrenBuffettSignal` 数据模型:定义分析结果的输出格式
- `warren_buffett_agent` 主函数:协调整个分析流程
- 多个分析函数:负责不同方面的财务分析
- `generate_buffett_output` 函数:使用LLM生成最终分析结果
## 2. 主要工作流程
1. **数据收集阶段**:
- 获取财务指标(`get_financial_metrics`)
- 获取财务科目数据(`search_line_items`)
- 获取市值数据(`get_market_cap`)
2. **分析阶段**:
- 基本面分析(`analyze_fundamentals`)
- 一致性分析(`analyze_consistency`)
- 护城河分析(`analyze_moat`)
- 定价能力分析(`analyze_pricing_power`)
- 账面价值增长分析(`analyze_book_value_growth`)
- 管理层质量分析(`analyze_management_quality`)
- 内在价值计算(`calculate_intrinsic_value`)
3. **综合评分阶段**:
- 计算总分和最大可能分
- 计算安全边际(margin of safety)
4. **LLM推理阶段**:
- 使用LLM生成巴菲特风格的分析结果(`generate_buffett_output`)
## 3. 关键分析函数详解
### 3.1 基本面分析(`analyze_fundamentals`)
- 评估指标:
- 股本回报率(ROE):>15%为优秀
- 负债权益比:<0.5为保守
- 营业利润率:>15%为优秀
- 流动比率:>1.5为良好
### 3.2 护城河分析(`analyze_moat`)
- 评估指标:
- 资本回报一致性(ROE和ROIC)
- 营业利润率稳定性
- 资产利用效率
- 业绩稳定性(变异系数)
### 3.3 管理层质量分析(`analyze_management_quality`)
- 评估指标:
- 股票回购行为(负值为回购)
- 股票发行行为(正值为发行)
- 分红记录
### 3.4 内在价值计算(`calculate_intrinsic_value`)
- 使用三阶段DCF模型:
- 阶段1:高增长期(5年)
- 阶段2:过渡期(5年)
- 终值期:长期GDP增长率
- 使用所有者收益(owner earnings)而非净利润
- 应用15%的安全边际
### 3.5 账面价值增长分析(`analyze_book_value_growth`)
- 评估每股账面价值的增长一致性和复合增长率
### 3.6 定价能力分析(`analyze_pricing_power`)
- 评估毛利率趋势和稳定性
## 4. LLM集成
`generate_buffett_output`函数使用精心设计的提示模板,指导LLM以沃伦·巴菲特的思维方式和语言风格进行分析。提示模板包含:
- 巴菲特的核心原则
- 能力圈偏好
- 投资标准层次
- 语言风格指导
- 信心水平定义
## 5. 代码特点
1. **模块化设计**:每个分析功能独立封装,便于维护和扩展
2. **进度跟踪**:使用`progress.update_status`跟踪分析进度
3. **保守估计**:在多个分析中采用保守假设
4. **数据验证**:充分检查数据可用性
5. **详细记录**:保留分析细节和推理过程
## 6. 使用场景
这段代码适用于:
- 价值投资分析工具
- 股票筛选系统
- 投资教育平台
- 财务研究工具
代码实现了巴菲特投资理念的量化表达,结合了传统财务分析和现代LLM技术,能够生成符合巴菲特思维方式的投资建议。
Charlie Munger Agent的实现
其核心代码在以下py文件中:src/agents/charlie_munger.py,我们同样可以让LLM帮助我们进行分析。
prompt如下:
同样,请分析这份代码
charlie_munger.py
返回如下:
# 代码分析:Charlie Munger 股票分析代理
这段代码实现了一个基于查理·芒格(Charlie Munger)投资原则的股票分析代理。下面我将详细分析其实现逻辑:
## 1. 整体架构
代码主要由以下几个部分组成:
- `CharlieMungerSignal` 数据模型:定义分析结果的输出格式
- `charlie_munger_agent` 主函数:协调整个分析流程
- 多个分析函数:负责不同方面的财务分析
- `generate_munger_output` 函数:使用LLM生成最终分析结果
## 2. 主要工作流程
1. **数据收集阶段**:
- 获取财务指标(`get_financial_metrics`)
- 获取财务科目数据(`search_line_items`)
- 获取市值数据(`get_market_cap`)
- 获取内幕交易数据(`get_insider_trades`)
- 获取公司新闻(`get_company_news`)
2. **分析阶段**:
- 护城河强度分析(`analyze_moat_strength`)
- 管理层质量分析(`analyze_management_quality`)
- 业务可预测性分析(`analyze_predictability`)
- 芒格式估值计算(`calculate_munger_valuation`)
- 新闻情绪分析(`analyze_news_sentiment`)
3. **综合评分阶段**:
- 按照芒格的权重偏好计算总分(护城河35%,管理层25%,可预测性25%,估值15%)
- 生成简单的买入/持有/卖出信号
4. **LLM推理阶段**:
- 使用LLM生成芒格风格的分析结果(`generate_munger_output`)
## 3. 关键分析函数详解
### 3.1 护城河强度分析(`analyze_moat_strength`)
- 评估指标:
- 投资资本回报率(ROIC):>15%为优秀(芒格最看重的指标)
- 定价能力:毛利率稳定性和趋势
- 资本密集度:资本支出占收入比例(<5%为优秀)
- 无形资产:研发投入和商誉/无形资产
### 3.2 管理层质量分析(`analyze_management_quality`)
- 评估指标:
- 资本配置智慧:自由现金流与净利润比率
- 债务管理:负债权益比(<0.3为优秀)
- 现金管理效率:现金与收入比率(10-25%为理想)
- 内幕交易活动:买入/卖出比例
- 股票数量变化:芒格偏好稳定或减少的流通股
### 3.3 业务可预测性分析(`analyze_predictability`)
- 评估指标:
- 收入稳定性和增长:平均增长率和波动性
- 营业利润稳定性:正营业利润的时期比例
- 利润率一致性:营业利润率的波动性
- 现金生成可靠性:正自由现金流的时期比例
### 3.4 芒格式估值计算(`calculate_munger_valuation`)
- 使用简化方法:
- 基于3-5年平均自由现金流(FCF)进行估值
- 计算FCF收益率(自由现金流/市值)
- 应用简单的倍数范围(保守10x,合理15x,乐观20x)
- 评估安全边际(当前价格与合理价值的差距)
## 4. LLM集成
`generate_munger_output`函数使用精心设计的提示模板,指导LLM以查理·芒格的思维方式和语言风格进行分析。提示模板包含:
- 芒格的10条核心原则
- 分析规则和偏好
- 推理要求(应用2-3个心智模型)
- 芒格的语言风格指导
## 5. 代码特点
1. **芒格特色权重**:分析分数按芒格偏好加权(护城河最重要)
2. **长期视角**:使用10年数据进行分析
3. **多维度验证**:结合定量数据和定性因素(如内幕交易)
4. **保守估值**:避免复杂DCF,使用简单倍数
5. **逆向思维**:强调"避免愚蠢"而非追求聪明
## 6. 与巴菲特代理的对比
1. **重点差异**:
- 芒格代理更强调ROIC而非ROE
- 更关注内幕交易和管理层行为
- 估值方法更简化直接
- 权重分配反映芒格偏好(护城河35%)
2. **共同点**:
- 都重视护城河和定价能力
- 都偏好低债务和稳定现金流
- 都使用LLM生成风格化分析
## 7. 使用场景
这段代码适用于:
- 价值投资分析工具
- 长期投资者筛选系统
- 投资教育平台
- 公司治理研究工具
代码实现了芒格投资理念的量化表达,结合了传统财务分析和现代LLM技术,能够生成符合芒格思维方式的投资建议。
总结
基于两份代码,我们得到以下规律:
- LLM给出总结如下:
以下是两份代码实现的对比分析表格及总结的实现规律:
---
### **沃伦·巴菲特代理 vs 查理·芒格代理对比分析**
| **对比维度** | **沃伦·巴菲特代理** | **查理·芒格代理** | **异同总结** |
| ---------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
| **核心指标** | - 重点分析ROE(股本回报率)<br>- 关注账面价值增长<br>- 强调安全边际(Margin of Safety) | - 核心指标为ROIC(投资资本回报率)<br>- 关注自由现金流(FCF)<br>- 简化估值方法(FCF倍数) | **差异**:巴菲特更重ROE和账面价值,芒格更重ROIC和FCF;**相同**:均重视资本回报率 |
| **估值方法** | - 三阶段DCF模型(复杂)<br>- 计算内在价值后附加15%安全边际 | - 简单FCF倍数法(10x/15x/20x)<br>- 直接比较FCF收益率与市值 | **差异**:巴菲特用复杂DCF,芒格用简化倍数;**相同**:均要求估值保守性 |
| **管理层分析** | - 检查股票回购/发行<br>- 评估分红记录 | - 结合内幕交易数据(买入/卖出)<br>- 分析现金转换效率(FCF/净利润) | **差异**:芒格更依赖内幕交易数据;**相同**:均关注资本配置行为 |
| **护城河分析** | - 评估ROE一致性、利润率稳定性<br>- 检查资产效率 | - 强调ROIC一致性、资本密集度(Capex/Revenue)<br>- 关注无形资产(R&D、商誉) | **相同**:均重视持久竞争优势,但芒格更量化资本效率 |
| **数据周期** | - 默认TTM(最近12个月)+10期历史数据 | - 默认年度数据+10年历史 | **差异**:巴菲特偏短期趋势,芒格偏长期;**相同**:均需多期数据验证稳定性 |
| **LLM提示设计** | - 强调"能力圈"和具体行业偏好(如消费品、银行)<br>- 引用巴菲特名言和案例(如可口可乐) | - 要求应用"心智模型"(如逆向思维)<br>- 引用芒格语录(如"避免愚蠢") | **相同**:均需模仿投资大师的思维和语言风格 |
| **权重分配** | - 均等权重(各分析模块分数简单相加) | - 明确权重:护城河35%、管理层25%、可预测性25%、估值15% | **差异**:芒格代理显式定义权重,反映其"质量优先"理念 |
| **输出信号逻辑** | - 依赖LLM综合判断生成信号 | - 先量化评分(7.5分以上为买入)<br>- LLM补充理由 | **差异**:芒格代理更依赖量化阈值;**相同**:最终均由LLM生成风格化分析 |
---
### **实现规律总结**
1. **模块化分析框架**
- **规律**:均将投资理念拆解为独立分析模块(护城河、管理层、估值等),通过子函数实现。
- **目的**:增强可维护性,便于单独优化某一维度的逻辑。
2. **数据驱动的保守假设**
- **规律**:在估值和分析中刻意采用保守参数(如安全边际、增长率上限)。
- **示例**:巴菲特代理限制增长率为8%,芒格代理使用10x FCF的保守倍数。
3. **长期一致性验证**
- **规律**:均要求多期历史数据(5-10年),避免短期波动干扰判断。
- **体现**:`analyze_predictability()`和`analyze_moat()`均依赖长期趋势。
4. **LLM的角色分工**
- **规律**:量化分析提供结构化输入,LLM负责风格化输出。
- **分工**:
- 量化部分:计算分数、比率等硬性指标
- LLM部分:解释数据、应用投资哲学、生成自然语言
5. **差异化权重设计**
- **规律**:权重分配反映投资大师的偏好。
- **案例**:芒格代理中护城河权重(35%)>管理层(25%),体现其"质量优先"原则。
6. **逆向思维检查**
- **规律**:均包含"避免什么"的分析(如巴菲特代理检查负债,芒格代理检查内幕卖出)。
- **实现**:通过负向指标(如高负债、稀释股份)扣分或生成警告。
7. **渐进式状态跟踪**
- **规律**:使用`progress.update_status()`实时记录分析进度。
- **价值**:提升可观测性,便于调试和用户反馈。
- 从产品视角,结合我们前文的文字类AI应用,我们可以得到一个全新的应用,即金融分析类型的AI应用,其扩展思路完全可以参照以上分析做领域模型增强。
- 因为能够一贯的使用同一个模型结合其他领域的模型,我们称这个领域模型有很好的泛用性。
- 模型与模型之间的结合,完全可以依赖LLM带来的能力完成,我们只需要把控最终输出产物。
- 基于以上开发流程,我们可以总结一般性文字类相关的Agent开发流程:
- 设计基础的聊天类型的领域,并设置扩展点
- 扩展点需要结合新的领域内容,进行定向设置
- 尽量选择领域内容相互不相交的内容进行组合
- 人一定要把控最终输出内容