1. 商品範圍
WASDE 涵蓋三大類商品,每類有不同的表格結構與單位:
| 類別 |
商品 |
US 單位 |
World 單位 |
| Grains |
Wheat, Corn, Rice, Barley, Sorghum, Oats |
million bushels / cwt |
million metric tons |
| Oilseeds |
Soybeans, Soybean Oil, Soybean Meal |
million bushels / pounds |
million metric tons |
| Cotton |
Upland, Pima |
million 480-lb bales |
million 480-lb bales |
| Livestock |
Beef, Pork, Poultry, Eggs, Dairy |
million lbs / dozen / lbs |
- (US only) |
| Sugar |
Sugar |
1,000 short tons |
- (US + Mexico only) |
2. 表格結構一致性
所有供需表遵循相同的平衡公式:
Ending Stocks = Beginning Stocks + Production + Imports - Total Use - Exports
3. 版本控制
- 每月報告可能修正前期數據
- 使用
content_hash 追蹤數據變化
- 保留
revision_flag 標記修正值
4. 解析優先級
- PDF 結構化解析(優先)
- HTML 表格解析(fallback)
- TXT 固定寬度解析(legacy)
- Ingest - 抓取並解析最新或指定月份的 WASDE 報告
- Backfill - 批量回補歷史 WASDE 數據
- Validate - 驗證現有數據與最新報告的一致性
- Configure - 配置商品範圍、輸出路徑等參數
等待回應後再繼續。
讀取工作流程後,請完全遵循其步驟。
| 文件 |
內容 |
| commodities-overview.md |
所有商品總覽與單位對照 |
| grains.md |
穀物類(Wheat, Corn, Rice, Barley, Sorghum, Oats) |
| oilseeds.md |
油籽類(Soybeans, Soybean Oil, Soybean Meal) |
| cotton.md |
棉花(US & World) |
| livestock.md |
畜產品(Beef, Pork, Poultry, Eggs, Dairy) |
| sugar.md |
糖(US & Mexico) |
| validation-rules.md |
驗證規則與合理性檢查 |
| failure-modes.md |
失敗模式與緩解策略 |
|
|
| Script |
Purpose |
| discover_releases.py |
發現 WASDE 發布日期與 URL |
| fetch_report.py |
下載 PDF/HTML 報告 |
| parse_tables.py |
解析表格提取數據 |
| validate_data.py |
執行驗證檢查 |
|
|
| 文件 |
內容 |
| corn_us_balance.json |
美國玉米供需平衡表範例 |
| wheat_world_balance.json |
世界小麥供需平衡表範例 |
| ingest_status_success.json |
成功執行的狀態報告範例 |
| backfill_result.json |
批量回補作業結果範例 |
|
|
# 抓取最新報告的所有商品
macro-skills wasde ingest --commodities=all --out=./data
# 只抓取穀物類
macro-skills wasde ingest --commodities=grains --out=./data
# 回補過去 24 個月的大豆數據
macro-skills wasde backfill --commodity=soybeans --months=24 --out=./data
# 驗證現有數據
macro-skills wasde validate --data-dir=./data
Library 快速開始:
from macro_skills.wasde import WASDEIngestor
ingestor = WASDEIngestor(
commodities=["wheat", "corn", "soybeans"],
scope=["us", "world"],
output_dir="./data/wasde"
)
result = ingestor.ingest_latest()
print(result.status)
範例 1:抓取最新玉米與大豆數據
User: 幫我抓取最新 WASDE 的玉米和大豆供需數據
Assistant 執行步驟:
1. 讀取 workflows/ingest.md
2. 呼叫 discover_releases.py 找到最新發布 (2025-01-10)
3. 下載 PDF 報告
4. 解析 corn_us, corn_world, soybeans_us, soybeans_world 表格
5. 驗證平衡公式
6. 輸出 parquet 檔案
7. 回報 ingest_status
預期輸出:
- ./data/wasde/curated/corn_us_balance.parquet
- ./data/wasde/curated/corn_world_balance.parquet
- ./data/wasde/curated/soybeans_us_balance.parquet
- ./data/wasde/curated/soybeans_world_balance.parquet
範例 2:回補歷史小麥數據並追蹤修正
User: 回補過去 12 個月的小麥數據,我想追蹤 USDA 的修正歷程
Assistant 執行步驟:
1. 讀取 workflows/backfill.md
2. 確定日期範圍 (2024-01 至 2024-12)
3. 依序處理 12 期報告
4. 比對每期數據,標記修正值
5. 輸出包含 revision_flag 的完整歷史數據
預期輸出:
- 12 期小麥數據
- 修正追蹤報告
範例 3:驗證現有數據一致性
User: 檢查我現有的 WASDE 數據是否與最新報告一致
Assistant 執行步驟:
1. 讀取 workflows/validate.md
2. 載入現有 parquet 檔案
3. 抓取最新報告
4. 逐欄位比對
5. 標記差異與修正
6. 輸出驗證報告
預期輸出:
- validation_report.json (差異列表)
- 修正建議
[USDA WASDE Website]
|
v
+-------------------+
| discover_releases | --> 找到 PDF URL 與發布日期
+-------------------+
|
v
+-------------------+
| fetch_report | --> 下載 PDF (fallback: HTML)
+-------------------+
|
v
+-------------------+
| parse_tables | --> 提取供需表格數據
+-------------------+
|
v
+-------------------+
| normalize_data | --> 標準化欄位與單位
+-------------------+
|
v
+-------------------+
| validate_data | --> 平衡公式與範圍檢查
+-------------------+
|
v
+-------------------+
| write_output | --> Parquet / JSON
+-------------------+
|
v
[Curated Dataset]
目錄結構:
data/wasde/
├── raw/ # 原始 PDF 檔案
│ └── 2025-01-10/
│ └── wasde0125.pdf
├── intermediate/ # 中間解析結果
│ └── 2025-01-10/
│ ├── tables.json
│ └── ingest_status.json
└── curated/ # 最終標準化數據
├── corn_us_balance.parquet
├── corn_world_balance.parquet
├── wheat_us_balance.parquet
└── ...
1---2name: wasde-ingestor3description: 下載並解析 USDA 每月發布的 WASDE 報告,擷取所有主要商品(穀物、油籽、棉花、畜產品、糖)的供需平衡表。輸出標準化、可版本化的資料集,作為即時預測(nowcasting)的錨定基準。4---5
6<essential_principles>
7**WASDE Ingestor 核心原則**
8
9**1. 商品範圍**
10
11WASDE 涵蓋三大類商品,每類有不同的表格結構與單位:
12
13| 類別 | 商品 | US 單位 | World 單位 |
14|-----------|------------------------------------------|---------------------------|----------------------|
15| Grains | Wheat, Corn, Rice, Barley, Sorghum, Oats | million bushels / cwt | million metric tons |
16| Oilseeds | Soybeans, Soybean Oil, Soybean Meal | million bushels / pounds | million metric tons |
17| Cotton | Upland, Pima | million 480-lb bales | million 480-lb bales |
18| Livestock | Beef, Pork, Poultry, Eggs, Dairy | million lbs / dozen / lbs | - (US only) |
19| Sugar | Sugar | 1,000 short tons | - (US + Mexico only) |
20
21**2. 表格結構一致性**
22
23所有供需表遵循相同的平衡公式:
24```
25Ending Stocks = Beginning Stocks + Production + Imports - Total Use - Exports
26```
27
28**3. 版本控制**
29
30- 每月報告可能修正前期數據
31- 使用 `content_hash` 追蹤數據變化
32- 保留 `revision_flag` 標記修正值
33
34**4. 解析優先級**
35
361. PDF 結構化解析(優先)
372. HTML 表格解析(fallback)
383. TXT 固定寬度解析(legacy)
39</essential_principles>
40
41<intake>
42**您想要執行什麼操作?**
43
441. **Ingest** - 抓取並解析最新或指定月份的 WASDE 報告
452. **Backfill** - 批量回補歷史 WASDE 數據
463. **Validate** - 驗證現有數據與最新報告的一致性
474. **Configure** - 配置商品範圍、輸出路徑等參數
48
49**等待回應後再繼續。**
50</intake>
51
52<routing>
53| Response | Workflow | Description |
54|-----------------------------------------|------------------------|---------------------|
55| 1, "ingest", "fetch", "parse", "latest" | workflows/ingest.md | 抓取解析 WASDE 報告 |
56| 2, "backfill", "historical", "batch" | workflows/backfill.md | 批量回補歷史數據 |
57| 3, "validate", "check", "verify" | workflows/validate.md | 驗證數據一致性 |
58| 4, "configure", "config", "setup" | workflows/configure.md | 配置參數 |
59
60**讀取工作流程後,請完全遵循其步驟。**
61</routing>
62
63<reference_index>
64**商品參考文件** (`references/`)
65
66| 文件 | 內容 |
67|-------------------------|----------------------------------------------------|
68| commodities-overview.md | 所有商品總覽與單位對照 |
69| grains.md | 穀物類(Wheat, Corn, Rice, Barley, Sorghum, Oats) |
70| oilseeds.md | 油籽類(Soybeans, Soybean Oil, Soybean Meal) |
71| cotton.md | 棉花(US & World) |
72| livestock.md | 畜產品(Beef, Pork, Poultry, Eggs, Dairy) |
73| sugar.md | 糖(US & Mexico) |
74| validation-rules.md | 驗證規則與合理性檢查 |
75| failure-modes.md | 失敗模式與緩解策略 |
76</reference_index>
77
78<workflows_index>
79| Workflow | Purpose |
80|--------------|-------------------------------|
81| ingest.md | 抓取解析單一或多個 WASDE 報告 |
82| backfill.md | 批量回補歷史數據 |
83| validate.md | 驗證數據一致性與修正追蹤 |
84| configure.md | 配置商品範圍與輸出設定 |
85</workflows_index>
86
87<templates_index>
88| Template | Purpose |
89|---------------------------|---------------------|
90| config.yaml | 標準配置文件模板 |
91| us-balance-schema.yaml | US 供需表 schema |
92| world-balance-schema.yaml | World 供需表 schema |
93</templates_index>
94
95<scripts_index>
96| Script | Purpose |
97|----------------------|---------------------------|
98| discover_releases.py | 發現 WASDE 發布日期與 URL |
99| fetch_report.py | 下載 PDF/HTML 報告 |
100| parse_tables.py | 解析表格提取數據 |
101| validate_data.py | 執行驗證檢查 |
102</scripts_index>
103
104<examples_index>
105**範例輸出** (`examples/`)
106
107| 文件 | 內容 |
108|----------------------------|------------------------|
109| corn_us_balance.json | 美國玉米供需平衡表範例 |
110| wheat_world_balance.json | 世界小麥供需平衡表範例 |
111| ingest_status_success.json | 成功執行的狀態報告範例 |
112| backfill_result.json | 批量回補作業結果範例 |
113</examples_index>
114
115<quick_start>
116**CLI 快速開始:**
117
118```bash
119# 抓取最新報告的所有商品
120macro-skills wasde ingest --commodities=all --out=./data
121
122# 只抓取穀物類
123macro-skills wasde ingest --commodities=grains --out=./data
124
125# 回補過去 24 個月的大豆數據
126macro-skills wasde backfill --commodity=soybeans --months=24 --out=./data
127
128# 驗證現有數據
129macro-skills wasde validate --data-dir=./data
130```
131
132**Library 快速開始:**
133
134```python
135from macro_skills.wasde import WASDEIngestor
136
137ingestor = WASDEIngestor(
138 commodities=["wheat", "corn", "soybeans"],
139 scope=["us", "world"],
140 output_dir="./data/wasde"
141)
142
143result = ingestor.ingest_latest()
144print(result.status)
145```
146</quick_start>
147
148<success_criteria>
149Skill 成功執行時:
150- [ ] 正確識別商品類別與對應表格
151- [ ] 解析所有指定商品的供需數據
152- [ ] 單位正確轉換與標記
153- [ ] 通過平衡公式驗證
154- [ ] 輸出標準化 parquet 數據集
155- [ ] 生成 ingest_status 報告
156</success_criteria>
157
158<detailed_usage_examples>
159**詳細使用範例**
160
161**範例 1:抓取最新玉米與大豆數據**
162```
163User: 幫我抓取最新 WASDE 的玉米和大豆供需數據
164
165Assistant 執行步驟:
1661. 讀取 workflows/ingest.md
1672. 呼叫 discover_releases.py 找到最新發布 (2025-01-10)
1683. 下載 PDF 報告
1694. 解析 corn_us, corn_world, soybeans_us, soybeans_world 表格
1705. 驗證平衡公式
1716. 輸出 parquet 檔案
1727. 回報 ingest_status
173
174預期輸出:
175- ./data/wasde/curated/corn_us_balance.parquet
176- ./data/wasde/curated/corn_world_balance.parquet
177- ./data/wasde/curated/soybeans_us_balance.parquet
178- ./data/wasde/curated/soybeans_world_balance.parquet
179```
180
181**範例 2:回補歷史小麥數據並追蹤修正**
182```
183User: 回補過去 12 個月的小麥數據,我想追蹤 USDA 的修正歷程
184
185Assistant 執行步驟:
1861. 讀取 workflows/backfill.md
1872. 確定日期範圍 (2024-01 至 2024-12)
1883. 依序處理 12 期報告
1894. 比對每期數據,標記修正值
1905. 輸出包含 revision_flag 的完整歷史數據
191
192預期輸出:
193- 12 期小麥數據
194- 修正追蹤報告
195```
196
197**範例 3:驗證現有數據一致性**
198```
199User: 檢查我現有的 WASDE 數據是否與最新報告一致
200
201Assistant 執行步驟:
2021. 讀取 workflows/validate.md
2032. 載入現有 parquet 檔案
2043. 抓取最新報告
2054. 逐欄位比對
2065. 標記差異與修正
2076. 輸出驗證報告
208
209預期輸出:
210- validation_report.json (差異列表)
211- 修正建議
212```
213</detailed_usage_examples>
214
215<data_pipeline_architecture>
216**數據流水線架構**
217
218```
219[USDA WASDE Website]
220 |
221 v
222+-------------------+
223| discover_releases | --> 找到 PDF URL 與發布日期
224+-------------------+
225 |
226 v
227+-------------------+
228| fetch_report | --> 下載 PDF (fallback: HTML)
229+-------------------+
230 |
231 v
232+-------------------+
233| parse_tables | --> 提取供需表格數據
234+-------------------+
235 |
236 v
237+-------------------+
238| normalize_data | --> 標準化欄位與單位
239+-------------------+
240 |
241 v
242+-------------------+
243| validate_data | --> 平衡公式與範圍檢查
244+-------------------+
245 |
246 v
247+-------------------+
248| write_output | --> Parquet / JSON
249+-------------------+
250 |
251 v
252[Curated Dataset]
253```
254
255**目錄結構:**
256```
257data/wasde/
258├── raw/ # 原始 PDF 檔案
259│ └── 2025-01-10/
260│ └── wasde0125.pdf
261├── intermediate/ # 中間解析結果
262│ └── 2025-01-10/
263│ ├── tables.json
264│ └── ingest_status.json
265└── curated/ # 最終標準化數據
266 ├── corn_us_balance.parquet
267 ├── corn_world_balance.parquet
268 ├── wheat_us_balance.parquet
269 └── ...
270```
271</data_pipeline_architecture>