aiforge-engine 0.0.2__tar.gz → 0.0.4__tar.gz

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.
Files changed (164) hide show
  1. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/PKG-INFO +3 -3
  2. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/README.md +2 -2
  3. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/pyproject.toml +1 -1
  4. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/__init__.py +1 -1
  5. aiforge_engine-0.0.4/src/aiforge/core/managers/content_generation_manager.py +359 -0
  6. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/managers/execution_manager.py +25 -13
  7. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/managers/search_manager.py +18 -15
  8. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/orchestrator.py +8 -0
  9. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/prompt.py +2 -2
  10. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/parameter_mapping_service.py +20 -3
  11. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/templates/search_template.py +9 -7
  12. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/templates/template_manager.py +16 -1
  13. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/validation/result_validator.py +2 -2
  14. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/.gitignore +0 -0
  15. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/LICENSE +0 -0
  16. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/__init__.py +0 -0
  17. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/__init__.py +0 -0
  18. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/cli_input_adapter.py +0 -0
  19. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/gui_input_adapter.py +0 -0
  20. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/input_adapter.py +0 -0
  21. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/input_adapter_manager.py +0 -0
  22. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/input_processors.py +0 -0
  23. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/mobile_input_adapter.py +0 -0
  24. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/voice_input_adapter.py +0 -0
  25. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/input/web_input_adapter.py +0 -0
  26. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/output/__init__.py +0 -0
  27. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/output/ai_ui_adapter.py +0 -0
  28. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/output/enhanced_hybrid_adapter.py +0 -0
  29. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/output/learning_Interface.py +0 -0
  30. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/output/rule_based_adapter.py +0 -0
  31. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/output/task_type_detector.py +0 -0
  32. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/adapters/output/ui_type_recommender.py +0 -0
  33. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/api/__init__.py +0 -0
  34. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/api/middleware/auth.py +0 -0
  35. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/api/middleware/rate_limit.py +0 -0
  36. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/api/routes/execution.py +0 -0
  37. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/api/routes/llm.py +0 -0
  38. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/api/routes/tasks.py +0 -0
  39. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/api/server.py +0 -0
  40. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cache/__init__.py +0 -0
  41. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cache/action_matcher.py +0 -0
  42. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cache/code_cache.py +0 -0
  43. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cache/dynamic_task_type_manager.py +0 -0
  44. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cache/semantic_cache.py +0 -0
  45. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cli/__init__.py +0 -0
  46. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cli/cli.py +0 -0
  47. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cli/commands/manager.py +0 -0
  48. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/cli/wizard.py +0 -0
  49. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/config/__init__.py +0 -0
  50. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/config/config.py +0 -0
  51. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/config/config_sync.py +0 -0
  52. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/config/default.toml +0 -0
  53. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/config/extension_config.py +0 -0
  54. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/config/extensions.toml +0 -0
  55. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/config/remote_config.py +0 -0
  56. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/__init__.py +0 -0
  57. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/engine.py +0 -0
  58. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/helpers/__init__.py +0 -0
  59. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/helpers/cache_helper.py +0 -0
  60. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/managers/__init__.py +0 -0
  61. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/managers/config_manager.py +0 -0
  62. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/runner.py +0 -0
  63. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/task/__init__.py +0 -0
  64. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/task/executor.py +0 -0
  65. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/task/manager.py +0 -0
  66. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/core/task/task.py +0 -0
  67. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/deployment/__init__.py +0 -0
  68. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/deployment/cloud/aws_deploy.py +0 -0
  69. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/deployment/cloud/azure_deploy.py +0 -0
  70. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/deployment/docker/Dockerfile +0 -0
  71. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/deployment/docker/docker-compose.yml +0 -0
  72. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/deployment/kubernetes/deployment.yaml +0 -0
  73. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/deployment/kubernetes/service.yaml +0 -0
  74. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/enterprise/__init__.py +0 -0
  75. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/enterprise/audit/audit_logger.py +0 -0
  76. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/enterprise/audit/compliance_checker.py +0 -0
  77. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/enterprise/auth/permission_manager.py +0 -0
  78. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/enterprise/auth/user_manager.py +0 -0
  79. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/enterprise/monitoring/alert_manager.py +0 -0
  80. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/enterprise/monitoring/metrics_collector.py +0 -0
  81. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/__init__.py +0 -0
  82. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/analyzer.py +0 -0
  83. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/code_blocks.py +0 -0
  84. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/engine.py +0 -0
  85. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/executor_interface.py +0 -0
  86. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/result_formatter.py +0 -0
  87. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/result_processor.py +0 -0
  88. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/runtimes/__init__.py +0 -0
  89. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/runtimes/javascript_runtime.py +0 -0
  90. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/runtimes/python_runtime.py +0 -0
  91. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/runtimes/shell_runtime.py +0 -0
  92. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/execution/unified_executor.py +0 -0
  93. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/extensions/__init__.py +0 -0
  94. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/extensions/extension_manager.py +0 -0
  95. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/extensions/loader.py +0 -0
  96. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/extensions/marketplace.py +0 -0
  97. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/extensions/plugin_installer.py +0 -0
  98. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/extensions/template_extension.py +0 -0
  99. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/instruction/__init__.py +0 -0
  100. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/instruction/analyzer.py +0 -0
  101. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/instruction/classifier.py +0 -0
  102. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/instruction/extractor.py +0 -0
  103. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/instruction/parser.py +0 -0
  104. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/__init__.py +0 -0
  105. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/conversation_manager.py +0 -0
  106. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/llm_client.py +0 -0
  107. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/llm_manager.py +0 -0
  108. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/providers/__init__.py +0 -0
  109. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/providers/deepseek_client.py +0 -0
  110. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/providers/ollama_client.py +0 -0
  111. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/llm/providers/openai_client.py +0 -0
  112. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/models/__init__.py +0 -0
  113. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/models/model_manager.py +0 -0
  114. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/multimodal/__init__.py +0 -0
  115. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/multimodal/audio/speech_to_text.py +0 -0
  116. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/multimodal/audio/text_to_speech.py +0 -0
  117. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/multimodal/document/pdf_parser.py +0 -0
  118. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/multimodal/document/word_parser.py +0 -0
  119. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/multimodal/vision/image_processor.py +0 -0
  120. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/multimodal/vision/video_processor.py +0 -0
  121. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/optimization/code_optimizer.py +0 -0
  122. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/optimization/feedback_optimizer.py +0 -0
  123. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/plugins/__init__.py +0 -0
  124. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/plugins/builtin/data_analysis.py +0 -0
  125. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/plugins/builtin/file_processing.py +0 -0
  126. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/plugins/builtin/web_scraping.py +0 -0
  127. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/plugins/plugin_interface.py +0 -0
  128. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/plugins/plugin_manager.py +0 -0
  129. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/__init__.py +0 -0
  130. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/execution_strategy.py +0 -0
  131. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/execution_strategy_manager.py +0 -0
  132. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/search_template_strategy.py +0 -0
  133. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/semantic_field_strategy.py +0 -0
  134. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/strategy/__init__.py +0 -0
  135. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/strategy/class_instantiation.py +0 -0
  136. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/strategy/direct_result.py +0 -0
  137. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/strategy/file_operation.py +0 -0
  138. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/strategy/file_operation_safety.py +0 -0
  139. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/strategy/parameterized_function.py +0 -0
  140. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/strategies/validation_strategy.py +0 -0
  141. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/templates/__init__.py +0 -0
  142. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/templates/builtin/automation.json +0 -0
  143. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/templates/builtin/data_analysis.json +0 -0
  144. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/templates/builtin/web_api.json +0 -0
  145. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/utils/__init__.py +0 -0
  146. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/utils/helpers.py +0 -0
  147. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/utils/progress_indicator.py +0 -0
  148. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/utils/sentence_transformers_downloader.py +0 -0
  149. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/utils/utils.py +0 -0
  150. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/validation/code_validator.py +0 -0
  151. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/workflow/__init__.py +0 -0
  152. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/workflow/nodes/data_node.py +0 -0
  153. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/workflow/nodes/execution_node.py +0 -0
  154. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/workflow/nodes/llm_node.py +0 -0
  155. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/workflow/workflow_designer.py +0 -0
  156. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge/workflow/workflow_engine.py +0 -0
  157. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge_gui/__init__.py +0 -0
  158. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge_gui/app.py +0 -0
  159. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge_gui/smart_display.py +0 -0
  160. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge_web/__init__.py +0 -0
  161. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge_web/api_adapter.py +0 -0
  162. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/aiforge_web/main.py +0 -0
  163. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/cli/__init__.py +0 -0
  164. {aiforge_engine-0.0.2 → aiforge_engine-0.0.4}/src/cli/cli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiforge-engine
3
- Version: 0.0.2
3
+ Version: 0.0.4
4
4
  Summary: Intelligent Intent Adaptive Execution Engine - 智能意图自适应执行引擎
5
5
  Project-URL: Homepage, https://github.com/iniwap/AIForge
6
6
  Project-URL: Documentation, https://iniwap.github.io/AIForge
@@ -67,7 +67,7 @@ Description-Content-Type: text/markdown
67
67
  ---
68
68
 
69
69
  ## 🎯 什么是 AIForge?
70
- ![alt text](logo.jpg)
70
+ ![LOGO](https://raw.githubusercontent.com/iniwap/AIForge/main/logo.jpg)
71
71
  AIForge 是一个**突破性的认知计算引擎**,它消除了自然语言与代码执行之间的壁垒。通过先进的**意图理解算法**和**自适应执行架构**,AIForge 能够:
72
72
 
73
73
  - 🧠 **深度理解** - 多维度解析复杂指令,精准捕获用户意图
@@ -102,7 +102,7 @@ AIForge 是一个**突破性的认知计算引擎**,它消除了自然语言
102
102
 
103
103
  ## 🚀 快速启动
104
104
 
105
- ### 安装
105
+ ### 安装(推荐uv)
106
106
  ```bash
107
107
  pip install aiforge-engine
108
108
  ```
@@ -15,7 +15,7 @@
15
15
  ---
16
16
 
17
17
  ## 🎯 什么是 AIForge?
18
- ![alt text](logo.jpg)
18
+ ![LOGO](https://raw.githubusercontent.com/iniwap/AIForge/main/logo.jpg)
19
19
  AIForge 是一个**突破性的认知计算引擎**,它消除了自然语言与代码执行之间的壁垒。通过先进的**意图理解算法**和**自适应执行架构**,AIForge 能够:
20
20
 
21
21
  - 🧠 **深度理解** - 多维度解析复杂指令,精准捕获用户意图
@@ -50,7 +50,7 @@ AIForge 是一个**突破性的认知计算引擎**,它消除了自然语言
50
50
 
51
51
  ## 🚀 快速启动
52
52
 
53
- ### 安装
53
+ ### 安装(推荐uv)
54
54
  ```bash
55
55
  pip install aiforge-engine
56
56
  ```
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "aiforge-engine"
7
- version = "0.0.2"
7
+ version = "0.0.4"
8
8
  description = "Intelligent Intent Adaptive Execution Engine - 智能意图自适应执行引擎"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache 2.0" }
@@ -61,4 +61,4 @@ __all__ = [
61
61
  "AIForgePrompt",
62
62
  ]
63
63
 
64
- __version__ = "0.0.2"
64
+ __version__ = "0.0.4"
@@ -0,0 +1,359 @@
1
+ import time
2
+ from typing import Dict, Any, Optional
3
+ from ...strategies.semantic_field_strategy import SemanticFieldStrategy
4
+
5
+
6
+ class AIForgeContentGenerationManager:
7
+ """内容生成管理器 - 专门处理内容生成任务"""
8
+
9
+ def __init__(self, components: Dict[str, Any]):
10
+ self.components = components
11
+ self.field_processor = SemanticFieldStrategy()
12
+ self.parameter_mapping_service = components.get("parameter_mapping_service")
13
+
14
+ # 扩展语义字段定义,支持格式相关参数
15
+ if hasattr(self.field_processor, "field_semantics"):
16
+ self.field_processor.field_semantics.update(
17
+ {
18
+ "format": [
19
+ "format",
20
+ "output_format",
21
+ "格式",
22
+ "输出格式",
23
+ "type",
24
+ "extension",
25
+ "文件格式",
26
+ ],
27
+ "style": ["style", "样式", "风格", "theme", "template", "模板"],
28
+ "language": ["language", "lang", "语言", "locale", "国际化"],
29
+ "tone": ["tone", "语调", "风格", "mood", "情感"],
30
+ }
31
+ )
32
+
33
+ def can_handle_content_generation(self, standardized_instruction: Dict[str, Any]) -> bool:
34
+ """判断是否为内容生成任务"""
35
+ task_type = standardized_instruction.get("task_type", "")
36
+ return task_type == "content_generation"
37
+
38
+ def execute_content_generation(
39
+ self, standardized_instruction: Dict[str, Any], instruction: str
40
+ ) -> Optional[Dict[str, Any]]:
41
+ """执行内容生成任务"""
42
+ if standardized_instruction.get("execution_mode", "") == "code_generation":
43
+ return self._execute_search_enhanced_generation(standardized_instruction, instruction)
44
+ else:
45
+ return self._execute_direct_generation(standardized_instruction, instruction)
46
+
47
+ def _execute_search_enhanced_generation(
48
+ self, standardized_instruction: Dict[str, Any], instruction: str
49
+ ) -> Optional[Dict[str, Any]]:
50
+ """执行搜索增强的内容生成"""
51
+ search_manager = self.components.get("search_manager")
52
+ if not search_manager:
53
+ return self._execute_direct_generation(standardized_instruction, instruction)
54
+
55
+ # 为内容生成任务优化搜索参数,确保足够的结果数量
56
+ content_search_instruction = standardized_instruction.copy()
57
+ content_search_instruction.update(
58
+ {
59
+ "task_type": "data_fetch",
60
+ "required_parameters": {
61
+ # 保留原有参数
62
+ **standardized_instruction.get("required_parameters", {}),
63
+ "search_query": {
64
+ "value": search_manager.extract_search_query(
65
+ standardized_instruction, instruction
66
+ ),
67
+ "type": "string",
68
+ "required": True,
69
+ },
70
+ "max_results": {
71
+ "value": 10,
72
+ "type": "int",
73
+ "required": False,
74
+ },
75
+ "min_items": {
76
+ "value": 5,
77
+ "type": "int",
78
+ "required": True,
79
+ },
80
+ "min_abstract_len": {
81
+ "value": 500,
82
+ "type": "int",
83
+ "required": False,
84
+ },
85
+ "max_abstract_len": {
86
+ "value": 1000,
87
+ "type": "int",
88
+ "required": False,
89
+ },
90
+ },
91
+ "expected_output": {
92
+ "required_fields": ["title", "content", "url", "pub_time"],
93
+ "validation_rules": {
94
+ "min_items": 5,
95
+ "non_empty_fields": ["title", "content", "url"],
96
+ "enable_deduplication": True,
97
+ },
98
+ },
99
+ }
100
+ )
101
+
102
+ # 使用完整的多层级搜索
103
+ search_result = search_manager.execute_multi_level_search(
104
+ content_search_instruction, instruction
105
+ )
106
+
107
+ if search_result and search_result.get("status") == "success":
108
+ return self._generate_content_with_search_result(
109
+ standardized_instruction, instruction, search_result
110
+ )
111
+ else:
112
+ return self._execute_direct_generation(standardized_instruction, instruction)
113
+
114
+ def _execute_direct_generation(
115
+ self, standardized_instruction: Dict[str, Any], instruction: str
116
+ ) -> Optional[Dict[str, Any]]:
117
+ """执行直接内容生成"""
118
+ output_format = self._extract_output_format_with_mapping(standardized_instruction)
119
+ style_params = self._extract_style_parameters(standardized_instruction)
120
+
121
+ enhanced_instruction = f"""
122
+ 请根据用户要求:{instruction},生成文章内容。
123
+
124
+ 输出格式要求:{output_format}
125
+ 样式要求:{style_params.get('style', '专业')}
126
+ 语调:{style_params.get('tone', '客观')}
127
+ 语言:{style_params.get('language', '中文')}
128
+
129
+ 特别注意:
130
+ 1. 严格按照{output_format}格式输出
131
+ 2. 确保内容结构清晰,格式规范
132
+ 3. 内容要有逻辑性和可读性
133
+ 4. 保持{style_params.get('tone', '客观')}的语调
134
+ """
135
+
136
+ return self._call_llm_for_content(
137
+ enhanced_instruction, output_format, standardized_instruction
138
+ )
139
+
140
+ def _generate_content_with_search_result(
141
+ self,
142
+ standardized_instruction: Dict[str, Any],
143
+ instruction: str,
144
+ search_result: Dict[str, Any],
145
+ ) -> Optional[Dict[str, Any]]:
146
+ """基于搜索结果生成内容"""
147
+ search_data = search_result.get("data", [])
148
+ output_format = self._extract_output_format_with_mapping(standardized_instruction)
149
+ style_params = self._extract_style_parameters(standardized_instruction)
150
+
151
+ # 格式化搜索结果
152
+ if len(search_data) > 0:
153
+ formatted = f"关于'{instruction}'的搜索结果:\n\n"
154
+ for i, result in enumerate(search_data, 1):
155
+ formatted += f"## 结果 {i}\n"
156
+ formatted += f"**标题**: {result.get('title', '无标题')}\n"
157
+ formatted += f"**发布时间**: {result.get('pub_time', '未知时间')}\n"
158
+ formatted += f"**摘要**: {result.get('abstract', '无摘要')}\n"
159
+ formatted += f"**内容**: {result.get('content', '')}...\n"
160
+ formatted += "\n"
161
+ else:
162
+ formatted = "未找到相关搜索结果,请基于已有知识生成内容。"
163
+
164
+ enhanced_instruction = f"""
165
+ 请基于以下搜索到的最新数据内容:
166
+ {formatted}
167
+
168
+ 和用户任务要求:{instruction},生成文章内容。
169
+
170
+ 输出格式要求:{output_format}
171
+ 样式要求:{style_params.get('style', '专业')}
172
+ 语调:{style_params.get('tone', '客观')}
173
+ 语言:{style_params.get('language', '中文')}
174
+
175
+ 特别注意:
176
+ 1. 文章中的日期必须采用搜索结果的日期
177
+ 2. 严格按照{output_format}格式输出
178
+ 3. 确保内容结构清晰,格式规范
179
+ 4. 基于搜索结果的真实数据进行分析和创作
180
+ 5. 保持{style_params.get('tone', '客观')}的语调
181
+ """
182
+
183
+ return self._call_llm_for_content(
184
+ enhanced_instruction, output_format, standardized_instruction, len(search_data)
185
+ )
186
+
187
+ def _extract_output_format_with_mapping(self, standardized_instruction: Dict[str, Any]) -> str:
188
+ """使用参数映射服务提取输出格式"""
189
+ parameters = standardized_instruction.get("required_parameters", {})
190
+
191
+ # 使用参数映射服务进行格式参数映射
192
+ if self.parameter_mapping_service:
193
+ # 创建虚拟函数来获取格式参数
194
+ def dummy_format_function(
195
+ output_format="markdown", format="markdown", type="markdown", extension="md"
196
+ ):
197
+ # 优先级:output_format > format > type > extension
198
+ for param in [output_format, format, type, extension]:
199
+ if param and param != "markdown" and param != "md":
200
+ return param
201
+ return "markdown"
202
+
203
+ context = {
204
+ "task_type": standardized_instruction.get("task_type"),
205
+ "action": standardized_instruction.get("action"),
206
+ "function_name": "extract_format",
207
+ }
208
+
209
+ try:
210
+ mapped_params = self.parameter_mapping_service.map_parameters(
211
+ dummy_format_function, parameters, context
212
+ )
213
+ result = dummy_format_function(**mapped_params)
214
+ if result and result != "markdown":
215
+ return result.lower()
216
+ except Exception:
217
+ pass
218
+
219
+ # 回退到原有逻辑
220
+ return self._fallback_format_extraction(standardized_instruction)
221
+
222
+ def _extract_style_parameters(self, standardized_instruction: Dict[str, Any]) -> Dict[str, str]:
223
+ """使用参数映射服务提取样式参数"""
224
+ parameters = standardized_instruction.get("required_parameters", {})
225
+ style_params = {"style": "专业", "tone": "客观", "language": "中文"}
226
+
227
+ if self.parameter_mapping_service:
228
+ # 创建虚拟函数来获取样式参数
229
+ def dummy_style_function(
230
+ style="专业", tone="客观", language="中文", theme="专业", mood="客观", lang="中文"
231
+ ):
232
+ return {
233
+ "style": style or theme or "专业",
234
+ "tone": tone or mood or "客观",
235
+ "language": language or lang or "中文",
236
+ }
237
+
238
+ context = {
239
+ "task_type": standardized_instruction.get("task_type"),
240
+ "action": standardized_instruction.get("action"),
241
+ "function_name": "extract_style",
242
+ }
243
+
244
+ try:
245
+ mapped_params = self.parameter_mapping_service.map_parameters(
246
+ dummy_style_function, parameters, context
247
+ )
248
+ result = dummy_style_function(**mapped_params)
249
+ style_params.update(result)
250
+ except Exception:
251
+ pass
252
+
253
+ return style_params
254
+
255
+ def _fallback_format_extraction(self, standardized_instruction: Dict[str, Any]) -> str:
256
+ """回退的格式提取逻辑"""
257
+ # 直接检查参数
258
+ parameters = standardized_instruction.get("required_parameters", {})
259
+ format_params = ["output_format", "format", "type", "extension"]
260
+
261
+ for param_name in format_params:
262
+ if param_name in parameters:
263
+ param_info = parameters[param_name]
264
+ if isinstance(param_info, dict) and "value" in param_info:
265
+ return param_info["value"].lower()
266
+ elif isinstance(param_info, str):
267
+ return param_info.lower()
268
+
269
+ # 检查指令中是否包含格式要求
270
+ instruction_lower = standardized_instruction.get("target", "").lower()
271
+ format_keywords = {
272
+ "markdown": ["markdown", "md", "标记语言"],
273
+ "html": ["html", "网页", "web"],
274
+ "json": ["json", "数据格式"],
275
+ "xml": ["xml"],
276
+ "pdf": ["pdf"],
277
+ "docx": ["word", "docx", "文档"],
278
+ "txt": ["txt", "文本", "纯文本"],
279
+ }
280
+
281
+ for format_type, keywords in format_keywords.items():
282
+ if any(keyword in instruction_lower for keyword in keywords):
283
+ return format_type
284
+
285
+ # 默认返回markdown
286
+ return "markdown"
287
+
288
+ def _call_llm_for_content(
289
+ self,
290
+ enhanced_instruction: str,
291
+ output_format: str,
292
+ standardized_instruction: Dict[str, Any],
293
+ search_results_count: int = 0,
294
+ ) -> Dict[str, Any]:
295
+ """调用LLM生成内容"""
296
+ llm_manager = self.components.get("llm_manager")
297
+ if not llm_manager:
298
+ return {
299
+ "data": {"content": "LLM管理器不可用"},
300
+ "status": "error",
301
+ "summary": "内容生成失败:LLM管理器不可用",
302
+ }
303
+
304
+ client = llm_manager.get_client()
305
+ if not client:
306
+ return {
307
+ "data": {"content": "LLM客户端不可用"},
308
+ "status": "error",
309
+ "summary": "内容生成失败:LLM客户端不可用",
310
+ }
311
+ try:
312
+ content = client.generate_code(enhanced_instruction, None, use_history=False)
313
+
314
+ return {
315
+ "data": {
316
+ "content": content,
317
+ "format": output_format,
318
+ "content_type": self._get_content_type(output_format),
319
+ },
320
+ "status": "success",
321
+ "summary": f"成功生成{output_format}格式内容"
322
+ + (f"(基于{search_results_count}条搜索结果)" if search_results_count > 0 else ""),
323
+ "metadata": {
324
+ "timestamp": time.time(),
325
+ "task_type": "content_generation",
326
+ "execution_type": (
327
+ "search_enhanced_content" if search_results_count > 0 else "direct_content"
328
+ ),
329
+ "output_format": output_format,
330
+ "search_results_count": search_results_count,
331
+ },
332
+ }
333
+ except Exception as e:
334
+ return {
335
+ "data": {"content": f"内容生成出错:{str(e)}"},
336
+ "status": "error",
337
+ "summary": f"内容生成失败:{str(e)}",
338
+ }
339
+
340
+ def _get_content_type(self, output_format: str) -> str:
341
+ """根据格式返回内容类型"""
342
+ format_mapping = {
343
+ "markdown": "text/markdown",
344
+ "html": "text/html",
345
+ "json": "application/json",
346
+ "xml": "application/xml",
347
+ "pdf": "application/pdf",
348
+ "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
349
+ "txt": "text/plain",
350
+ }
351
+ return format_mapping.get(output_format, "text/plain")
352
+
353
+ def get_supported_formats(self) -> list:
354
+ """获取支持的输出格式列表"""
355
+ return ["markdown", "html", "json", "xml", "pdf", "docx", "txt"]
356
+
357
+ def validate_format(self, format_name: str) -> bool:
358
+ """验证格式是否支持"""
359
+ return format_name.lower() in self.get_supported_formats()
@@ -30,25 +30,14 @@ class AIForgeExecutionManager:
30
30
 
31
31
  def _run_with_standardized_instruction(self, instruction: str) -> Optional[Dict[str, Any]]:
32
32
  """基于标准化指令的统一执行流程"""
33
- instruction_analyzer = self.components.get("instruction_analyzer")
34
-
35
- if not instruction_analyzer:
33
+ if not self.components.get("instruction_analyzer"):
36
34
  result, _, _ = self.generate_and_execute_with_code(instruction, None, None)
37
35
  return result
38
36
 
39
37
  # 使用统一的指令分析入口
40
38
  standardized_instruction = self._get_final_standardized_instruction(instruction)
41
39
 
42
- # 委托给搜索管理器处理搜索任务
43
- search_manager = self.components.get("search_manager")
44
- if search_manager and search_manager.is_search_task(standardized_instruction):
45
- result = search_manager.execute_multi_level_search(
46
- standardized_instruction, instruction
47
- )
48
- if result["status"] != "error" and len(result["data"]) != 0:
49
- return result
50
-
51
- # 非搜索的执行逻辑...
40
+ task_type = standardized_instruction.get("task_type", "")
52
41
  execution_mode = standardized_instruction.get("execution_mode", "code_generation")
53
42
  confidence = standardized_instruction.get("confidence", 0)
54
43
 
@@ -63,6 +52,29 @@ class AIForgeExecutionManager:
63
52
  elif execution_mode == "direct_ai_response" and confidence >= 0.6:
64
53
  return self._handle_direct_response(standardized_instruction, instruction)
65
54
 
55
+ # 内容生成任务委托给专门的管理器
56
+ if task_type == "content_generation":
57
+ content_generation_manager = self.components.get("content_generation_manager")
58
+ if (
59
+ content_generation_manager
60
+ and content_generation_manager.can_handle_content_generation(
61
+ standardized_instruction
62
+ )
63
+ ):
64
+ return content_generation_manager.execute_content_generation(
65
+ standardized_instruction, instruction
66
+ )
67
+
68
+ # 数据获取任务委托给搜索管理器
69
+ if task_type == "data_fetch":
70
+ search_manager = self.components.get("search_manager")
71
+ if search_manager and search_manager.is_search_task(standardized_instruction):
72
+ result = search_manager.execute_multi_level_search(
73
+ standardized_instruction, instruction
74
+ )
75
+ if result["status"] != "error" and len(result["data"]) != 0:
76
+ return result
77
+
66
78
  # 其他类型按原有逻辑处理
67
79
  code_cache = self.components.get("code_cache")
68
80
  if code_cache:
@@ -15,17 +15,11 @@ class AIForgeSearchManager:
15
15
 
16
16
  def is_search_task(self, standardized_instruction: Dict[str, Any]) -> bool:
17
17
  """判断是否为搜索类任务"""
18
- task_type = standardized_instruction.get("task_type", "")
19
18
  action = standardized_instruction.get("action", "")
20
19
 
21
- execution_mode = standardized_instruction.get("execution_mode", "")
22
- if execution_mode == "direct_ai_response":
23
- return False
24
-
25
20
  # 检查任务类型和动作
26
21
  search_indicators = [
27
- task_type == "data_fetch",
28
- action in ["search", "fetch", "get"],
22
+ any(keyword in action.lower() for keyword in ["search", "fetch", "get"]),
29
23
  "search" in standardized_instruction.get("target", "").lower(),
30
24
  ]
31
25
 
@@ -46,7 +40,6 @@ class AIForgeSearchManager:
46
40
  search_params = self.parameter_mapping_service.extract_search_parameters(
47
41
  standardized_instruction, original_instruction
48
42
  )
49
-
50
43
  if not search_params["search_query"]:
51
44
  return None
52
45
 
@@ -229,13 +222,24 @@ class AIForgeSearchManager:
229
222
  except Exception:
230
223
  return None, False
231
224
 
232
- def _extract_search_query(
233
- self, standardized_instruction: Dict[str, Any], original_instruction: str
225
+ def extract_search_query(
226
+ self, standardized_instruction: Dict[str, Any], instruction: str
234
227
  ) -> str:
235
228
  """提取搜索查询"""
229
+ if self.parameter_mapping_service:
230
+ # 使用现有的搜索参数提取服务
231
+ try:
232
+ search_params = self.parameter_mapping_service.extract_search_parameters(
233
+ standardized_instruction, instruction
234
+ )
235
+ return search_params.get("search_query", instruction)
236
+ except Exception:
237
+ pass
238
+
239
+ # 回退逻辑:直接从参数中提取
236
240
  parameters = standardized_instruction.get("required_parameters", {})
237
241
 
238
- # 尝试从参数中提取
242
+ # 尝试从参数中提取搜索查询
239
243
  for param_name in ["search_query", "query", "keyword"]:
240
244
  if param_name in parameters:
241
245
  param_info = parameters[param_name]
@@ -249,8 +253,8 @@ class AIForgeSearchManager:
249
253
  if target:
250
254
  return target
251
255
 
252
- # 使用原始指令
253
- return original_instruction
256
+ # 使用原始指令作为最后的回退
257
+ return instruction
254
258
 
255
259
  def _convert_search_result_to_aiforge_format(
256
260
  self,
@@ -266,7 +270,6 @@ class AIForgeSearchManager:
266
270
  success = search_result.get("success", False)
267
271
  error = search_result.get("error")
268
272
 
269
- # 应用字段映射
270
273
  expected_output = standardized_instruction.get("expected_output")
271
274
  if expected_output and expected_output.get("required_fields"):
272
275
  results = self.processor_manager.process_field(
@@ -382,7 +385,7 @@ class AIForgeSearchManager:
382
385
  return freeform_result
383
386
 
384
387
  ProgressIndicator.show_search_process("系统默认")
385
- # 所有层级都失败
388
+ # 所有层级都失败,系统搜索成功率较低
386
389
  return {
387
390
  "data": [],
388
391
  "status": "error",
@@ -19,6 +19,7 @@ from ..templates.template_manager import TemplateManager
19
19
  from .managers.config_manager import AIForgeConfigManager
20
20
  from ..strategies.parameter_mapping_service import ParameterMappingService
21
21
  from ..execution.engine import AIForgeExecutionEngine
22
+ from .managers.content_generation_manager import AIForgeContentGenerationManager
22
23
 
23
24
 
24
25
  class AIForgeOrchestrator:
@@ -55,6 +56,7 @@ class AIForgeOrchestrator:
55
56
  self._init_execution_manager()
56
57
  self._init_template_manager()
57
58
  self._init_search_manager()
59
+ self._init_content_generation_manager()
58
60
 
59
61
  self._initialized = True
60
62
 
@@ -133,6 +135,12 @@ class AIForgeOrchestrator:
133
135
  execution_engine = AIForgeExecutionEngine(self.components)
134
136
  self.components["execution_engine"] = execution_engine
135
137
 
138
+ def _init_content_generation_manager(self):
139
+ """初始化内容生成管理器"""
140
+ self.components["content_generation_manager"] = AIForgeContentGenerationManager(
141
+ self.components
142
+ )
143
+
136
144
  def _init_adapters(self):
137
145
  """初始化适配器"""
138
146
  self.components["ui_adapter"] = None # 延迟初始化
@@ -300,13 +300,13 @@ __result__ = execute_task({param_analysis['call_args']})
300
300
  def get_base_prompt_sections() -> Dict[str, str]:
301
301
  """构建基础提示词各个部分"""
302
302
  return {
303
- "role": "你是 AIForge 智能任务分析器,负责理解用户指令并分析完成任务所需的必要信息。",
303
+ "role": "你是 AIForge 智能任务分析器,负责理解用户指令并分析完成任务所需的必要信息以及预期结果",
304
304
  "execution_mode": """
305
305
  - 直接响应:AI知识可直接完成,无需最新数据,包括对话延续和情感支持
306
306
  - 代码生成:需要外部数据源、实时信息或系统交互
307
307
  """,
308
308
  "analysis_steps": """
309
- - 识别任务类型和执行模式
309
+ - 识别执行模式和任务类型
310
310
  - 提取关键参数和数量要求,设置合适的 min_items
311
311
  - 定义必需字段和验证规则
312
312
  - "获取/查找/搜索"某类信息的非任务型指令,仅提取一个required_parameters参数search_query=原始指令
@@ -20,6 +20,15 @@ class ParameterMappingService:
20
20
 
21
21
  def _extract_with_strategy(self, param_name: str, available_params: Dict[str, Any]) -> Any:
22
22
  """使用策略提取参数值"""
23
+
24
+ # 1. 首先尝试精确匹配
25
+ if param_name in available_params:
26
+ param_value = available_params[param_name]
27
+ if isinstance(param_value, dict) and "value" in param_value:
28
+ return param_value["value"]
29
+ return param_value
30
+
31
+ # 2. 然后使用策略匹配
23
32
  for strategy in self.strategies:
24
33
  if strategy.can_handle(param_name):
25
34
  result = strategy.map_parameter(param_name, available_params)
@@ -136,7 +145,7 @@ class ParameterMappingService:
136
145
  "timeout": 30,
137
146
  "limit": 10,
138
147
  "min_abstract_len": 300,
139
- "max_abstract_len": 500,
148
+ "max_abstract_len": 1000,
140
149
  "page_size": 20,
141
150
  "retry_count": 3,
142
151
  "query": "",
@@ -168,7 +177,6 @@ class ParameterMappingService:
168
177
  """专门用于搜索参数提取的方法"""
169
178
  parameters = standardized_instruction.get("required_parameters", {})
170
179
  expected_output = standardized_instruction.get("expected_output", {})
171
-
172
180
  # 使用现有的映射策略
173
181
  search_query = (
174
182
  self._extract_with_strategy("search_query", parameters) or original_instruction
@@ -209,7 +217,7 @@ class ParameterMappingService:
209
217
  "max_results": max_results,
210
218
  "min_items": min_items,
211
219
  "min_abstract_len": self._extract_with_strategy("min_abstract_len", parameters) or 300,
212
- "max_abstract_len": self._extract_with_strategy("max_abstract_len", parameters) or 500,
220
+ "max_abstract_len": self._extract_with_strategy("max_abstract_len", parameters) or 1000,
213
221
  }
214
222
 
215
223
 
@@ -265,6 +273,15 @@ class SearchParameterMappingStrategy(ParameterMappingStrategy):
265
273
  # max_results 只接受明确表示"最大"语义的参数,不包括 quantity
266
274
  "max_results": ["max_results", "max_limit", "max_count", "max_size"],
267
275
  "min_items": ["min_items", "min_count", "quantity"],
276
+ "min_abstract_len": [
277
+ "min_abstract_len",
278
+ "min_content_len",
279
+ "min_article_len",
280
+ "abstract_len",
281
+ "content_len",
282
+ "article_len",
283
+ ],
284
+ "max_abstract_len": ["max_abstract_len", "max_content_len", "max_article_len"],
268
285
  }
269
286
 
270
287
  candidates = mappings.get(param_name, [])