aiecs 1.0.1__py3-none-any.whl → 1.7.17__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.

Potentially problematic release.


This version of aiecs might be problematic. Click here for more details.

Files changed (340) hide show
  1. aiecs/__init__.py +13 -16
  2. aiecs/__main__.py +7 -7
  3. aiecs/aiecs_client.py +269 -75
  4. aiecs/application/executors/operation_executor.py +79 -54
  5. aiecs/application/knowledge_graph/__init__.py +7 -0
  6. aiecs/application/knowledge_graph/builder/__init__.py +37 -0
  7. aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
  8. aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
  9. aiecs/application/knowledge_graph/builder/document_builder.py +369 -0
  10. aiecs/application/knowledge_graph/builder/graph_builder.py +490 -0
  11. aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
  12. aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
  13. aiecs/application/knowledge_graph/builder/schema_mapping.py +563 -0
  14. aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
  15. aiecs/application/knowledge_graph/builder/text_chunker.py +317 -0
  16. aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
  17. aiecs/application/knowledge_graph/extractors/base.py +98 -0
  18. aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +422 -0
  19. aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +347 -0
  20. aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +241 -0
  21. aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
  22. aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
  23. aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
  24. aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
  25. aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
  26. aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
  27. aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +433 -0
  28. aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
  29. aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
  30. aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +632 -0
  31. aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
  32. aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
  33. aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +183 -0
  34. aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
  35. aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
  36. aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
  37. aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +342 -0
  38. aiecs/application/knowledge_graph/pattern_matching/query_executor.py +366 -0
  39. aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
  40. aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +195 -0
  41. aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
  42. aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
  43. aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +341 -0
  44. aiecs/application/knowledge_graph/reasoning/inference_engine.py +500 -0
  45. aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +163 -0
  46. aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
  47. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
  48. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +913 -0
  49. aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +866 -0
  50. aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +475 -0
  51. aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +396 -0
  52. aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +208 -0
  53. aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +170 -0
  54. aiecs/application/knowledge_graph/reasoning/query_planner.py +855 -0
  55. aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +518 -0
  56. aiecs/application/knowledge_graph/retrieval/__init__.py +27 -0
  57. aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +211 -0
  58. aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +592 -0
  59. aiecs/application/knowledge_graph/retrieval/strategy_types.py +23 -0
  60. aiecs/application/knowledge_graph/search/__init__.py +59 -0
  61. aiecs/application/knowledge_graph/search/hybrid_search.py +457 -0
  62. aiecs/application/knowledge_graph/search/reranker.py +293 -0
  63. aiecs/application/knowledge_graph/search/reranker_strategies.py +535 -0
  64. aiecs/application/knowledge_graph/search/text_similarity.py +392 -0
  65. aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
  66. aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +305 -0
  67. aiecs/application/knowledge_graph/traversal/path_scorer.py +271 -0
  68. aiecs/application/knowledge_graph/validators/__init__.py +13 -0
  69. aiecs/application/knowledge_graph/validators/relation_validator.py +239 -0
  70. aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
  71. aiecs/application/knowledge_graph/visualization/graph_visualizer.py +313 -0
  72. aiecs/common/__init__.py +9 -0
  73. aiecs/common/knowledge_graph/__init__.py +17 -0
  74. aiecs/common/knowledge_graph/runnable.py +471 -0
  75. aiecs/config/__init__.py +20 -5
  76. aiecs/config/config.py +762 -31
  77. aiecs/config/graph_config.py +131 -0
  78. aiecs/config/tool_config.py +435 -0
  79. aiecs/core/__init__.py +29 -13
  80. aiecs/core/interface/__init__.py +2 -2
  81. aiecs/core/interface/execution_interface.py +22 -22
  82. aiecs/core/interface/storage_interface.py +37 -88
  83. aiecs/core/registry/__init__.py +31 -0
  84. aiecs/core/registry/service_registry.py +92 -0
  85. aiecs/domain/__init__.py +270 -1
  86. aiecs/domain/agent/__init__.py +191 -0
  87. aiecs/domain/agent/base_agent.py +3949 -0
  88. aiecs/domain/agent/exceptions.py +99 -0
  89. aiecs/domain/agent/graph_aware_mixin.py +569 -0
  90. aiecs/domain/agent/hybrid_agent.py +1731 -0
  91. aiecs/domain/agent/integration/__init__.py +29 -0
  92. aiecs/domain/agent/integration/context_compressor.py +216 -0
  93. aiecs/domain/agent/integration/context_engine_adapter.py +587 -0
  94. aiecs/domain/agent/integration/protocols.py +281 -0
  95. aiecs/domain/agent/integration/retry_policy.py +218 -0
  96. aiecs/domain/agent/integration/role_config.py +213 -0
  97. aiecs/domain/agent/knowledge_aware_agent.py +1892 -0
  98. aiecs/domain/agent/lifecycle.py +291 -0
  99. aiecs/domain/agent/llm_agent.py +692 -0
  100. aiecs/domain/agent/memory/__init__.py +12 -0
  101. aiecs/domain/agent/memory/conversation.py +1124 -0
  102. aiecs/domain/agent/migration/__init__.py +14 -0
  103. aiecs/domain/agent/migration/conversion.py +163 -0
  104. aiecs/domain/agent/migration/legacy_wrapper.py +86 -0
  105. aiecs/domain/agent/models.py +894 -0
  106. aiecs/domain/agent/observability.py +479 -0
  107. aiecs/domain/agent/persistence.py +449 -0
  108. aiecs/domain/agent/prompts/__init__.py +29 -0
  109. aiecs/domain/agent/prompts/builder.py +159 -0
  110. aiecs/domain/agent/prompts/formatters.py +187 -0
  111. aiecs/domain/agent/prompts/template.py +255 -0
  112. aiecs/domain/agent/registry.py +253 -0
  113. aiecs/domain/agent/tool_agent.py +444 -0
  114. aiecs/domain/agent/tools/__init__.py +15 -0
  115. aiecs/domain/agent/tools/schema_generator.py +377 -0
  116. aiecs/domain/community/__init__.py +155 -0
  117. aiecs/domain/community/agent_adapter.py +469 -0
  118. aiecs/domain/community/analytics.py +432 -0
  119. aiecs/domain/community/collaborative_workflow.py +648 -0
  120. aiecs/domain/community/communication_hub.py +634 -0
  121. aiecs/domain/community/community_builder.py +320 -0
  122. aiecs/domain/community/community_integration.py +796 -0
  123. aiecs/domain/community/community_manager.py +803 -0
  124. aiecs/domain/community/decision_engine.py +849 -0
  125. aiecs/domain/community/exceptions.py +231 -0
  126. aiecs/domain/community/models/__init__.py +33 -0
  127. aiecs/domain/community/models/community_models.py +234 -0
  128. aiecs/domain/community/resource_manager.py +461 -0
  129. aiecs/domain/community/shared_context_manager.py +589 -0
  130. aiecs/domain/context/__init__.py +40 -10
  131. aiecs/domain/context/context_engine.py +1910 -0
  132. aiecs/domain/context/conversation_models.py +87 -53
  133. aiecs/domain/context/graph_memory.py +582 -0
  134. aiecs/domain/execution/model.py +12 -4
  135. aiecs/domain/knowledge_graph/__init__.py +19 -0
  136. aiecs/domain/knowledge_graph/models/__init__.py +52 -0
  137. aiecs/domain/knowledge_graph/models/entity.py +148 -0
  138. aiecs/domain/knowledge_graph/models/evidence.py +178 -0
  139. aiecs/domain/knowledge_graph/models/inference_rule.py +184 -0
  140. aiecs/domain/knowledge_graph/models/path.py +171 -0
  141. aiecs/domain/knowledge_graph/models/path_pattern.py +171 -0
  142. aiecs/domain/knowledge_graph/models/query.py +261 -0
  143. aiecs/domain/knowledge_graph/models/query_plan.py +181 -0
  144. aiecs/domain/knowledge_graph/models/relation.py +202 -0
  145. aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
  146. aiecs/domain/knowledge_graph/schema/entity_type.py +131 -0
  147. aiecs/domain/knowledge_graph/schema/graph_schema.py +253 -0
  148. aiecs/domain/knowledge_graph/schema/property_schema.py +143 -0
  149. aiecs/domain/knowledge_graph/schema/relation_type.py +163 -0
  150. aiecs/domain/knowledge_graph/schema/schema_manager.py +691 -0
  151. aiecs/domain/knowledge_graph/schema/type_enums.py +209 -0
  152. aiecs/domain/task/dsl_processor.py +172 -56
  153. aiecs/domain/task/model.py +20 -8
  154. aiecs/domain/task/task_context.py +27 -24
  155. aiecs/infrastructure/__init__.py +0 -2
  156. aiecs/infrastructure/graph_storage/__init__.py +11 -0
  157. aiecs/infrastructure/graph_storage/base.py +837 -0
  158. aiecs/infrastructure/graph_storage/batch_operations.py +458 -0
  159. aiecs/infrastructure/graph_storage/cache.py +424 -0
  160. aiecs/infrastructure/graph_storage/distributed.py +223 -0
  161. aiecs/infrastructure/graph_storage/error_handling.py +380 -0
  162. aiecs/infrastructure/graph_storage/graceful_degradation.py +294 -0
  163. aiecs/infrastructure/graph_storage/health_checks.py +378 -0
  164. aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
  165. aiecs/infrastructure/graph_storage/index_optimization.py +446 -0
  166. aiecs/infrastructure/graph_storage/lazy_loading.py +431 -0
  167. aiecs/infrastructure/graph_storage/metrics.py +344 -0
  168. aiecs/infrastructure/graph_storage/migration.py +400 -0
  169. aiecs/infrastructure/graph_storage/pagination.py +483 -0
  170. aiecs/infrastructure/graph_storage/performance_monitoring.py +456 -0
  171. aiecs/infrastructure/graph_storage/postgres.py +1563 -0
  172. aiecs/infrastructure/graph_storage/property_storage.py +353 -0
  173. aiecs/infrastructure/graph_storage/protocols.py +76 -0
  174. aiecs/infrastructure/graph_storage/query_optimizer.py +642 -0
  175. aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
  176. aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
  177. aiecs/infrastructure/graph_storage/streaming.py +487 -0
  178. aiecs/infrastructure/graph_storage/tenant.py +412 -0
  179. aiecs/infrastructure/messaging/celery_task_manager.py +92 -54
  180. aiecs/infrastructure/messaging/websocket_manager.py +51 -35
  181. aiecs/infrastructure/monitoring/__init__.py +22 -0
  182. aiecs/infrastructure/monitoring/executor_metrics.py +45 -11
  183. aiecs/infrastructure/monitoring/global_metrics_manager.py +212 -0
  184. aiecs/infrastructure/monitoring/structured_logger.py +3 -7
  185. aiecs/infrastructure/monitoring/tracing_manager.py +63 -35
  186. aiecs/infrastructure/persistence/__init__.py +14 -1
  187. aiecs/infrastructure/persistence/context_engine_client.py +184 -0
  188. aiecs/infrastructure/persistence/database_manager.py +67 -43
  189. aiecs/infrastructure/persistence/file_storage.py +180 -103
  190. aiecs/infrastructure/persistence/redis_client.py +74 -21
  191. aiecs/llm/__init__.py +73 -25
  192. aiecs/llm/callbacks/__init__.py +11 -0
  193. aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +26 -19
  194. aiecs/llm/client_factory.py +230 -37
  195. aiecs/llm/client_resolver.py +155 -0
  196. aiecs/llm/clients/__init__.py +38 -0
  197. aiecs/llm/clients/base_client.py +328 -0
  198. aiecs/llm/clients/google_function_calling_mixin.py +415 -0
  199. aiecs/llm/clients/googleai_client.py +314 -0
  200. aiecs/llm/clients/openai_client.py +158 -0
  201. aiecs/llm/clients/openai_compatible_mixin.py +367 -0
  202. aiecs/llm/clients/vertex_client.py +1186 -0
  203. aiecs/llm/clients/xai_client.py +201 -0
  204. aiecs/llm/config/__init__.py +51 -0
  205. aiecs/llm/config/config_loader.py +272 -0
  206. aiecs/llm/config/config_validator.py +206 -0
  207. aiecs/llm/config/model_config.py +143 -0
  208. aiecs/llm/protocols.py +149 -0
  209. aiecs/llm/utils/__init__.py +10 -0
  210. aiecs/llm/utils/validate_config.py +89 -0
  211. aiecs/main.py +140 -121
  212. aiecs/scripts/aid/VERSION_MANAGEMENT.md +138 -0
  213. aiecs/scripts/aid/__init__.py +19 -0
  214. aiecs/scripts/aid/module_checker.py +499 -0
  215. aiecs/scripts/aid/version_manager.py +235 -0
  216. aiecs/scripts/{DEPENDENCY_SYSTEM_SUMMARY.md → dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md} +1 -0
  217. aiecs/scripts/{README_DEPENDENCY_CHECKER.md → dependance_check/README_DEPENDENCY_CHECKER.md} +1 -0
  218. aiecs/scripts/dependance_check/__init__.py +15 -0
  219. aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
  220. aiecs/scripts/{dependency_fixer.py → dependance_check/dependency_fixer.py} +192 -90
  221. aiecs/scripts/{download_nlp_data.py → dependance_check/download_nlp_data.py} +203 -71
  222. aiecs/scripts/dependance_patch/__init__.py +7 -0
  223. aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
  224. aiecs/scripts/{fix_weasel_validator.py → dependance_patch/fix_weasel/fix_weasel_validator.py} +21 -14
  225. aiecs/scripts/{patch_weasel_library.sh → dependance_patch/fix_weasel/patch_weasel_library.sh} +1 -1
  226. aiecs/scripts/knowledge_graph/__init__.py +3 -0
  227. aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
  228. aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
  229. aiecs/scripts/tools_develop/README.md +671 -0
  230. aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
  231. aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
  232. aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
  233. aiecs/scripts/tools_develop/__init__.py +21 -0
  234. aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
  235. aiecs/scripts/tools_develop/check_type_annotations.py +257 -0
  236. aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
  237. aiecs/scripts/tools_develop/schema_coverage.py +511 -0
  238. aiecs/scripts/tools_develop/validate_tool_schemas.py +475 -0
  239. aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
  240. aiecs/scripts/tools_develop/verify_tools.py +352 -0
  241. aiecs/tasks/__init__.py +0 -1
  242. aiecs/tasks/worker.py +115 -47
  243. aiecs/tools/__init__.py +194 -72
  244. aiecs/tools/apisource/__init__.py +99 -0
  245. aiecs/tools/apisource/intelligence/__init__.py +19 -0
  246. aiecs/tools/apisource/intelligence/data_fusion.py +632 -0
  247. aiecs/tools/apisource/intelligence/query_analyzer.py +417 -0
  248. aiecs/tools/apisource/intelligence/search_enhancer.py +385 -0
  249. aiecs/tools/apisource/monitoring/__init__.py +9 -0
  250. aiecs/tools/apisource/monitoring/metrics.py +330 -0
  251. aiecs/tools/apisource/providers/__init__.py +112 -0
  252. aiecs/tools/apisource/providers/base.py +671 -0
  253. aiecs/tools/apisource/providers/census.py +397 -0
  254. aiecs/tools/apisource/providers/fred.py +535 -0
  255. aiecs/tools/apisource/providers/newsapi.py +409 -0
  256. aiecs/tools/apisource/providers/worldbank.py +352 -0
  257. aiecs/tools/apisource/reliability/__init__.py +12 -0
  258. aiecs/tools/apisource/reliability/error_handler.py +363 -0
  259. aiecs/tools/apisource/reliability/fallback_strategy.py +376 -0
  260. aiecs/tools/apisource/tool.py +832 -0
  261. aiecs/tools/apisource/utils/__init__.py +9 -0
  262. aiecs/tools/apisource/utils/validators.py +334 -0
  263. aiecs/tools/base_tool.py +415 -21
  264. aiecs/tools/docs/__init__.py +121 -0
  265. aiecs/tools/docs/ai_document_orchestrator.py +607 -0
  266. aiecs/tools/docs/ai_document_writer_orchestrator.py +2350 -0
  267. aiecs/tools/docs/content_insertion_tool.py +1320 -0
  268. aiecs/tools/docs/document_creator_tool.py +1464 -0
  269. aiecs/tools/docs/document_layout_tool.py +1160 -0
  270. aiecs/tools/docs/document_parser_tool.py +1016 -0
  271. aiecs/tools/docs/document_writer_tool.py +2008 -0
  272. aiecs/tools/knowledge_graph/__init__.py +17 -0
  273. aiecs/tools/knowledge_graph/graph_reasoning_tool.py +807 -0
  274. aiecs/tools/knowledge_graph/graph_search_tool.py +944 -0
  275. aiecs/tools/knowledge_graph/kg_builder_tool.py +524 -0
  276. aiecs/tools/langchain_adapter.py +300 -138
  277. aiecs/tools/schema_generator.py +455 -0
  278. aiecs/tools/search_tool/__init__.py +100 -0
  279. aiecs/tools/search_tool/analyzers.py +581 -0
  280. aiecs/tools/search_tool/cache.py +264 -0
  281. aiecs/tools/search_tool/constants.py +128 -0
  282. aiecs/tools/search_tool/context.py +224 -0
  283. aiecs/tools/search_tool/core.py +778 -0
  284. aiecs/tools/search_tool/deduplicator.py +119 -0
  285. aiecs/tools/search_tool/error_handler.py +242 -0
  286. aiecs/tools/search_tool/metrics.py +343 -0
  287. aiecs/tools/search_tool/rate_limiter.py +172 -0
  288. aiecs/tools/search_tool/schemas.py +275 -0
  289. aiecs/tools/statistics/__init__.py +80 -0
  290. aiecs/tools/statistics/ai_data_analysis_orchestrator.py +646 -0
  291. aiecs/tools/statistics/ai_insight_generator_tool.py +508 -0
  292. aiecs/tools/statistics/ai_report_orchestrator_tool.py +684 -0
  293. aiecs/tools/statistics/data_loader_tool.py +555 -0
  294. aiecs/tools/statistics/data_profiler_tool.py +638 -0
  295. aiecs/tools/statistics/data_transformer_tool.py +580 -0
  296. aiecs/tools/statistics/data_visualizer_tool.py +498 -0
  297. aiecs/tools/statistics/model_trainer_tool.py +507 -0
  298. aiecs/tools/statistics/statistical_analyzer_tool.py +472 -0
  299. aiecs/tools/task_tools/__init__.py +49 -36
  300. aiecs/tools/task_tools/chart_tool.py +200 -184
  301. aiecs/tools/task_tools/classfire_tool.py +268 -267
  302. aiecs/tools/task_tools/image_tool.py +220 -141
  303. aiecs/tools/task_tools/office_tool.py +226 -146
  304. aiecs/tools/task_tools/pandas_tool.py +477 -121
  305. aiecs/tools/task_tools/report_tool.py +390 -142
  306. aiecs/tools/task_tools/research_tool.py +149 -79
  307. aiecs/tools/task_tools/scraper_tool.py +339 -145
  308. aiecs/tools/task_tools/stats_tool.py +448 -209
  309. aiecs/tools/temp_file_manager.py +26 -24
  310. aiecs/tools/tool_executor/__init__.py +18 -16
  311. aiecs/tools/tool_executor/tool_executor.py +364 -52
  312. aiecs/utils/LLM_output_structor.py +74 -48
  313. aiecs/utils/__init__.py +14 -3
  314. aiecs/utils/base_callback.py +0 -3
  315. aiecs/utils/cache_provider.py +696 -0
  316. aiecs/utils/execution_utils.py +50 -31
  317. aiecs/utils/prompt_loader.py +1 -0
  318. aiecs/utils/token_usage_repository.py +37 -11
  319. aiecs/ws/socket_server.py +14 -4
  320. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/METADATA +52 -15
  321. aiecs-1.7.17.dist-info/RECORD +337 -0
  322. aiecs-1.7.17.dist-info/entry_points.txt +13 -0
  323. aiecs/config/registry.py +0 -19
  324. aiecs/domain/context/content_engine.py +0 -982
  325. aiecs/llm/base_client.py +0 -99
  326. aiecs/llm/openai_client.py +0 -125
  327. aiecs/llm/vertex_client.py +0 -186
  328. aiecs/llm/xai_client.py +0 -184
  329. aiecs/scripts/dependency_checker.py +0 -857
  330. aiecs/scripts/quick_dependency_check.py +0 -269
  331. aiecs/tools/task_tools/search_api.py +0 -7
  332. aiecs-1.0.1.dist-info/RECORD +0 -90
  333. aiecs-1.0.1.dist-info/entry_points.txt +0 -7
  334. /aiecs/scripts/{setup_nlp_data.sh → dependance_check/setup_nlp_data.sh} +0 -0
  335. /aiecs/scripts/{README_WEASEL_PATCH.md → dependance_patch/fix_weasel/README_WEASEL_PATCH.md} +0 -0
  336. /aiecs/scripts/{fix_weasel_validator.sh → dependance_patch/fix_weasel/fix_weasel_validator.sh} +0 -0
  337. /aiecs/scripts/{run_weasel_patch.sh → dependance_patch/fix_weasel/run_weasel_patch.sh} +0 -0
  338. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/WHEEL +0 -0
  339. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/licenses/LICENSE +0 -0
  340. {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,671 @@
1
+ # 工具开发辅助脚本
2
+
3
+ 本目录包含用于 AIECS 工具开发和维护的验证脚本,帮助开发者确保工具质量和 Schema 自动生成的有效性。
4
+
5
+ ## 📋 脚本列表
6
+
7
+ ### 1. 工具验证器 (`verify_tools.py`)
8
+
9
+ 快速验证和展示 aiecs.tools 注册的所有工具和功能,帮助开发者了解工具注册情况。
10
+
11
+ **用途**:
12
+ - 列出所有注册的工具及其状态
13
+ - 显示每个工具的描述和功能方法
14
+ - 提供工具使用示例
15
+ - 分析工具注册表信息
16
+ - 展示工具继承关系和模块分布
17
+
18
+ **命令**:
19
+ ```bash
20
+ # 从项目根目录运行(推荐)
21
+ python -m aiecs.scripts.tools_develop.verify_tools
22
+
23
+ # 直接运行脚本
24
+ python aiecs/scripts/tools_develop/verify_tools.py
25
+ ```
26
+
27
+ **输出示例**:
28
+ ```
29
+ ================================================================================
30
+ AIECS Tools 注册工具验证
31
+ ================================================================================
32
+
33
+ 发现 26 个注册的工具
34
+
35
+ ================================================================================
36
+ 📁 任务工具 (10 个)
37
+ ================================================================================
38
+
39
+ [1] chart
40
+ 描述: Chart and visualization operations
41
+ 状态: loaded
42
+
43
+ [2] pandas
44
+ 描述: Data analysis and manipulation
45
+ 状态: loaded
46
+
47
+ ... (更多工具)
48
+
49
+ ================================================================================
50
+ 📁 文档工具 (7 个)
51
+ ================================================================================
52
+
53
+ [11] document_parser
54
+ 描述: Document parsing and content extraction
55
+ 状态: loaded
56
+
57
+ ... (更多工具)
58
+
59
+ ================================================================================
60
+ 📁 数据统计工具 (9 个)
61
+ ================================================================================
62
+
63
+ [18] data_loader
64
+ 描述: Universal data loading from multiple formats
65
+ 状态: loaded
66
+
67
+ ... (更多工具)
68
+
69
+ ================================================================================
70
+ ✅ 工具列表显示完成! 共 26 个工具
71
+ ================================================================================
72
+
73
+ ================================================================================
74
+ 🎮 交互模式
75
+ ================================================================================
76
+
77
+ 提示:
78
+ - 输入工具序号 (1-26) 查看详细功能
79
+ - 输入工具名称查看详细功能
80
+ - 输入 'list' 重新显示工具列表
81
+ - 输入 'q' 或 'quit' 退出
82
+
83
+ 👉 请选择工具 > pandas
84
+
85
+ ================================================================================
86
+ 🔍 加载工具: pandas
87
+ ================================================================================
88
+
89
+ ⏳ 正在加载...
90
+ 已触发 task_tools.pandas_tool 模块加载
91
+
92
+ ✅ 工具已成功加载
93
+ 类名: PandasTool
94
+ 模块: aiecs.tools.task_tools.pandas_tool
95
+
96
+ 📋 原子功能列表 (共 41 个方法):
97
+ --------------------------------------------------------------------------------
98
+
99
+ [1] apply(records: List, func: str, columns: List, axis: int = 0) -> List
100
+ Apply a function to specified columns or rows.
101
+
102
+ [2] astype(records: List, dtypes: Dict) -> List
103
+ Convert column types in DataFrame.
104
+
105
+ [3] concat(records_list: List, axis: int = 0) -> List
106
+ Concatenate multiple DataFrames.
107
+
108
+ ... (更多方法)
109
+
110
+ [41] write_file(records: List, file_path: str, file_type: str = 'csv') -> Dict
111
+ Write DataFrame to a file.
112
+
113
+ --------------------------------------------------------------------------------
114
+ ```
115
+
116
+ ### 2. 类型注解检查器 (`check_type_annotations.py`)
117
+
118
+ 检查工具方法的类型注解完整性,确保所有方法都有完整的类型注解(参数类型 + 返回类型)。
119
+
120
+ **用途**:
121
+ - 验证新开发的工具是否有完整的类型注解
122
+ - 检查现有工具的类型注解覆盖率
123
+ - 为自动 Schema 生成提供基础保障
124
+
125
+ **命令**:
126
+ ```bash
127
+ # 检查所有工具
128
+ aiecs-tools-check-annotations
129
+
130
+ # 检查特定工具
131
+ aiecs-tools-check-annotations pandas
132
+
133
+ # 检查多个工具
134
+ aiecs-tools-check-annotations pandas chart image
135
+
136
+ # 显示详细的改进建议
137
+ aiecs-tools-check-annotations pandas --verbose
138
+ ```
139
+
140
+ **输出示例**:
141
+ ```
142
+ ====================================================================================================
143
+ 工具类型注解检查器
144
+ ====================================================================================================
145
+
146
+ ✅ pandas: 38/38 方法有完整类型注解 (100.0%)
147
+
148
+ ⚠️ my_tool: 5/10 方法有完整类型注解 (50.0%)
149
+
150
+ 需要改进的方法:
151
+ ✗ process_data: 无类型注解
152
+ ⚠ filter_records: 部分类型注解
153
+ → 为参数 'condition' 添加类型注解
154
+ → 添加返回类型注解
155
+
156
+ ====================================================================================================
157
+ 总体统计: 43/48 方法有完整类型注解 (89.6%)
158
+ ====================================================================================================
159
+ ```
160
+
161
+ ### 3. 工具配置检查器 (`check_all_tools_config.py`)
162
+
163
+ 静态代码分析工具,检查所有工具的配置设置是否正确使用 `self._config_obj`。
164
+
165
+ **用途**:
166
+ - 验证工具是否正确使用 BaseTool 的配置机制
167
+ - 检查是否有工具错误地重新创建 Config 对象
168
+ - 确保配置分离机制正确实施
169
+
170
+ **命令**:
171
+ ```bash
172
+ # 从项目根目录运行
173
+ poetry run python aiecs/scripts/tools_develop/check_all_tools_config.py
174
+
175
+ # 或使用 python -m
176
+ poetry run python -m aiecs.scripts.tools_develop.check_all_tools_config
177
+ ```
178
+
179
+ **输出示例**:
180
+ ```
181
+ ================================================================================
182
+ 检查所有注册工具的配置设置
183
+ ================================================================================
184
+
185
+ 找到 29 个工具文件
186
+
187
+ ================================================================================
188
+ 检查结果
189
+ ================================================================================
190
+
191
+ ✅ 正确配置 (29 个):
192
+ ✓ DocumentParserTool
193
+ aiecs/tools/docs/document_parser_tool.py
194
+ ✓ DocumentWriterTool
195
+ aiecs/tools/docs/document_writer_tool.py
196
+ ...
197
+
198
+ ================================================================================
199
+ 总结
200
+ ================================================================================
201
+ 总工具数: 29
202
+ ✅ 正确配置: 29
203
+ ❌ 需要修复: 0
204
+ 📝 无需配置: 0
205
+
206
+ ✅ 所有工具配置正确!
207
+ ```
208
+
209
+ ### 4. 工具配置运行时测试 (`test_all_tools_config_runtime.py`)
210
+
211
+ 运行时测试工具,实际创建工具实例并验证配置分离机制。
212
+
213
+ **用途**:
214
+ - 实际测试工具配置加载
215
+ - 验证 ExecutorConfig 字段过滤是否正确
216
+ - 检测是否触发 `extra='forbid'` 验证错误
217
+
218
+ **命令**:
219
+ ```bash
220
+ # 从项目根目录运行
221
+ poetry run python aiecs/scripts/tools_develop/test_all_tools_config_runtime.py
222
+ ```
223
+
224
+ **输出示例**:
225
+ ```
226
+ ================================================================================
227
+ 运行时测试:所有工具配置加载
228
+ ================================================================================
229
+
230
+ 测试 27 个工具...
231
+
232
+ 测试 DocumentParserTool... ✓ 配置正确
233
+ 测试 DocumentWriterTool... ✓ 配置正确
234
+ 测试 ScraperTool... ✓ 配置正确
235
+ ...
236
+
237
+ ================================================================================
238
+ 测试总结
239
+ ================================================================================
240
+
241
+ 总计: 27 个工具
242
+ ✅ 通过: 24
243
+ ❌ 失败: 3
244
+
245
+ ✅ 所有工具配置测试通过!
246
+ ```
247
+
248
+ ### 5. ExecutorConfig 修复验证器 (`verify_executor_config_fix.py`)
249
+
250
+ 快速验证核心工具的 ExecutorConfig 配置是否正确。
251
+
252
+ **用途**:
253
+ - 快速验证关键工具的配置
254
+ - 测试配置分离机制
255
+ - 验证修复是否生效
256
+
257
+ **命令**:
258
+ ```bash
259
+ # 从项目根目录运行
260
+ poetry run python aiecs/scripts/tools_develop/verify_executor_config_fix.py
261
+ ```
262
+
263
+ **输出示例**:
264
+ ```
265
+ ================================================================================
266
+ ExecutorConfig 字段过滤修复验证
267
+ ================================================================================
268
+
269
+ 验证 DocumentParserTool... ✓ 配置正确分离
270
+ 验证 DocumentWriterTool... ✓ 配置正确分离
271
+ 验证 ScraperTool... ✓ 配置正确分离
272
+
273
+ ================================================================================
274
+ 验证总结
275
+ ================================================================================
276
+ ✓ DocumentParserTool
277
+ ✓ DocumentWriterTool
278
+ ✓ ScraperTool
279
+
280
+ ================================================================================
281
+ ✅ 所有工具验证通过
282
+ ================================================================================
283
+ ```
284
+
285
+ ### 6. Schema 质量验证器 (`validate_tool_schemas.py`)
286
+
287
+ 验证自动生成的 Schema 质量,识别需要改进的文档字符串。
288
+
289
+ **用途**:
290
+ - 验证 Schema 自动生成是否成功
291
+ - 评估生成的 Schema 描述质量
292
+ - 指导开发者改进文档字符串
293
+
294
+ **命令**:
295
+ ```bash
296
+ # 验证所有工具
297
+ aiecs-tools-validate-schemas
298
+
299
+ # 验证特定工具
300
+ aiecs-tools-validate-schemas pandas
301
+
302
+ # 显示详细的改进建议
303
+ aiecs-tools-validate-schemas pandas --verbose
304
+
305
+ # 显示示例 Schema
306
+ aiecs-tools-validate-schemas pandas --show-examples
307
+ ```
308
+
309
+ **输出示例**:
310
+ ```
311
+ ====================================================================================================
312
+ 工具 Schema 质量验证器
313
+ ====================================================================================================
314
+
315
+ ✅ chart
316
+ 方法数: 3
317
+ 成功生成 Schema: 3 (100.0%)
318
+ 描述质量: 100.0%
319
+ 综合评分: 100.0% (A (优秀))
320
+
321
+ ❌ pandas
322
+ 方法数: 38
323
+ 成功生成 Schema: 38 (100.0%)
324
+ 描述质量: 0.0%
325
+ 综合评分: 66.7% (D (需改进))
326
+
327
+ 需要改进的方法 (38 个):
328
+
329
+ filter:
330
+ 💡 在文档字符串的 Args 部分为参数 'records' 添加描述
331
+ 💡 在文档字符串的 Args 部分为参数 'condition' 添加描述
332
+
333
+ ====================================================================================================
334
+ 总体统计:
335
+ 方法数: 41
336
+ Schema 生成率: 41/41 (100.0%)
337
+ 描述质量: 7.3%
338
+ ====================================================================================================
339
+ ```
340
+
341
+ ## 🚀 工具开发工作流
342
+
343
+ ### 新工具开发流程
344
+
345
+ 1. **编写工具类**
346
+ ```python
347
+ from aiecs.tools.base_tool import BaseTool
348
+ from pydantic import Field
349
+ from pydantic_settings import BaseSettings, SettingsConfigDict
350
+ from typing import List, Dict, Optional
351
+
352
+ class MyTool(BaseTool):
353
+ """My custom tool"""
354
+
355
+ class Config(BaseSettings):
356
+ """Tool configuration"""
357
+ model_config = SettingsConfigDict(env_prefix="MY_TOOL_")
358
+
359
+ my_setting: str = Field(default="default_value", description="My setting")
360
+
361
+ def __init__(self, config: Optional[Dict] = None):
362
+ """Initialize MyTool with settings
363
+
364
+ Configuration is automatically loaded by BaseTool from:
365
+ 1. Explicit config dict (highest priority)
366
+ 2. YAML config files (config/tools/my_tool.yaml)
367
+ 3. Environment variables (via dotenv from .env files)
368
+ 4. Tool defaults (lowest priority)
369
+ """
370
+ super().__init__(config)
371
+
372
+ # ✅ 使用 BaseTool 自动创建的配置对象
373
+ self.config = self._config_obj if self._config_obj else self.Config()
374
+
375
+ def process(self, data: List[Dict], threshold: float = 0.5) -> Dict:
376
+ """
377
+ Process data with threshold.
378
+
379
+ Args:
380
+ data: Input data to process
381
+ threshold: Processing threshold (0.0 to 1.0)
382
+
383
+ Returns:
384
+ Processing results
385
+ """
386
+ pass
387
+ ```
388
+
389
+ 2. **检查配置设置**
390
+ ```bash
391
+ # 静态检查配置模式
392
+ poetry run python aiecs/scripts/tools_develop/check_all_tools_config.py
393
+
394
+ # 运行时测试配置加载
395
+ poetry run python aiecs/scripts/tools_develop/test_all_tools_config_runtime.py
396
+ ```
397
+
398
+ 确保工具正确使用 `self._config_obj`。
399
+
400
+ 3. **检查类型注解**
401
+ ```bash
402
+ aiecs-tools-check-annotations my_tool --verbose
403
+ ```
404
+
405
+ 确保所有方法都有 ✅ 标记。
406
+
407
+ 4. **验证 Schema 质量**
408
+ ```bash
409
+ aiecs-tools-validate-schemas my_tool --show-examples
410
+ ```
411
+
412
+ 目标:综合评分 ≥ 80% (B 良好)
413
+
414
+ 5. **改进文档字符串**
415
+
416
+ 根据验证器的建议,改进文档字符串:
417
+ ```python
418
+ def process(self, data: List[Dict], threshold: float = 0.5) -> Dict:
419
+ """
420
+ Process data with threshold filtering.
421
+
422
+ Args:
423
+ data: List of data records to process (each record is a dict)
424
+ threshold: Minimum confidence threshold for filtering (0.0 to 1.0, default: 0.5)
425
+
426
+ Returns:
427
+ Dictionary containing processed results and statistics
428
+ """
429
+ pass
430
+ ```
431
+
432
+ 6. **重新验证**
433
+ ```bash
434
+ aiecs-tools-validate-schemas my_tool
435
+ ```
436
+
437
+ ### 现有工具维护流程
438
+
439
+ 1. **定期检查**
440
+ ```bash
441
+ # 每次修改工具后运行
442
+ poetry run python aiecs/scripts/tools_develop/check_all_tools_config.py
443
+ aiecs-tools-check-annotations my_tool
444
+ aiecs-tools-validate-schemas my_tool
445
+ ```
446
+
447
+ 2. **批量检查**
448
+ ```bash
449
+ # 检查所有工具的配置
450
+ poetry run python aiecs/scripts/tools_develop/check_all_tools_config.py
451
+ poetry run python aiecs/scripts/tools_develop/test_all_tools_config_runtime.py
452
+
453
+ # 检查类型注解和 Schema
454
+ aiecs-tools-check-annotations
455
+ aiecs-tools-validate-schemas
456
+ ```
457
+
458
+ 3. **持续改进**
459
+ - 优先改进评分 < 80% 的工具
460
+ - 为通用描述(如 "Parameter xxx")添加有意义的说明
461
+ - 确保所有工具正确使用 `self._config_obj`
462
+
463
+ ## 📊 质量标准
464
+
465
+ ### 类型注解标准
466
+
467
+ - ✅ **优秀 (100%)**:所有方法都有完整类型注解
468
+ - ⚠️ **良好 (80-99%)**:大部分方法有完整类型注解
469
+ - ❌ **需改进 (<80%)**:缺少大量类型注解
470
+
471
+ ### Schema 质量标准
472
+
473
+ - ✅ **A (优秀) ≥90%**:Schema 生成成功,描述质量高
474
+ - ⚠️ **B (良好) 80-89%**:Schema 生成成功,描述质量中等
475
+ - ⚠️ **C (中等) 70-79%**:Schema 生成成功,描述质量较低
476
+ - ❌ **D (需改进) <70%**:Schema 生成失败或描述质量差
477
+
478
+ ## 💡 最佳实践
479
+
480
+ ### 1. 正确的配置模式
481
+
482
+ **始终使用 `self._config_obj`**,不要重新创建 Config 对象:
483
+
484
+ ```python
485
+ # ✅ 正确的做法
486
+ def __init__(self, config: Optional[Dict] = None):
487
+ """Initialize tool with settings
488
+
489
+ Configuration is automatically loaded by BaseTool from:
490
+ 1. Explicit config dict (highest priority)
491
+ 2. YAML config files (config/tools/{tool_name}.yaml)
492
+ 3. Environment variables (via dotenv from .env files)
493
+ 4. Tool defaults (lowest priority)
494
+ """
495
+ super().__init__(config)
496
+
497
+ # ✅ 使用 BaseTool 自动创建的配置对象
498
+ self.config = self._config_obj if self._config_obj else self.Config()
499
+
500
+ # ❌ 错误的做法
501
+ def __init__(self, config: Optional[Dict] = None):
502
+ super().__init__(config)
503
+
504
+ # ❌ 不要重新创建 Config 对象
505
+ # 这会导致 ExecutorConfig 验证错误
506
+ self.config = self.Config(**config) # 错误!
507
+ self.config = self.Config(**(config or {})) # 错误!
508
+ ```
509
+
510
+ **原因**:
511
+ - `BaseTool` 已经自动分离了 executor 配置和工具配置
512
+ - 重新创建 Config 对象会包含 executor 字段(如 `enable_cache`, `max_workers`)
513
+ - 这会触发 Pydantic 的 `extra='forbid'` 验证错误
514
+
515
+ ### 2. 完整的类型注解
516
+
517
+ ```python
518
+ # ✅ 好的示例
519
+ def filter(self, records: List[Dict], condition: str) -> List[Dict]:
520
+ pass
521
+
522
+ # ❌ 不好的示例
523
+ def filter(self, records, condition): # 缺少类型注解
524
+ pass
525
+
526
+ def filter(self, records: List[Dict], condition): # 部分缺失
527
+ pass
528
+ ```
529
+
530
+ ### 3. 详细的文档字符串
531
+
532
+ 使用 Google 或 NumPy 风格:
533
+
534
+ ```python
535
+ # ✅ Google 风格(推荐)
536
+ def filter(self, records: List[Dict], condition: str) -> List[Dict]:
537
+ """
538
+ Filter DataFrame based on a condition.
539
+
540
+ Args:
541
+ records: List of records to filter (each record is a dict)
542
+ condition: Filter condition using pandas query syntax (e.g., 'age > 30')
543
+
544
+ Returns:
545
+ Filtered list of records
546
+ """
547
+ pass
548
+
549
+ # ✅ NumPy 风格
550
+ def filter(self, records: List[Dict], condition: str) -> List[Dict]:
551
+ """
552
+ Filter DataFrame based on a condition.
553
+
554
+ Parameters
555
+ ----------
556
+ records : List[Dict]
557
+ List of records to filter (each record is a dict)
558
+ condition : str
559
+ Filter condition using pandas query syntax (e.g., 'age > 30')
560
+
561
+ Returns
562
+ -------
563
+ List[Dict]
564
+ Filtered list of records
565
+ """
566
+ pass
567
+ ```
568
+
569
+ ### 4. 有意义的描述
570
+
571
+ ```python
572
+ # ❌ 不好的描述
573
+ """
574
+ Args:
575
+ records: Parameter records
576
+ condition: Parameter condition
577
+ """
578
+
579
+ # ✅ 好的描述
580
+ """
581
+ Args:
582
+ records: List of data records to filter (each record contains fields like 'name', 'age', etc.)
583
+ condition: Filter condition using pandas query syntax (e.g., 'age > 30 and status == "active"')
584
+ """
585
+ ```
586
+
587
+ ### 5. 处理复杂类型
588
+
589
+ ```python
590
+ from typing import List, Dict, Optional, Union
591
+ import pandas as pd
592
+
593
+ # ✅ 使用标准类型
594
+ def process(self, data: List[Dict]) -> Dict:
595
+ pass
596
+
597
+ # ✅ pandas 类型会自动映射为 Any
598
+ def process(self, df: pd.DataFrame) -> pd.DataFrame:
599
+ pass
600
+
601
+ # ✅ 可选参数
602
+ def process(self, data: List[Dict], config: Optional[Dict] = None) -> Dict:
603
+ pass
604
+ ```
605
+
606
+ ## 🔧 故障排查
607
+
608
+ ### 问题:配置验证错误 - "Extra inputs are not permitted"
609
+
610
+ **原因**:工具在 `__init__` 中重新创建了 Config 对象,包含了 executor 字段
611
+
612
+ **解决**:
613
+ 1. 使用 `self._config_obj` 而不是重新创建 Config 对象
614
+ 2. 运行配置检查器验证:
615
+ ```bash
616
+ poetry run python aiecs/scripts/tools_develop/check_all_tools_config.py
617
+ ```
618
+
619
+ **示例修复**:
620
+ ```python
621
+ # ❌ 错误
622
+ def __init__(self, config: Optional[Dict] = None):
623
+ super().__init__(config)
624
+ self.config = self.Config(**config) # 包含 executor 字段
625
+
626
+ # ✅ 正确
627
+ def __init__(self, config: Optional[Dict] = None):
628
+ super().__init__(config)
629
+ self.config = self._config_obj if self._config_obj else self.Config()
630
+ ```
631
+
632
+ ### 问题:类型注解检查失败
633
+
634
+ **原因**:缺少类型注解或使用了不支持的类型
635
+
636
+ **解决**:
637
+ 1. 为所有参数添加类型注解
638
+ 2. 添加返回类型注解
639
+ 3. 使用标准类型(List, Dict, str, int, float, bool 等)
640
+
641
+ ### 问题:Schema 生成失败
642
+
643
+ **原因**:
644
+ - 方法没有参数(除了 self)→ 这是正常的,无需 Schema
645
+ - 类型注解不完整 → 运行类型注解检查器
646
+ - 使用了不支持的类型 → 会自动映射为 Any
647
+
648
+ ### 问题:描述质量低
649
+
650
+ **原因**:文档字符串缺少 Args 部分或描述不详细
651
+
652
+ **解决**:
653
+ 1. 添加文档字符串的 Args 部分
654
+ 2. 为每个参数添加详细描述
655
+ 3. 使用 Google 或 NumPy 风格
656
+
657
+ ## 📚 相关文档
658
+
659
+ - [Schema Generator 技术文档](../../../docs/TOOLS/TOOLS_SCHEMA_GENERATOR.md)
660
+ - [LangChain Adapter 技术文档](../../../docs/TOOLS/TOOLS_LANGCHAIN_ADAPTER.md)
661
+ - [BaseTool 开发指南](../../../docs/TOOLS/TOOLS_BASE_TOOL.md)
662
+
663
+ ## 🤝 贡献
664
+
665
+ 如果你发现这些工具有改进空间,欢迎提交 PR 或 Issue!
666
+
667
+ ---
668
+
669
+ **维护者**: AIECS Tools Team
670
+ **最后更新**: 2025-12-02
671
+