aigroup-econ-mcp 0.4.0__py3-none-any.whl → 1.3.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aigroup_econ_mcp/__init__.py +1 -1
- aigroup_econ_mcp/cli.py +81 -86
- aigroup_econ_mcp/server.py +451 -451
- aigroup_econ_mcp/tools/__init__.py +8 -7
- aigroup_econ_mcp/tools/base.py +204 -5
- aigroup_econ_mcp/tools/data_loader.py +51 -27
- aigroup_econ_mcp/tools/file_parser.py +1027 -560
- aigroup_econ_mcp/tools/machine_learning.py +56 -669
- aigroup_econ_mcp/tools/ml_ensemble.py +210 -0
- aigroup_econ_mcp/tools/ml_evaluation.py +272 -0
- aigroup_econ_mcp/tools/ml_models.py +54 -0
- aigroup_econ_mcp/tools/ml_regularization.py +186 -0
- aigroup_econ_mcp/tools/panel_data.py +70 -4
- aigroup_econ_mcp/tools/time_series.py +53 -22
- aigroup_econ_mcp/tools/tool_descriptions.py +410 -0
- aigroup_econ_mcp/tools/tool_handlers.py +681 -43
- aigroup_econ_mcp/tools/tool_registry.py +329 -21
- aigroup_econ_mcp-1.3.3.dist-info/METADATA +525 -0
- aigroup_econ_mcp-1.3.3.dist-info/RECORD +30 -0
- aigroup_econ_mcp/server_v1_backup.py +0 -1250
- aigroup_econ_mcp/server_v1_old.py +0 -1250
- aigroup_econ_mcp/server_with_file_support.py +0 -259
- aigroup_econ_mcp/tools/decorators.py +0 -178
- aigroup_econ_mcp/tools/file_input_handler.py +0 -268
- aigroup_econ_mcp-0.4.0.dist-info/METADATA +0 -718
- aigroup_econ_mcp-0.4.0.dist-info/RECORD +0 -30
- {aigroup_econ_mcp-0.4.0.dist-info → aigroup_econ_mcp-1.3.3.dist-info}/WHEEL +0 -0
- {aigroup_econ_mcp-0.4.0.dist-info → aigroup_econ_mcp-1.3.3.dist-info}/entry_points.txt +0 -0
- {aigroup_econ_mcp-0.4.0.dist-info → aigroup_econ_mcp-1.3.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -7,7 +7,7 @@ from typing import Dict, Any, Optional, List, Callable
|
|
|
7
7
|
from pydantic import Field
|
|
8
8
|
from typing import Annotated
|
|
9
9
|
|
|
10
|
-
from .
|
|
10
|
+
from .base import with_file_support_decorator as econometric_tool
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
# 标准文件输入参数定义
|
|
@@ -16,28 +16,53 @@ FILE_INPUT_PARAMS = {
|
|
|
16
16
|
Optional[str],
|
|
17
17
|
Field(
|
|
18
18
|
default=None,
|
|
19
|
-
description="""CSV或
|
|
19
|
+
description="""CSV、JSON或TXT文件内容
|
|
20
20
|
|
|
21
21
|
📁 支持格式:
|
|
22
|
-
- CSV:
|
|
22
|
+
- CSV: 带表头的列数据,自动检测分隔符(逗号、制表符、分号等)
|
|
23
23
|
- JSON: {"变量名": [数据], ...} 或 [{"变量1": 值, ...}, ...]
|
|
24
|
+
- TXT: 支持多种格式
|
|
25
|
+
* 单列数值:每行一个数值
|
|
26
|
+
* 多列数值:空格或制表符分隔,可带表头
|
|
27
|
+
* 键值对:变量名: 值列表 或 变量名 = 值列表
|
|
24
28
|
|
|
25
29
|
💡 使用方式:
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
- 优先使用file_content,如果提供则忽略其他数据参数
|
|
30
|
+
- 提供文件内容字符串(可以是base64编码)
|
|
31
|
+
- 系统会自动解析并识别变量和数据格式
|
|
32
|
+
- 优先使用file_content,如果提供则忽略其他数据参数
|
|
33
|
+
- 也可以直接传入文件路径(.csv/.json/.txt)
|
|
34
|
+
|
|
35
|
+
📝 示例:
|
|
36
|
+
CSV: "变量1,变量2\\n1.2,3.4\\n2.3,4.5"
|
|
37
|
+
JSON: "{\\"x\\": [1,2,3], \\"y\\": [4,5,6]}"
|
|
38
|
+
TXT单列: "1.5\\n2.3\\n3.1"
|
|
39
|
+
TXT多列: "x y\\n1 2\\n3 4"
|
|
40
|
+
TXT键值对: "x: 1 2 3\\ny: 4 5 6"
|
|
41
|
+
"""
|
|
29
42
|
)
|
|
30
43
|
],
|
|
31
44
|
"file_format": Annotated[
|
|
32
45
|
str,
|
|
33
46
|
Field(
|
|
34
47
|
default="auto",
|
|
35
|
-
description="""
|
|
48
|
+
description="""文件格式类型
|
|
36
49
|
|
|
37
50
|
可选值:
|
|
38
|
-
- "auto":
|
|
39
|
-
- "csv": CSV格式
|
|
40
|
-
- "json": JSON格式
|
|
51
|
+
- "auto": 自动检测(默认,推荐)- 根据文件内容智能识别格式
|
|
52
|
+
- "csv": CSV格式 - 逗号、制表符或分号分隔的表格数据
|
|
53
|
+
- "json": JSON格式 - 结构化JSON数据
|
|
54
|
+
- "txt": TXT格式 - 纯文本数据,支持多种子格式
|
|
55
|
+
|
|
56
|
+
🔍 自动检测规则:
|
|
57
|
+
1. 尝试解析JSON格式
|
|
58
|
+
2. 检测CSV特征(逗号、制表符)
|
|
59
|
+
3. 检测TXT特征(纯数值、键值对、空格分隔)
|
|
60
|
+
4. 根据文件扩展名(.csv/.json/.txt)
|
|
61
|
+
|
|
62
|
+
💡 建议:
|
|
63
|
+
- 大多数情况使用"auto"即可
|
|
64
|
+
- 当自动检测失败时,手动指定格式
|
|
65
|
+
- TXT格式会自动识别具体子格式(单列/多列/键值对)"""
|
|
41
66
|
)
|
|
42
67
|
]
|
|
43
68
|
}
|
|
@@ -89,55 +114,338 @@ TOOL_TYPE_PARAMS = {
|
|
|
89
114
|
"multi_var_dict": {
|
|
90
115
|
"data": Annotated[
|
|
91
116
|
Optional[Dict[str, List[float]]],
|
|
92
|
-
Field(
|
|
117
|
+
Field(
|
|
118
|
+
default=None,
|
|
119
|
+
description="""多变量数据字典
|
|
120
|
+
|
|
121
|
+
📊 数据格式:
|
|
122
|
+
- 键:变量名(字符串)
|
|
123
|
+
- 值:数值列表(浮点数数组)
|
|
124
|
+
- 结构:{"变量1": [值1, 值2, ...], "变量2": [值1, 值2, ...]}
|
|
125
|
+
|
|
126
|
+
📝 要求:
|
|
127
|
+
- 所有变量的数据长度必须相同
|
|
128
|
+
- 数值必须是浮点数或可转换为浮点数
|
|
129
|
+
- 变量名建议使用有意义的描述性名称
|
|
130
|
+
- 至少需要1个变量
|
|
131
|
+
|
|
132
|
+
💡 示例:
|
|
133
|
+
{"GDP": [100.5, 102.3, 104.1], "CPI": [2.1, 2.3, 2.2]}
|
|
134
|
+
|
|
135
|
+
🔧 用途:
|
|
136
|
+
- 描述性统计分析
|
|
137
|
+
- 相关性分析
|
|
138
|
+
- 多变量时间序列分析"""
|
|
139
|
+
)
|
|
93
140
|
]
|
|
94
141
|
},
|
|
95
142
|
"regression": {
|
|
96
143
|
"y_data": Annotated[
|
|
97
144
|
Optional[List[float]],
|
|
98
|
-
Field(
|
|
145
|
+
Field(
|
|
146
|
+
default=None,
|
|
147
|
+
description="""因变量(被解释变量)数据
|
|
148
|
+
|
|
149
|
+
📊 数据格式:
|
|
150
|
+
- 一维数值列表
|
|
151
|
+
- 元素类型:浮点数
|
|
152
|
+
- 长度:必须与x_data的观测数一致
|
|
153
|
+
|
|
154
|
+
📝 要求:
|
|
155
|
+
- 不能包含缺失值(NaN)
|
|
156
|
+
- 建议数据已做适当的预处理
|
|
157
|
+
- 至少需要 n+2 个观测(n为自变量个数)
|
|
158
|
+
|
|
159
|
+
💡 示例:
|
|
160
|
+
[12.5, 13.2, 14.1, 13.8, 15.0] # 销售额数据
|
|
161
|
+
|
|
162
|
+
🔧 用途:
|
|
163
|
+
- OLS回归分析的被解释变量
|
|
164
|
+
- 机器学习回归的目标变量
|
|
165
|
+
- 各类回归模型的预测目标"""
|
|
166
|
+
)
|
|
99
167
|
],
|
|
100
168
|
"x_data": Annotated[
|
|
101
169
|
Optional[List[List[float]]],
|
|
102
|
-
Field(
|
|
170
|
+
Field(
|
|
171
|
+
default=None,
|
|
172
|
+
description="""自变量(解释变量)数据矩阵
|
|
173
|
+
|
|
174
|
+
📊 数据格式:
|
|
175
|
+
- 二维数值列表
|
|
176
|
+
- 外层列表:每个元素代表一个观测
|
|
177
|
+
- 内层列表:每个元素代表一个自变量的值
|
|
178
|
+
- 结构:[[x1_1, x2_1, ...], [x1_2, x2_2, ...], ...]
|
|
179
|
+
|
|
180
|
+
📝 要求:
|
|
181
|
+
- 行数(观测数)必须与y_data长度一致
|
|
182
|
+
- 列数(变量数)必须在所有行保持一致
|
|
183
|
+
- 不能包含缺失值
|
|
184
|
+
- 数值型变量,分类变量需要先编码
|
|
185
|
+
|
|
186
|
+
💡 示例:
|
|
187
|
+
[[100, 50, 3], # 观测1: 广告支出=100, 价格=50, 竞争者=3
|
|
188
|
+
[120, 48, 3], # 观测2: 广告支出=120, 价格=48, 竞争者=3
|
|
189
|
+
[110, 52, 4]] # 观测3: 广告支出=110, 价格=52, 竞争者=4
|
|
190
|
+
|
|
191
|
+
🔧 用途:
|
|
192
|
+
- OLS回归的自变量矩阵
|
|
193
|
+
- 机器学习模型的特征矩阵
|
|
194
|
+
- 多元回归分析的解释变量"""
|
|
195
|
+
)
|
|
103
196
|
],
|
|
104
197
|
"feature_names": Annotated[
|
|
105
198
|
Optional[List[str]],
|
|
106
|
-
Field(
|
|
199
|
+
Field(
|
|
200
|
+
default=None,
|
|
201
|
+
description="""自变量名称列表
|
|
202
|
+
|
|
203
|
+
📝 格式:
|
|
204
|
+
- 字符串列表
|
|
205
|
+
- 长度必须与x_data的列数一致
|
|
206
|
+
- 建议使用描述性名称
|
|
207
|
+
|
|
208
|
+
💡 示例:
|
|
209
|
+
["广告支出", "价格", "竞争对手数量", "促销活动"]
|
|
210
|
+
|
|
211
|
+
🔧 用途:
|
|
212
|
+
- 提高结果可读性
|
|
213
|
+
- 便于解释模型系数
|
|
214
|
+
- 用于生成可视化标签
|
|
215
|
+
- 如果不提供,系统会自动生成(x1, x2, x3...)
|
|
216
|
+
|
|
217
|
+
⚠️ 注意:
|
|
218
|
+
- 避免使用特殊字符
|
|
219
|
+
- 中英文均可
|
|
220
|
+
- 建议简洁明了"""
|
|
221
|
+
)
|
|
107
222
|
]
|
|
108
223
|
},
|
|
109
224
|
"single_var": {
|
|
110
225
|
"data": Annotated[
|
|
111
226
|
Optional[List[float]],
|
|
112
|
-
Field(
|
|
227
|
+
Field(
|
|
228
|
+
default=None,
|
|
229
|
+
description="""单变量时间序列数据
|
|
230
|
+
|
|
231
|
+
📊 数据格式:
|
|
232
|
+
- 一维数值列表
|
|
233
|
+
- 按时间顺序排列
|
|
234
|
+
- 元素类型:浮点数
|
|
235
|
+
|
|
236
|
+
📝 要求:
|
|
237
|
+
- 数据必须按时间顺序排列
|
|
238
|
+
- 不能包含缺失值
|
|
239
|
+
- 建议时间间隔均匀(等间隔)
|
|
240
|
+
- 至少需要5个观测点进行基本分析
|
|
241
|
+
- 复杂模型(如ARIMA)建议30+观测点
|
|
242
|
+
|
|
243
|
+
💡 示例:
|
|
244
|
+
[100.5, 102.3, 101.8, 103.5, 104.2, 103.8, 105.1] # 股票价格序列
|
|
245
|
+
|
|
246
|
+
🔧 用途:
|
|
247
|
+
- 时间序列分析
|
|
248
|
+
- 平稳性检验(ADF、KPSS)
|
|
249
|
+
- 自相关分析(ACF、PACF)
|
|
250
|
+
- ARIMA/GARCH模型
|
|
251
|
+
- 预测和趋势分析
|
|
252
|
+
|
|
253
|
+
⚠️ 注意事项:
|
|
254
|
+
- 确保数据按时间顺序
|
|
255
|
+
- 处理缺失值和异常值
|
|
256
|
+
- 考虑季节性调整
|
|
257
|
+
- 检查数据平稳性"""
|
|
258
|
+
)
|
|
113
259
|
]
|
|
114
260
|
},
|
|
115
261
|
"panel": {
|
|
116
262
|
"y_data": Annotated[
|
|
117
263
|
Optional[List[float]],
|
|
118
|
-
Field(
|
|
264
|
+
Field(
|
|
265
|
+
default=None,
|
|
266
|
+
description="""面板数据因变量
|
|
267
|
+
|
|
268
|
+
📊 数据格式:
|
|
269
|
+
- 一维数值列表
|
|
270
|
+
- 包含所有个体所有时期的观测
|
|
271
|
+
- 长度 = 个体数 × 时期数
|
|
272
|
+
|
|
273
|
+
📝 排列方式(可选其一):
|
|
274
|
+
1. 按个体排列:[个体1的所有时期, 个体2的所有时期, ...]
|
|
275
|
+
2. 按时期排列:[时期1的所有个体, 时期2的所有个体, ...]
|
|
276
|
+
3. 需与entity_ids和time_periods的排列方式一致
|
|
277
|
+
|
|
278
|
+
💡 示例(3个公司,2个年份):
|
|
279
|
+
[1000, 1100, 800, 900, 1200, 1300] # 按个体排列
|
|
280
|
+
公司1: 2020=1000, 2021=1100
|
|
281
|
+
公司2: 2020=800, 2021=900
|
|
282
|
+
公司3: 2020=1200, 2021=1300
|
|
283
|
+
|
|
284
|
+
🔧 用途:
|
|
285
|
+
- 固定效应模型
|
|
286
|
+
- 随机效应模型
|
|
287
|
+
- 面板数据回归分析"""
|
|
288
|
+
)
|
|
119
289
|
],
|
|
120
290
|
"x_data": Annotated[
|
|
121
291
|
Optional[List[List[float]]],
|
|
122
|
-
Field(
|
|
292
|
+
Field(
|
|
293
|
+
default=None,
|
|
294
|
+
description="""面板数据自变量矩阵
|
|
295
|
+
|
|
296
|
+
📊 数据格式:
|
|
297
|
+
- 二维数值列表
|
|
298
|
+
- 行数 = 个体数 × 时期数
|
|
299
|
+
- 列数 = 自变量个数
|
|
300
|
+
- 排列顺序必须与y_data一致
|
|
301
|
+
|
|
302
|
+
📝 要求:
|
|
303
|
+
- 与y_data的观测顺序完全对应
|
|
304
|
+
- 所有行的列数必须相同
|
|
305
|
+
- 不能包含缺失值
|
|
306
|
+
|
|
307
|
+
💡 示例(3个公司,2年,2个自变量):
|
|
308
|
+
[[50, 100], # 公司1-2020: 员工=50, 投资=100
|
|
309
|
+
[52, 110], # 公司1-2021: 员工=52, 投资=110
|
|
310
|
+
[40, 80], # 公司2-2020
|
|
311
|
+
[42, 90], # 公司2-2021
|
|
312
|
+
[60, 150], # 公司3-2020
|
|
313
|
+
[62, 160]] # 公司3-2021
|
|
314
|
+
|
|
315
|
+
🔧 用途:
|
|
316
|
+
- 面板回归的解释变量
|
|
317
|
+
- 控制时变特征"""
|
|
318
|
+
)
|
|
123
319
|
],
|
|
124
320
|
"entity_ids": Annotated[
|
|
125
321
|
Optional[List[str]],
|
|
126
|
-
Field(
|
|
322
|
+
Field(
|
|
323
|
+
default=None,
|
|
324
|
+
description="""个体标识符列表
|
|
325
|
+
|
|
326
|
+
📝 格式:
|
|
327
|
+
- 字符串列表
|
|
328
|
+
- 标识每个观测所属的个体(如公司、国家、个人)
|
|
329
|
+
- 长度 = y_data长度
|
|
330
|
+
|
|
331
|
+
📊 要求:
|
|
332
|
+
- 每个个体的标识符在所有时期保持一致
|
|
333
|
+
- 与y_data、x_data的顺序完全对应
|
|
334
|
+
- 建议使用清晰的标识符
|
|
335
|
+
|
|
336
|
+
💡 示例(3个公司,各2年):
|
|
337
|
+
["公司A", "公司A", "公司B", "公司B", "公司C", "公司C"]
|
|
338
|
+
或
|
|
339
|
+
["1", "1", "2", "2", "3", "3"]
|
|
340
|
+
|
|
341
|
+
🔧 用途:
|
|
342
|
+
- 识别面板数据的横截面维度
|
|
343
|
+
- 计算固定效应
|
|
344
|
+
- 分组和聚合
|
|
345
|
+
- Hausman检验
|
|
346
|
+
|
|
347
|
+
⚠️ 注意:
|
|
348
|
+
- ID可以是数字或字符串
|
|
349
|
+
- 但必须以字符串形式传入
|
|
350
|
+
- 保持格式一致性"""
|
|
351
|
+
)
|
|
127
352
|
],
|
|
128
353
|
"time_periods": Annotated[
|
|
129
354
|
Optional[List[str]],
|
|
130
|
-
Field(
|
|
355
|
+
Field(
|
|
356
|
+
default=None,
|
|
357
|
+
description="""时间标识符列表
|
|
358
|
+
|
|
359
|
+
📝 格式:
|
|
360
|
+
- 字符串列表
|
|
361
|
+
- 标识每个观测所属的时期
|
|
362
|
+
- 长度 = y_data长度
|
|
363
|
+
|
|
364
|
+
📊 要求:
|
|
365
|
+
- 每个时期的标识符在所有个体保持一致
|
|
366
|
+
- 与y_data、x_data的顺序完全对应
|
|
367
|
+
- 建议使用标准时间格式
|
|
368
|
+
|
|
369
|
+
💡 示例(3个公司,各2年):
|
|
370
|
+
["2020", "2021", "2020", "2021", "2020", "2021"]
|
|
371
|
+
或
|
|
372
|
+
["2020-01", "2020-02", "2020-01", "2020-02", "2020-01", "2020-02"]
|
|
373
|
+
|
|
374
|
+
🔧 用途:
|
|
375
|
+
- 识别面板数据的时间维度
|
|
376
|
+
- 计算时间固定效应
|
|
377
|
+
- 识别时间趋势
|
|
378
|
+
- 面板单位根检验
|
|
379
|
+
|
|
380
|
+
⚠️ 注意:
|
|
381
|
+
- 可以是年份、季度、月份等
|
|
382
|
+
- 必须以字符串形式传入
|
|
383
|
+
- 保持格式统一"""
|
|
384
|
+
)
|
|
131
385
|
],
|
|
132
386
|
"feature_names": Annotated[
|
|
133
387
|
Optional[List[str]],
|
|
134
|
-
Field(
|
|
388
|
+
Field(
|
|
389
|
+
default=None,
|
|
390
|
+
description="""自变量名称列表(同regression类型)
|
|
391
|
+
|
|
392
|
+
📝 格式:
|
|
393
|
+
- 字符串列表
|
|
394
|
+
- 长度 = x_data的列数
|
|
395
|
+
|
|
396
|
+
💡 示例:
|
|
397
|
+
["员工数", "研发投资", "市场份额", "行业集中度"]
|
|
398
|
+
|
|
399
|
+
🔧 用途:
|
|
400
|
+
- 提高结果可读性
|
|
401
|
+
- 便于解释回归系数
|
|
402
|
+
- 如不提供会自动生成"""
|
|
403
|
+
)
|
|
135
404
|
]
|
|
136
405
|
},
|
|
137
406
|
"time_series": {
|
|
138
407
|
"data": Annotated[
|
|
139
408
|
Optional[Dict[str, List[float]]],
|
|
140
|
-
Field(
|
|
409
|
+
Field(
|
|
410
|
+
default=None,
|
|
411
|
+
description="""多变量时间序列数据字典
|
|
412
|
+
|
|
413
|
+
📊 数据格式:
|
|
414
|
+
- 键:变量名(字符串)
|
|
415
|
+
- 值:时间序列数据(浮点数列表)
|
|
416
|
+
- 所有变量长度必须相同
|
|
417
|
+
- 数据按时间顺序排列
|
|
418
|
+
|
|
419
|
+
📝 要求:
|
|
420
|
+
- 至少2个变量(VAR、VECM模型)
|
|
421
|
+
- 单变量请使用single_var类型
|
|
422
|
+
- 所有序列等长且按时间对齐
|
|
423
|
+
- 时间间隔均匀
|
|
424
|
+
- VAR模型建议40+观测
|
|
425
|
+
- VECM模型建议60+观测
|
|
426
|
+
|
|
427
|
+
💡 示例:
|
|
428
|
+
{
|
|
429
|
+
"GDP": [100.5, 102.3, 104.1, 105.8], # GDP增长率序列
|
|
430
|
+
"CPI": [2.1, 2.3, 2.2, 2.4], # CPI通胀率序列
|
|
431
|
+
"利率": [3.5, 3.6, 3.4, 3.7] # 利率序列
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
🔧 用途:
|
|
435
|
+
- VAR模型分析
|
|
436
|
+
- VECM模型分析
|
|
437
|
+
- 脉冲响应函数
|
|
438
|
+
- 方差分解
|
|
439
|
+
- Granger因果检验
|
|
440
|
+
- 协整分析
|
|
441
|
+
|
|
442
|
+
⚠️ 注意事项:
|
|
443
|
+
- 确保所有序列时间对齐
|
|
444
|
+
- 检查序列平稳性
|
|
445
|
+
- VAR要求所有序列平稳
|
|
446
|
+
- VECM允许非平稳序列(需协整)
|
|
447
|
+
- 注意滞后阶数选择"""
|
|
448
|
+
)
|
|
141
449
|
]
|
|
142
450
|
}
|
|
143
451
|
}
|