← Back to Blog
SEC 工具使用指南
这个文档介绍如何在项目中使用SEC工具来获取和分析美国证券交易委员会(SEC)的10-K报告数据。
概述
SEC工具提供了三个核心功能:
- 获取10-K元数据 - 搜索和获取10-K报告的基本信息
- 下载10-K报告 - 下载完整的10-K报告文件(HTML/PDF格式)
- 提取10-K章节 - 提取10-K报告中的特定章节内容
环境配置
1. 获取SEC API密钥
首先需要从 SEC API 获取API密钥。
2. 设置环境变量
# 在 .env 文件中添加
SEC_API_KEY=your_sec_api_key_here
3. 启用SEC工具
在工具配置中启用SEC工具:
const toolConfig = {
enabled: true,
apps: ['sec_api', 'tavily', 'user_query'] // 添加 sec_api
}
工具功能详解
1. SEC 10-K 元数据工具 (sec_10k_metadata
)
获取公司10-K报告的基本信息和元数据。
输入参数:
ticker
: 股票代码 (如: AAPL, TSLA, MSFT)startDate
: 搜索开始日期 (格式: YYYY-MM-DD)endDate
: 搜索结束日期 (格式: YYYY-MM-DD)
输出:
{
success: true,
ticker: "AAPL",
metadata: {
formType: "10-K",
filedAt: "2023-11-03",
companyName: "Apple Inc.",
ticker: "AAPL",
linkToFilingDetails: "https://...",
linkToTxt: "https://...",
linkToHtml: "https://...",
periodOfReport: "2023-09-30"
},
timestamp: "2024-01-15T10:30:00.000Z"
}
2. SEC 10-K 下载工具 (sec_10k_download
)
下载完整的10-K报告文件。
输入参数:
ticker
: 股票代码startDate
: 搜索开始日期endDate
: 搜索结束日期saveFolder
: 保存目录路径format
: 文件格式 ("html" | "pdf")
输出:
{
success: true,
ticker: "AAPL",
filePath: "./downloads/2023-10-02_10-K_0000320193-23-000106.html",
fileName: "2023-10-02_10-K_0000320193-23-000106.html",
format: "html",
filing: { /* 报告元数据 */ },
timestamp: "2024-01-15T10:30:00.000Z"
}
3. SEC 10-K 章节工具 (sec_10k_section
)
提取10-K报告中的特定章节内容。
输入参数:
ticker
: 股票代码fiscalYear
: 财年 (如: "2023")section
: 章节编号 ("1", "1A", "2", "3", "7", "7A", "8", "9A")reportUrl
: (可选) 直接指定报告URLsavePath
: (可选) 保存提取内容的路径
输出:
{
success: true,
ticker: "AAPL",
fiscalYear: "2023",
section: "1",
content: "Business section content...",
contentLength: 25000,
cached: true,
timestamp: "2024-01-15T10:30:00.000Z"
}
10-K 章节说明
章节 | 名称 | 内容描述 | 适用分析 |
---|---|---|---|
1 | Business | 业务描述、产品服务、竞争优势 | 收入分析、业务价值 |
1A | Risk Factors | 风险因素和不确定性 | 风险评估、业务价值 |
2 | Properties | 房地产和物业信息 | 资产分析、业务价值 |
3 | Legal Proceedings | 法律诉讼情况 | 风险评估 |
7 | MD&A | 管理层讨论与分析 | 收入分析、增长分析 |
7A | Market Risk | 市场风险量化披露 | 增长分析、风险评估 |
8 | Financial Statements | 财务报表 | 财务分析 |
9A | Controls and Procedures | 内控制度 | 合规分析 |
使用示例
基础使用
import { getAllSECTools } from './lib/tools/sec-tools';
// 获取所有SEC工具
const secTools = await getAllSECTools();
// 使用元数据工具
const metadataTool = secTools.find(tool => tool.actionName === 'sec_10k_metadata');
const result = await metadataTool.callback({
ticker: 'AAPL',
startDate: '2023-01-01',
endDate: '2023-12-31'
});
console.log('Apple 10-K metadata:', result);
财务分析工作流
import { setupSECWorkflow, getAnalysisSections } from './lib/tools/sec-example';
// 设置SEC工作流
const { toolset } = await setupSECWorkflow();
// 根据分析类型获取所需章节
const sectionsNeeded = getAnalysisSections('revenue'); // ["1", "7"]
// 获取各个章节的内容
for (const section of sectionsNeeded) {
const sectionResult = await getSECSection('AAPL', '2023', section);
console.log(`Section ${section}:`, sectionResult.contentLength, 'characters');
}
与LangGraph集成
import { StateGraph } from "@langchain/langgraph";
// 在LangGraph工作流中使用
const workflow = new StateGraph(YourAnnotation)
.addNode("sec_data", async (state) => {
const secTools = await getAllSECTools();
const metadataTool = secTools[0];
const result = await metadataTool.callback({
ticker: state.ticker,
startDate: `${state.fiscalYear}-01-01`,
endDate: `${state.fiscalYear}-12-31`
});
return { ...state, secData: result };
})
.addNode("analysis", analysisNode)
.addEdge("sec_data", "analysis");
缓存机制
SEC工具自动缓存提取的章节内容到 .cache/sec_tools/
目录,避免重复API调用:
.cache/sec_tools/
├── AAPL_2023_section_1.txt
├── AAPL_2023_section_7.txt
└── TSLA_2023_section_1A.txt
缓存文件命名格式:{TICKER}_{FISCAL_YEAR}_section_{SECTION}.txt
错误处理
工具包含完善的错误处理机制:
const result = await tool.callback(params);
if (!result.success) {
console.error('SEC API Error:', result.error);
// 处理错误情况
}
常见错误:
SEC_API_KEY not configured
- 未设置API密钥No 10-K filing found for the specified period
- 指定时间段内没有找到10-K报告Invalid section number
- 无效的章节编号API rate limit exceeded
- API调用频率超限
测试
运行测试来验证工具是否正常工作:
# 运行单元测试
npx tsx lib/tools/sec-tools.test.ts
# 或使用测试脚本
npx tsx scripts/test-sec-tools.ts unit
# 运行集成测试(需要真实API密钥)
SEC_API_KEY=your_key npx tsx scripts/test-sec-tools.ts integration
最佳实践
1. 选择合适的章节
根据分析目标选择相关章节:
- 收入分析: 章节1(业务) + 章节7(MD&A)
- 业务价值评估: 章节1(业务) + 章节1A(风险) + 章节2(资产)
- 增长分析: 章节7(MD&A) + 章节7A(市场风险)
2. 合理使用缓存
- 首次提取后,相同的章节会自动缓存
- 定期清理缓存目录避免占用过多空间
- 新财年数据发布后需要清理对应缓存
3. API调用优化
- 批量处理多个公司时,添加适当延迟避免频率限制
- 优先使用缓存的内容,减少不必要的API调用
- 在工作流中合理安排SEC数据获取的时机
4. 内容处理
- 提取的章节内容可能包含HTML标签,需要清理
- 内容长度可能很大,考虑分块处理
- 重要信息可能分散在多个章节中,需要综合分析
支持的公司
理论上支持所有在SEC注册的美国上市公司,包括但不限于:
科技公司: AAPL, MSFT, GOOGL, AMZN, META, TSLA, NVDA, NFLX 金融公司: JPM, BAC, WFC, GS, MS 工业公司: GE, CAT, MMM, BA 消费公司: KO, PG, JNJ, WMT
故障排除
常见问题
-
"SEC_API_KEY not configured"
- 检查环境变量是否正确设置
- 确认API密钥有效
-
"No 10-K filing found"
- 检查股票代码是否正确
- 调整搜索日期范围
- 确认公司在指定期间有提交10-K报告
-
API调用失败
- 检查网络连接
- 确认API密钥额度充足
- 检查API服务状态
调试模式
启用调试日志:
// 在工具调用前设置
process.env.SEC_DEBUG = 'true';
这将输出详细的API调用信息和错误详情。
更新日志
- v1.0.0 - 初始版本,支持10-K元数据获取、文件下载、章节提取
- 计划功能:支持其他SEC表格类型(10-Q, 8-K等)、增强的内容解析、更多缓存选项
更多信息请参考: