Repository: antgroup/agentUniverse (language: python)

Issue:
Refactor: the original prompt util methods & the handle_prompt method of the planner, etc
Refactor:
1. [Refactor: the code structure of the original prompt util methods]
2. [Refactor: the code structure of the default agents in agentUniverse]
3. [Refactor: the handle_prompt method of the planner in agentUniverse]
4. [Refactor: the prompt files in sample_standard_app package of agentUniverse]


Discussion / hints:

Fix patch:
diff --git a/README.md b/README.md
index c1da65e8..e3c5326b 100644
--- a/README.md
+++ b/README.md
@@ -47,13 +47,15 @@ For details, please read [Quick Start](docs/guidebook/en/1_3_Quick_Start.md).
 ## Guidebook
 For more detailed information, please refer to the [Guidebook](docs/guidebook/en/0_index.md).
 
+## API Reference
+[readthedocs](https://agentuniverse.readthedocs.io/en/latest/)
+
 ## More Ways to Contact Us
 * github: https://github.com/alipay/agentUniverse
 * gitee: https://gitee.com/agentUniverse/agentUniverse
 * gitcode: https://gitcode.com/agentUniverse
 * Stack Overflow: https://stackoverflowteams.com/c/agentuniverse/questions
 * Discord: https://discord.gg/VfhEvJzQ
-* reddit: https://www.reddit.com/r/agentUniverse/
 * WeChat Official Account: agentUniverse智多星
 * DingTalk Group:
 ![](./docs/guidebook/_picture/dingtalk_util20250429.png)
\ No newline at end of file
diff --git a/README_zh.md b/README_zh.md
index fccf9c5a..2ec569ca 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -50,13 +50,15 @@ pip install agentUniverse
 ## 用户指南
 更多详细信息，请参阅[指南](docs/guidebook/zh/0_%E7%9B%AE%E5%BD%95.md) 。
 
+## API 参考
+[readthedocs](https://agentuniverse.readthedocs.io/en/latest/)
+
 ## 更多方式联系我们
 * github: https://github.com/alipay/agentUniverse
 * gitee: https://gitee.com/agentUniverse/agentUniverse
 * gitcode: https://gitcode.com/agentUniverse
 * Stack Overflow: https://stackoverflowteams.com/c/agentuniverse/questions
 * Discord: https://discord.gg/VfhEvJzQ
-* reddit: https://www.reddit.com/r/agentUniverse/
 * 微信公众号: agentUniverse智多星
 * 钉钉答疑群:
 ![](./docs/guidebook/_picture/dingtalk_util20250429.png)
\ No newline at end of file
diff --git a/agentuniverse/agent/default/executing_agent/__init__.py b/agentuniverse/agent/default/executing_agent/__init__.py
new file mode 100644
index 00000000..786c85af
--- /dev/null
+++ b/agentuniverse/agent/default/executing_agent/__init__.py
@@ -0,0 +1,7 @@
+# !/usr/bin/env python3
+# -*- coding:utf-8 -*-
+
+# @Time    : 2024/5/7 14:34
+# @Author  : wangchongshi
+# @Email   : wangchongshi.wcs@antgroup.com
+# @FileName: __init__.py.py
diff --git a/agentuniverse/agent/plan/planner/executing_planner/default_cn_prompt.yaml b/agentuniverse/agent/default/executing_agent/default_cn_prompt.yaml
similarity index 96%
rename from agentuniverse/agent/plan/planner/executing_planner/default_cn_prompt.yaml
rename to agentuniverse/agent/default/executing_agent/default_cn_prompt.yaml
index 8f3f1c88..7afde9c5 100644
--- a/agentuniverse/agent/plan/planner/executing_planner/default_cn_prompt.yaml
+++ b/agentuniverse/agent/default/executing_agent/default_cn_prompt.yaml
@@ -28,4 +28,4 @@ instruction: |
   让我们一步一步来。
 metadata:
   type: 'PROMPT'
-  version: 'executing_planner.default_cn'
+  version: 'default_executing_agent.cn'
diff --git a/agentuniverse/agent/plan/planner/executing_planner/default_en_prompt.yaml b/agentuniverse/agent/default/executing_agent/default_en_prompt.yaml
similarity index 97%
rename from agentuniverse/agent/plan/planner/executing_planner/default_en_prompt.yaml
rename to agentuniverse/agent/default/executing_agent/default_en_prompt.yaml
index 6b7f79d0..3f9acfa8 100644
--- a/agentuniverse/agent/plan/planner/executing_planner/default_en_prompt.yaml
+++ b/agentuniverse/agent/default/executing_agent/default_en_prompt.yaml
@@ -28,4 +28,4 @@ instruction: |
   Let's take it step by step.
 metadata:
   type: 'PROMPT'
-  version: 'executing_planner.default_en'
+  version: 'default_executing_agent.en'
diff --git a/agentuniverse/agent/default/executing_agent.py b/agentuniverse/agent/default/executing_agent/executing_agent.py
similarity index 97%
rename from agentuniverse/agent/default/executing_agent.py
rename to agentuniverse/agent/default/executing_agent/executing_agent.py
index 639fb44a..6364beee 100644
--- a/agentuniverse/agent/default/executing_agent.py
+++ b/agentuniverse/agent/default/executing_agent/executing_agent.py
@@ -37,6 +37,7 @@ def parse_input(self, input_object: InputObject, planner_input: dict) -> dict:
         """
         planner_input['input'] = input_object.get_data('input')
         planner_input['framework'] = input_object.get_data('planning_result').get_data('framework')
+        self.agent_model.profile.setdefault('prompt_version', 'default_executing_agent.cn')
         return planner_input
 
     def parse_result(self, planner_result: dict) -> dict:
diff --git a/agentuniverse/agent/default/executing_agent.yaml b/agentuniverse/agent/default/executing_agent/executing_agent.yaml
similarity index 81%
rename from agentuniverse/agent/default/executing_agent.yaml
rename to agentuniverse/agent/default/executing_agent/executing_agent.yaml
index 341c126c..fd77649e 100644
--- a/agentuniverse/agent/default/executing_agent.yaml
+++ b/agentuniverse/agent/default/executing_agent/executing_agent.yaml
@@ -15,5 +15,5 @@ memory:
 action:
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.executing_agent'
+  module: 'agentuniverse.agent.default.executing_agent.executing_agent'
   class: 'ExecutingAgent'
\ No newline at end of file
diff --git a/agentuniverse/agent/default/expressing_agent/__init__.py b/agentuniverse/agent/default/expressing_agent/__init__.py
new file mode 100644
index 00000000..6ef78edc
--- /dev/null
+++ b/agentuniverse/agent/default/expressing_agent/__init__.py
@@ -0,0 +1,7 @@
+# !/usr/bin/env python3
+# -*- coding:utf-8 -*-
+
+# @Time    : 2024/5/7 14:35
+# @Author  : wangchongshi
+# @Email   : wangchongshi.wcs@antgroup.com
+# @FileName: __init__.py.py
diff --git a/agentuniverse/agent/plan/planner/expressing_planner/default_cn_prompt.yaml b/agentuniverse/agent/default/expressing_agent/default_cn_prompt.yaml
similarity index 97%
rename from agentuniverse/agent/plan/planner/expressing_planner/default_cn_prompt.yaml
rename to agentuniverse/agent/default/expressing_agent/default_cn_prompt.yaml
index 0e649065..99e43807 100644
--- a/agentuniverse/agent/plan/planner/expressing_planner/default_cn_prompt.yaml
+++ b/agentuniverse/agent/default/expressing_agent/default_cn_prompt.yaml
@@ -22,4 +22,4 @@ instruction: |
   请根据规则要求做出回答。
 metadata:
   type: 'PROMPT'
-  version: 'expressing_planner.default_cn'
+  version: 'default_expressing_agent.cn'
diff --git a/agentuniverse/agent/plan/planner/expressing_planner/default_en_prompt.yaml b/agentuniverse/agent/default/expressing_agent/default_en_prompt.yaml
similarity index 97%
rename from agentuniverse/agent/plan/planner/expressing_planner/default_en_prompt.yaml
rename to agentuniverse/agent/default/expressing_agent/default_en_prompt.yaml
index b5967764..7c5b3dc4 100644
--- a/agentuniverse/agent/plan/planner/expressing_planner/default_en_prompt.yaml
+++ b/agentuniverse/agent/default/expressing_agent/default_en_prompt.yaml
@@ -22,4 +22,4 @@ instruction: |
   Please provide your response according to to these rules.
 metadata:
   type: 'PROMPT'
-  version: 'expressing_planner.default_en'
+  version: 'default_expressing_agent.en'
diff --git a/agentuniverse/agent/default/expressing_agent.py b/agentuniverse/agent/default/expressing_agent/expressing_agent.py
similarity index 95%
rename from agentuniverse/agent/default/expressing_agent.py
rename to agentuniverse/agent/default/expressing_agent/expressing_agent.py
index 8d51c275..a41c2ab9 100644
--- a/agentuniverse/agent/default/expressing_agent.py
+++ b/agentuniverse/agent/default/expressing_agent/expressing_agent.py
@@ -31,6 +31,7 @@ def parse_input(self, input_object: InputObject, planner_input: dict) -> dict:
         """
         planner_input['input'] = input_object.get_data('input')
         planner_input['background'] = self.build_background(input_object)
+        self.agent_model.profile.setdefault('prompt_version', 'default_expressing_agent.cn')
         return planner_input
 
     def parse_result(self, planner_result: dict) -> dict:
diff --git a/agentuniverse/agent/default/expressing_agent.yaml b/agentuniverse/agent/default/expressing_agent/expressing_agent.yaml
similarity index 80%
rename from agentuniverse/agent/default/expressing_agent.yaml
rename to agentuniverse/agent/default/expressing_agent/expressing_agent.yaml
index c2b14526..3b5bbc20 100644
--- a/agentuniverse/agent/default/expressing_agent.yaml
+++ b/agentuniverse/agent/default/expressing_agent/expressing_agent.yaml
@@ -14,5 +14,5 @@ memory:
   name: ''
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.expressing_agent'
+  module: 'agentuniverse.agent.default.expressing_agent.expressing_agent'
   class: 'ExpressingAgent'
\ No newline at end of file
diff --git a/agentuniverse/agent/default/peer_agent/__init__.py b/agentuniverse/agent/default/peer_agent/__init__.py
new file mode 100644
index 00000000..6ef78edc
--- /dev/null
+++ b/agentuniverse/agent/default/peer_agent/__init__.py
@@ -0,0 +1,7 @@
+# !/usr/bin/env python3
+# -*- coding:utf-8 -*-
+
+# @Time    : 2024/5/7 14:35
+# @Author  : wangchongshi
+# @Email   : wangchongshi.wcs@antgroup.com
+# @FileName: __init__.py.py
diff --git a/agentuniverse/agent/default/peer_agent.py b/agentuniverse/agent/default/peer_agent/peer_agent.py
similarity index 100%
rename from agentuniverse/agent/default/peer_agent.py
rename to agentuniverse/agent/default/peer_agent/peer_agent.py
diff --git a/agentuniverse/agent/default/peer_agent.yaml b/agentuniverse/agent/default/peer_agent/peer_agent.yaml
similarity index 83%
rename from agentuniverse/agent/default/peer_agent.yaml
rename to agentuniverse/agent/default/peer_agent/peer_agent.yaml
index 75e16fd6..2410d97b 100644
--- a/agentuniverse/agent/default/peer_agent.yaml
+++ b/agentuniverse/agent/default/peer_agent/peer_agent.yaml
@@ -12,5 +12,5 @@ plan:
     reviewing: 'ReviewingAgent'
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.peer_agent'
+  module: 'agentuniverse.agent.default.peer_agent.peer_agent'
   class: 'PeerAgent'
\ No newline at end of file
diff --git a/agentuniverse/agent/default/planning_agent/__init__.py b/agentuniverse/agent/default/planning_agent/__init__.py
new file mode 100644
index 00000000..f7fe7349
--- /dev/null
+++ b/agentuniverse/agent/default/planning_agent/__init__.py
@@ -0,0 +1,7 @@
+# !/usr/bin/env python3
+# -*- coding:utf-8 -*-
+
+# @Time    : 2024/5/7 14:36
+# @Author  : wangchongshi
+# @Email   : wangchongshi.wcs@antgroup.com
+# @FileName: __init__.py.py
diff --git a/agentuniverse/agent/plan/planner/planning_planner/default_cn_prompt.yaml b/agentuniverse/agent/default/planning_agent/default_cn_prompt.yaml
similarity index 96%
rename from agentuniverse/agent/plan/planner/planning_planner/default_cn_prompt.yaml
rename to agentuniverse/agent/default/planning_agent/default_cn_prompt.yaml
index 4f82ce34..6464b66a 100644
--- a/agentuniverse/agent/plan/planner/planning_planner/default_cn_prompt.yaml
+++ b/agentuniverse/agent/default/planning_agent/default_cn_prompt.yaml
@@ -27,4 +27,4 @@ instruction: |
   需要回答的问题是: {input}
 metadata:
   type: 'PROMPT'
-  version: 'planning_planner.default_cn'
+  version: 'default_planning_agent.cn'
diff --git a/agentuniverse/agent/plan/planner/planning_planner/default_en_prompt.yaml b/agentuniverse/agent/default/planning_agent/default_en_prompt.yaml
similarity index 97%
rename from agentuniverse/agent/plan/planner/planning_planner/default_en_prompt.yaml
rename to agentuniverse/agent/default/planning_agent/default_en_prompt.yaml
index 8029a09d..06bdf1d2 100644
--- a/agentuniverse/agent/plan/planner/planning_planner/default_en_prompt.yaml
+++ b/agentuniverse/agent/default/planning_agent/default_en_prompt.yaml
@@ -27,4 +27,4 @@ instruction: |
   The question that needs to be answered is: {input}
 metadata:
   type: 'PROMPT'
-  version: 'planning_planner.default_en'
+  version: 'default_planning_agent.en'
diff --git a/agentuniverse/agent/default/planning_agent.py b/agentuniverse/agent/default/planning_agent/planning_agent.py
similarity index 94%
rename from agentuniverse/agent/default/planning_agent.py
rename to agentuniverse/agent/default/planning_agent/planning_agent.py
index ead5576e..33ab76d7 100644
--- a/agentuniverse/agent/default/planning_agent.py
+++ b/agentuniverse/agent/default/planning_agent/planning_agent.py
@@ -32,6 +32,7 @@ def parse_input(self, input_object: InputObject, planner_input: dict) -> dict:
         """
         planner_input['input'] = input_object.get_data('input')
         planner_input['expert_framework'] = input_object.get_data('expert_framework')
+        self.agent_model.profile.setdefault('prompt_version', 'default_planning_agent.cn')
         return planner_input
 
     def parse_result(self, planner_result: dict) -> dict:
diff --git a/agentuniverse/agent/default/planning_agent.yaml b/agentuniverse/agent/default/planning_agent/planning_agent.yaml
similarity index 81%
rename from agentuniverse/agent/default/planning_agent.yaml
rename to agentuniverse/agent/default/planning_agent/planning_agent.yaml
index 2743b58c..f4ba480d 100644
--- a/agentuniverse/agent/default/planning_agent.yaml
+++ b/agentuniverse/agent/default/planning_agent/planning_agent.yaml
@@ -14,5 +14,5 @@ memory:
   name: ''
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.planning_agent'
+  module: 'agentuniverse.agent.default.planning_agent.planning_agent'
   class: 'PlanningAgent'
\ No newline at end of file
diff --git a/agentuniverse/agent/default/rag_agent/__init__.py b/agentuniverse/agent/default/rag_agent/__init__.py
new file mode 100644
index 00000000..6ef78edc
--- /dev/null
+++ b/agentuniverse/agent/default/rag_agent/__init__.py
@@ -0,0 +1,7 @@
+# !/usr/bin/env python3
+# -*- coding:utf-8 -*-
+
+# @Time    : 2024/5/7 14:35
+# @Author  : wangchongshi
+# @Email   : wangchongshi.wcs@antgroup.com
+# @FileName: __init__.py.py
diff --git a/agentuniverse/agent/plan/planner/rag_planner/default_cn_prompt.yaml b/agentuniverse/agent/default/rag_agent/default_cn_prompt.yaml
similarity index 95%
rename from agentuniverse/agent/plan/planner/rag_planner/default_cn_prompt.yaml
rename to agentuniverse/agent/default/rag_agent/default_cn_prompt.yaml
index 3f4adbc6..5e3e2447 100644
--- a/agentuniverse/agent/plan/planner/rag_planner/default_cn_prompt.yaml
+++ b/agentuniverse/agent/default/rag_agent/default_cn_prompt.yaml
@@ -21,4 +21,4 @@ instruction: |
   需要回答的问题是: {input}
 metadata:
   type: 'PROMPT'
-  version: 'rag_planner.default_cn'
+  version: 'default_rag_agent.cn'
diff --git a/agentuniverse/agent/plan/planner/rag_planner/default_en_prompt.yaml b/agentuniverse/agent/default/rag_agent/default_en_prompt.yaml
similarity index 95%
rename from agentuniverse/agent/plan/planner/rag_planner/default_en_prompt.yaml
rename to agentuniverse/agent/default/rag_agent/default_en_prompt.yaml
index cbd8d503..2812deb7 100644
--- a/agentuniverse/agent/plan/planner/rag_planner/default_en_prompt.yaml
+++ b/agentuniverse/agent/default/rag_agent/default_en_prompt.yaml
@@ -21,4 +21,4 @@ instruction: |
   The question that needs to be answered is: {input}
 metadata:
   type: 'PROMPT'
-  version: 'rag_planner.default_en'
+  version: 'default_rag_agent.en'
diff --git a/agentuniverse/agent/default/rag_agent.py b/agentuniverse/agent/default/rag_agent/rag_agent.py
similarity index 93%
rename from agentuniverse/agent/default/rag_agent.py
rename to agentuniverse/agent/default/rag_agent/rag_agent.py
index a2587814..75b35ec1 100644
--- a/agentuniverse/agent/default/rag_agent.py
+++ b/agentuniverse/agent/default/rag_agent/rag_agent.py
@@ -31,6 +31,7 @@ def parse_input(self, input_object: InputObject, planner_input: dict) -> dict:
         """
         input = input_object.get_data('input')
         planner_input['input'] = input
+        self.agent_model.profile.setdefault('prompt_version', 'default_rag_agent.cn')
         return planner_input
 
     def parse_result(self, planner_result: dict) -> dict:
diff --git a/agentuniverse/agent/default/rag_agent.yaml b/agentuniverse/agent/default/rag_agent/rag_agent.yaml
similarity index 79%
rename from agentuniverse/agent/default/rag_agent.yaml
rename to agentuniverse/agent/default/rag_agent/rag_agent.yaml
index f5cd3d27..67f2d46a 100644
--- a/agentuniverse/agent/default/rag_agent.yaml
+++ b/agentuniverse/agent/default/rag_agent/rag_agent.yaml
@@ -11,5 +11,5 @@ plan:
     name: 'rag_planner'
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.rag_agent'
+  module: 'agentuniverse.agent.default.rag_agent.rag_agent'
   class: 'RagAgent'
\ No newline at end of file
diff --git a/agentuniverse/agent/default/reviewing_agent/__init__.py b/agentuniverse/agent/default/reviewing_agent/__init__.py
new file mode 100644
index 00000000..ceb3bc78
--- /dev/null
+++ b/agentuniverse/agent/default/reviewing_agent/__init__.py
@@ -0,0 +1,7 @@
+# !/usr/bin/env python3
+# -*- coding:utf-8 -*-
+
+# @Time    : 2024/5/7 14:44
+# @Author  : wangchongshi
+# @Email   : wangchongshi.wcs@antgroup.com
+# @FileName: __init__.py.py
diff --git a/agentuniverse/agent/plan/planner/reviewing_planner/default_cn_prompt.yaml b/agentuniverse/agent/default/reviewing_agent/default_cn_prompt.yaml
similarity index 96%
rename from agentuniverse/agent/plan/planner/reviewing_planner/default_cn_prompt.yaml
rename to agentuniverse/agent/default/reviewing_agent/default_cn_prompt.yaml
index c40559af..e4126921 100644
--- a/agentuniverse/agent/plan/planner/reviewing_planner/default_cn_prompt.yaml
+++ b/agentuniverse/agent/default/reviewing_agent/default_cn_prompt.yaml
@@ -25,4 +25,4 @@ instruction: |
   给出的答案是: {expressing_result}
 metadata:
   type: 'PROMPT'
-  version: 'reviewing_planner.default_cn'
+  version: 'default_reviewing_agent.cn'
diff --git a/agentuniverse/agent/plan/planner/reviewing_planner/default_en_prompt.yaml b/agentuniverse/agent/default/reviewing_agent/default_en_prompt.yaml
similarity index 96%
rename from agentuniverse/agent/plan/planner/reviewing_planner/default_en_prompt.yaml
rename to agentuniverse/agent/default/reviewing_agent/default_en_prompt.yaml
index 516a9403..d37d1f11 100644
--- a/agentuniverse/agent/plan/planner/reviewing_planner/default_en_prompt.yaml
+++ b/agentuniverse/agent/default/reviewing_agent/default_en_prompt.yaml
@@ -25,4 +25,4 @@ instruction: |
   The provided answer is: {expressing_result}
 metadata:
   type: 'PROMPT'
-  version: 'reviewing_planner.default_en'
+  version: 'default_reviewing_agent.en'
diff --git a/agentuniverse/agent/default/reviewing_agent.py b/agentuniverse/agent/default/reviewing_agent/reviewing_agent.py
similarity index 95%
rename from agentuniverse/agent/default/reviewing_agent.py
rename to agentuniverse/agent/default/reviewing_agent/reviewing_agent.py
index 91f21041..faddbe05 100644
--- a/agentuniverse/agent/default/reviewing_agent.py
+++ b/agentuniverse/agent/default/reviewing_agent/reviewing_agent.py
@@ -32,6 +32,7 @@ def parse_input(self, input_object: InputObject, planner_input: dict) -> dict:
         """
         planner_input['input'] = input_object.get_data('input')
         planner_input['expressing_result'] = input_object.get_data('expressing_result').get_data('output')
+        self.agent_model.profile.setdefault('prompt_version', 'default_reviewing_agent.cn')
         return planner_input
 
     def parse_result(self, planner_result: dict) -> dict:
diff --git a/agentuniverse/agent/default/reviewing_agent.yaml b/agentuniverse/agent/default/reviewing_agent/reviewing_agent.yaml
similarity index 80%
rename from agentuniverse/agent/default/reviewing_agent.yaml
rename to agentuniverse/agent/default/reviewing_agent/reviewing_agent.yaml
index f895cf61..7281d461 100644
--- a/agentuniverse/agent/default/reviewing_agent.yaml
+++ b/agentuniverse/agent/default/reviewing_agent/reviewing_agent.yaml
@@ -14,5 +14,5 @@ memory:
   name: ''
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.reviewing_agent'
+  module: 'agentuniverse.agent.default.reviewing_agent.reviewing_agent'
   class: 'ReviewingAgent'
\ No newline at end of file
diff --git a/agentuniverse/agent/plan/planner/executing_planner/executing_planner.py b/agentuniverse/agent/plan/planner/executing_planner/executing_planner.py
index b35ea313..b2885900 100644
--- a/agentuniverse/agent/plan/planner/executing_planner/executing_planner.py
+++ b/agentuniverse/agent/plan/planner/executing_planner/executing_planner.py
@@ -36,7 +36,7 @@ def invoke(self, agent_model: AgentModel, planner_input: dict, input_object: Inp
 
         memory: BaseMemory = self.handle_memory(agent_model, planner_input)
 
-        self.handle_action(agent_model, planner_input, input_object)
+        self.handle_all_actions(agent_model, planner_input, input_object)
 
         llm: LLM = self.handle_llm(agent_model)
 
@@ -60,22 +60,27 @@ def handle_prompt(self, agent_model: AgentModel, planner_input: dict) -> Prompt:
 
         profile: dict = agent_model.profile
 
-        origin_instruction = profile.get('instruction')
-        user_instruction = expert_framework + origin_instruction if origin_instruction else origin_instruction
+        profile_instruction = profile.get('instruction')
+        profile_instruction = expert_framework + profile_instruction if profile_instruction else profile_instruction
 
-        user_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
-                                                               target=profile.get('target'),
-                                                               instruction=user_instruction)
+        profile_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
+                                                                  target=profile.get('target'),
+                                                                  instruction=profile_instruction)
 
         # get the prompt by the prompt version
-        prompt_version: str = profile.get('prompt_version') or 'executing_planner.default_cn'
-        prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
-
-        system_prompt_model: AgentPromptModel = AgentPromptModel(introduction=prompt.introduction,
-                                                                 target=prompt.target,
-                                                                 instruction=expert_framework + prompt.instruction)
-
-        prompt: Prompt = Prompt().build_prompt(user_prompt_model, system_prompt_model,
-                                               self.prompt_assemble_order)
+        prompt_version: str = profile.get('prompt_version')
+        version_prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
+
+        if version_prompt is None and not profile_prompt_model:
+            raise Exception("Either the `prompt_version` or `introduction & target & instruction`"
+                            " in agent profile configuration should be provided.")
+        if version_prompt:
+            version_prompt_model: AgentPromptModel = AgentPromptModel(
+                introduction=getattr(version_prompt, 'introduction', ''),
+                target=getattr(version_prompt, 'target', ''),
+                instruction=expert_framework + getattr(version_prompt, 'instruction', ''))
+            profile_prompt_model = profile_prompt_model + version_prompt_model
+
+        prompt: Prompt = Prompt().build_prompt(profile_prompt_model, self.prompt_assemble_order)
         process_llm_token(prompt.as_langchain(), profile, planner_input)
         return prompt
diff --git a/agentuniverse/agent/plan/planner/expressing_planner/expressing_planner.py b/agentuniverse/agent/plan/planner/expressing_planner/expressing_planner.py
index eb2ffc44..ca5cf4c5 100644
--- a/agentuniverse/agent/plan/planner/expressing_planner/expressing_planner.py
+++ b/agentuniverse/agent/plan/planner/expressing_planner/expressing_planner.py
@@ -58,22 +58,28 @@ def handle_prompt(self, agent_model: AgentModel, planner_input: dict) -> Prompt:
 
         profile: dict = agent_model.profile
 
-        origin_instruction = profile.get('instruction')
-        user_instruction = expert_framework + origin_instruction if origin_instruction else origin_instruction
+        profile_instruction = profile.get('instruction')
+        profile_instruction = expert_framework + profile_instruction if profile_instruction else profile_instruction
 
-        user_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
-                                                               target=profile.get('target'),
-                                                               instruction=user_instruction)
+        profile_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
+                                                                  target=profile.get('target'),
+                                                                  instruction=profile_instruction)
 
         # get the prompt by the prompt version
-        prompt_version: str = profile.get('prompt_version') or 'expressing_planner.default_cn'
-        prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
+        prompt_version: str = profile.get('prompt_version')
+        version_prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
 
-        system_prompt_model: AgentPromptModel = AgentPromptModel(introduction=prompt.introduction,
-                                                                 target=prompt.target,
-                                                                 instruction=expert_framework + prompt.instruction)
+        if version_prompt is None and not profile_prompt_model:
+            raise Exception("Either the `prompt_version` or `introduction & target & instruction`"
+                            " in agent profile configuration should be provided.")
+        if version_prompt:
+            version_prompt_model: AgentPromptModel = AgentPromptModel(
+                introduction=getattr(version_prompt, 'introduction', ''),
+                target=getattr(version_prompt, 'target', ''),
+                instruction=expert_framework + getattr(version_prompt, 'instruction', ''))
+            profile_prompt_model = profile_prompt_model + version_prompt_model
+
+        prompt = Prompt().build_prompt(profile_prompt_model, self.prompt_assemble_order)
 
-        prompt: Prompt = Prompt().build_prompt(user_prompt_model, system_prompt_model,
-                                               self.prompt_assemble_order)
         process_llm_token(prompt.as_langchain(), profile, planner_input)
         return prompt
diff --git a/agentuniverse/agent/plan/planner/planner.py b/agentuniverse/agent/plan/planner/planner.py
index 62fe1ad8..9bf1aa0f 100644
--- a/agentuniverse/agent/plan/planner/planner.py
+++ b/agentuniverse/agent/plan/planner/planner.py
@@ -92,8 +92,8 @@ def handle_memory(self, agent_model: AgentModel, planner_input: dict) -> BaseMem
         planner_input['chat_history'] = langchain_memory.load_memory_str
         return langchain_memory
 
-    def handle_action(self, agent_model: AgentModel, planner_input: dict, input_object: InputObject):
-        """Tool or knowledge processing.
+    def handle_all_actions(self, agent_model: AgentModel, planner_input: dict, input_object: InputObject):
+        """Tool and knowledge processing.
 
         Args:
             agent_model (AgentModel): Agent model object.
diff --git a/agentuniverse/agent/plan/planner/planning_planner/planning_planner.py b/agentuniverse/agent/plan/planner/planning_planner/planning_planner.py
index 82f224bb..f47ae002 100644
--- a/agentuniverse/agent/plan/planner/planning_planner/planning_planner.py
+++ b/agentuniverse/agent/plan/planner/planning_planner/planning_planner.py
@@ -59,21 +59,27 @@ def handle_prompt(self, agent_model: AgentModel, planner_input: dict) -> Prompt:
 
         profile: dict = agent_model.profile
 
-        origin_instruction = profile.get('instruction')
-        user_instruction = expert_framework + origin_instruction if origin_instruction else origin_instruction
+        profile_instruction = profile.get('instruction')
+        profile_instruction = expert_framework + profile_instruction if profile_instruction else profile_instruction
 
-        user_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
-                                                               target=profile.get('target'),
-                                                               instruction=user_instruction)
+        profile_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
+                                                                  target=profile.get('target'),
+                                                                  instruction=profile_instruction)
 
         # get the prompt by the prompt version
-        prompt_version: str = profile.get('prompt_version') or 'planning_planner.default_cn'
-        prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
-
-        system_prompt_model: AgentPromptModel = AgentPromptModel(introduction=prompt.introduction,
-                                                                 target=prompt.target,
-                                                                 instruction=expert_framework + prompt.instruction)
-        prompt = Prompt().build_prompt(user_prompt_model, system_prompt_model,
-                                       self.prompt_assemble_order)
+        prompt_version: str = profile.get('prompt_version')
+        version_prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
+
+        if version_prompt is None and not profile_prompt_model:
+            raise Exception("Either the `prompt_version` or `introduction & target & instruction`"
+                            " in agent profile configuration should be provided.")
+        if version_prompt:
+            version_prompt_model: AgentPromptModel = AgentPromptModel(
+                introduction=getattr(version_prompt, 'introduction', ''),
+                target=getattr(version_prompt, 'target', ''),
+                instruction=expert_framework + getattr(version_prompt, 'instruction', ''))
+            profile_prompt_model = profile_prompt_model + version_prompt_model
+
+        prompt = Prompt().build_prompt(profile_prompt_model, self.prompt_assemble_order)
         process_llm_token(prompt.as_langchain(), profile, planner_input)
         return prompt
diff --git a/agentuniverse/agent/plan/planner/rag_planner/rag_planner.py b/agentuniverse/agent/plan/planner/rag_planner/rag_planner.py
index 90032f55..b8ac8c28 100644
--- a/agentuniverse/agent/plan/planner/rag_planner/rag_planner.py
+++ b/agentuniverse/agent/plan/planner/rag_planner/rag_planner.py
@@ -36,7 +36,7 @@ def invoke(self, agent_model: AgentModel, planner_input: dict,
         """
         memory: BaseMemory = self.handle_memory(agent_model, planner_input)
 
-        self.handle_action(agent_model, planner_input, input_object)
+        self.handle_all_actions(agent_model, planner_input, input_object)
 
         llm: LLM = self.handle_llm(agent_model)
 
@@ -58,19 +58,24 @@ def handle_prompt(self, agent_model: AgentModel, planner_input: dict) -> Prompt:
         """
         profile: dict = agent_model.profile
 
-        user_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
-                                                               target=profile.get('target'),
-                                                               instruction=profile.get('instruction'))
+        profile_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
+                                                                  target=profile.get('target'),
+                                                                  instruction=profile.get('instruction'))
 
         # get the prompt by the prompt version
-        prompt_version: str = profile.get('prompt_version') or 'rag_planner.default_cn'
-        prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
-
-        system_prompt_model: AgentPromptModel = AgentPromptModel(introduction=prompt.introduction,
-                                                                 target=prompt.target,
-                                                                 instruction=prompt.instruction)
-
-        prompt = Prompt().build_prompt(user_prompt_model, system_prompt_model,
-                                       self.prompt_assemble_order)
+        prompt_version: str = profile.get('prompt_version')
+        version_prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
+
+        if version_prompt is None and not profile_prompt_model:
+            raise Exception("Either the `prompt_version` or `introduction & target & instruction`"
+                            " in agent profile configuration should be provided.")
+        if version_prompt:
+            version_prompt_model: AgentPromptModel = AgentPromptModel(
+                introduction=getattr(version_prompt, 'introduction', ''),
+                target=getattr(version_prompt, 'target', ''),
+                instruction=getattr(version_prompt, 'instruction', ''))
+            profile_prompt_model = profile_prompt_model + version_prompt_model
+
+        prompt = Prompt().build_prompt(profile_prompt_model, self.prompt_assemble_order)
         process_llm_token(prompt.as_langchain(), profile, planner_input)
         return prompt
diff --git a/agentuniverse/agent/plan/planner/reviewing_planner/reviewing_planner.py b/agentuniverse/agent/plan/planner/reviewing_planner/reviewing_planner.py
index c470b04d..b4b92b38 100644
--- a/agentuniverse/agent/plan/planner/reviewing_planner/reviewing_planner.py
+++ b/agentuniverse/agent/plan/planner/reviewing_planner/reviewing_planner.py
@@ -58,22 +58,27 @@ def handle_prompt(self, agent_model: AgentModel, planner_input: dict) -> Prompt:
 
         profile: dict = agent_model.profile
 
-        origin_instruction = profile.get('instruction')
-        user_instruction = expert_framework + origin_instruction if origin_instruction else origin_instruction
+        profile_instruction = profile.get('instruction')
+        profile_instruction = expert_framework + profile_instruction if profile_instruction else profile_instruction
 
-        user_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
-                                                               target=profile.get('target'),
-                                                               instruction=user_instruction)
+        profile_prompt_model: AgentPromptModel = AgentPromptModel(introduction=profile.get('introduction'),
+                                                                  target=profile.get('target'),
+                                                                  instruction=profile_instruction)
 
         # get the prompt by the prompt version
-        prompt_version: str = profile.get('prompt_version') or 'reviewing_planner.default_cn'
-        prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
-
-        system_prompt_model: AgentPromptModel = AgentPromptModel(introduction=prompt.introduction,
-                                                                 target=prompt.target,
-                                                                 instruction=expert_framework + prompt.instruction)
-
-        prompt: Prompt = Prompt().build_prompt(user_prompt_model, system_prompt_model,
-                                               self.prompt_assemble_order)
+        prompt_version: str = profile.get('prompt_version')
+        version_prompt: Prompt = PromptManager().get_instance_obj(prompt_version)
+
+        if version_prompt is None and not profile_prompt_model:
+            raise Exception("Either the `prompt_version` or `introduction & target & instruction`"
+                            " in agent profile configuration should be provided.")
+        if version_prompt:
+            version_prompt_model: AgentPromptModel = AgentPromptModel(
+                introduction=getattr(version_prompt, 'introduction', ''),
+                target=getattr(version_prompt, 'target', ''),
+                instruction=expert_framework + getattr(version_prompt, 'instruction', ''))
+            profile_prompt_model = profile_prompt_model + version_prompt_model
+
+        prompt: Prompt = Prompt().build_prompt(profile_prompt_model, self.prompt_assemble_order)
         process_llm_token(prompt.as_langchain(), profile, planner_input)
         return prompt
diff --git a/agentuniverse/base/util/prompt_util.py b/agentuniverse/base/util/prompt_util.py
index 90a3e836..acdb5703 100644
--- a/agentuniverse/base/util/prompt_util.py
+++ b/agentuniverse/base/util/prompt_util.py
@@ -19,31 +19,26 @@
 from agentuniverse.prompt.enum import PromptProcessEnum
 
 
-def summarize_by_stuff(texts: List[str], llm: LLM, summary_prompt_version: str):
+def summarize_by_stuff(texts: List[str], llm: LLM, summary_prompt):
     """
     stuff summarization -- general method
     """
-    summary_prompt = PromptManager().get_instance_obj(summary_prompt_version)
     stuff_chain = load_summarize_chain(llm.as_langchain(), chain_type='stuff', verbose=True,
                                        prompt=summary_prompt.as_langchain())
     return asyncio.run(stuff_chain.arun([Document(page_content=text) for text in texts]))
 
 
-def summarize_by_map_reduce(texts: List[str], llm: LLM, agent_llm: LLM, summary_prompt_version: str,
-                            combine_prompt_version: str):
+def summarize_by_map_reduce(texts: List[str], llm: LLM, summary_prompt, combine_prompt):
     """
     map reduce summarization -- general method
     """
-    texts = split_texts(texts, agent_llm)
-    summary_prompt = PromptManager().get_instance_obj(summary_prompt_version)
-    combine_prompt = PromptManager().get_instance_obj(combine_prompt_version)
     map_reduce_chain = load_summarize_chain(llm.as_langchain(), chain_type='map_reduce', verbose=True,
                                             map_prompt=summary_prompt.as_langchain(),
                                             combine_prompt=combine_prompt.as_langchain())
     return asyncio.run(map_reduce_chain.arun([Document(page_content=text) for text in texts]))
 
 
-def split_text_on_tokens(text: str, text_token, chunk_size=800, chunk_overlap=100) -> List[str]:
+def split_text_on_tokens(text: str, text_token: int, chunk_size=800, chunk_overlap=100) -> List[str]:
     """Split incoming text and return chunks using tokenizer."""
     # calculate the number of characters represented by each token.
     char_per_token = len(text) / text_token
@@ -68,29 +63,29 @@ def split_text_on_tokens(text: str, text_token, chunk_size=800, chunk_overlap=10
     return result
 
 
-def split_texts(texts: list[str], agent_llm: LLM, chunk_size=800, chunk_overlap=100, retry=True) -> list[str]:
+def split_texts(texts: list[str], llm: LLM, chunk_size=800, chunk_overlap=100, retry=True) -> list[str]:
     """
     split texts into chunks with the fixed token length -- general method
     """
     try:
         split_texts_res = []
         for text in texts:
-            text_token = agent_llm.get_num_tokens(text)
+            text_token = llm.get_num_tokens(text)
             split_texts_res.extend(
                 split_text_on_tokens(text=text, text_token=text_token, chunk_size=chunk_size,
                                      chunk_overlap=chunk_overlap))
         return split_texts_res
     except Exception as e:
         if retry:
-            return split_texts(texts=texts, agent_llm=agent_llm, retry=False)
+            return split_texts(texts=texts, llm=llm, retry=False)
         raise ValueError("split text failed, exception=" + str(e))
 
 
-def truncate_content(content: str, token_length: int, agent_llm: LLM) -> str:
+def truncate_content(content: str, token_length: int, llm: LLM) -> str:
     """
     truncate the content based on the llm token limit
     """
-    return str(split_texts(texts=[content], chunk_size=token_length, agent_llm=agent_llm)[0])
+    return str(split_texts(texts=[content], chunk_size=token_length, llm=llm)[0])
 
 
 def generate_template(agent_prompt_model: AgentPromptModel, prompt_assemble_order: list[str]) -> str:
@@ -141,9 +136,9 @@ def process_llm_token(prompt_template: PromptTemplate, profile: dict, planner_in
     # get the number of tokens in the prompt
     prompt_tokens: int = agent_llm.get_num_tokens(prompt)
 
-    remaining_tokens = agent_llm.max_context_length() - agent_llm.max_tokens
+    input_tokens = agent_llm.max_context_length() - agent_llm.max_tokens
 
-    if prompt_tokens <= remaining_tokens:
+    if prompt_tokens <= input_tokens:
         return
 
     process_prompt_type_enum = PromptProcessEnum.from_value(prompt_processor_type)
@@ -151,9 +146,14 @@ def process_llm_token(prompt_template: PromptTemplate, profile: dict, planner_in
     # compress the background in the prompt
     content = planner_input.get('background')
     if process_prompt_type_enum == PromptProcessEnum.TRUNCATE:
-        planner_input['background'] = truncate_content(content, remaining_tokens, agent_llm)
+        planner_input['background'] = truncate_content(content, input_tokens, agent_llm)
     elif process_prompt_type_enum == PromptProcessEnum.STUFF:
-        planner_input['background'] = summarize_by_stuff([content], prompt_llm, summary_prompt_version)
+        planner_input['background'] = summarize_by_stuff(texts=[content], llm=prompt_llm,
+                                                         summary_prompt=PromptManager().get_instance_obj(
+                                                             summary_prompt_version))
     elif process_prompt_type_enum == PromptProcessEnum.MAP_REDUCE:
-        planner_input['background'] = summarize_by_map_reduce([content], prompt_llm,
-                                                              agent_llm, summary_prompt_version, combine_prompt_version)
+        planner_input['background'] = summarize_by_map_reduce(texts=split_texts([content], agent_llm), llm=prompt_llm,
+                                                              summary_prompt=PromptManager().get_instance_obj(
+                                                                  summary_prompt_version),
+                                                              combine_prompt=PromptManager().get_instance_obj(
+                                                                  combine_prompt_version))
diff --git a/agentuniverse/prompt/prompt.py b/agentuniverse/prompt/prompt.py
index aa387284..3089bfb2 100644
--- a/agentuniverse/prompt/prompt.py
+++ b/agentuniverse/prompt/prompt.py
@@ -36,19 +36,16 @@ def as_langchain(self) -> PromptTemplate:
         return PromptTemplate(template=self.prompt_template,
                               input_variables=self.input_variables)
 
-    def build_prompt(self, user_agent_prompt_model: AgentPromptModel, system_agent_prompt_model: AgentPromptModel,
-                     prompt_assemble_order: list[str]) -> 'Prompt':
+    def build_prompt(self, agent_prompt_model: AgentPromptModel, prompt_assemble_order: list[str]) -> 'Prompt':
         """Build the prompt class.
 
         Args:
-            user_agent_prompt_model (AgentPromptModel): The user agent prompt model.
-            system_agent_prompt_model (AgentPromptModel): The system agent prompt model.
+            agent_prompt_model (AgentPromptModel): The user agent prompt model.
             prompt_assemble_order (list[str]): The prompt assemble ordered list.
 
         Returns:
             PromptTemplate: The prompt template.
         """
-        agent_prompt_model = user_agent_prompt_model + system_agent_prompt_model
         self.prompt_template = generate_template(agent_prompt_model, prompt_assemble_order)
         self.input_variables = re.findall(r'\{(.*?)}', self.prompt_template)
         return self
diff --git a/agentuniverse/prompt/prompt_model.py b/agentuniverse/prompt/prompt_model.py
index 56ff5cf7..491558ff 100644
--- a/agentuniverse/prompt/prompt_model.py
+++ b/agentuniverse/prompt/prompt_model.py
@@ -26,3 +26,11 @@ def __add__(self, other):
                 value = getattr(other, key, None)
             setattr(merged_object, key, value)
         return merged_object
+
+    def __bool__(self):
+        """ Check whether the object is empty.
+
+        Return True if one of the introduction, target and instruction attribute is not empty.
+        Return False otherwise.
+        """
+        return bool(self.introduction or self.introduction or self.introduction)
diff --git a/docs/guidebook/en/1_1_Introduction.md b/docs/guidebook/en/1_1_Introduction.md
index 22d0715c..9943e90b 100644
--- a/docs/guidebook/en/1_1_Introduction.md
+++ b/docs/guidebook/en/1_1_Introduction.md
@@ -11,4 +11,15 @@ This pattern utilizes four distinct agent roles: Plan, Execute, Express, and Rev
 - DOE pattern：
 This pattern consists of three agents: Data-fining agent, which is designed to solve data-intensive and high-computational-precision task; Opinion-inject agent, which combines the data results from first agent and the expert opinions which are pre-collected and structured; the third agent, Express agent generates the final result base on given document type and language style.
 
-More patterns are coming soon...
\ No newline at end of file
+More patterns are coming soon...
+
+![](../_picture/agent_universe_framework_resize.jpg)
+
+In addition to rich collaboration modes, agentUniverse also includes the following main features:
+
+* **Fast and Simple Development Experience**: Through configuration and simple interfaces, you can quickly complete single-agent construction, multi-agent collaboration process definition, and service-based applications with this framework.
+* **Rich Components and Custom Extensions**: The framework provides a wide variety of common domain components (LLM, knowledge, tools, memory, collaboration patterns, etc.) and technical components (DB, RPC, Message, etc.) with default implementations. It offers extension standards for all types of components, allowing you to customize any part to enhance your agent capabilities.
+* **Prompt-Friendly and Management**: The framework has built-in a complete set of prompt management mechanisms. You can manage prompts in multiple versions, switch between them, and specialize them based on expert domain knowledge.
+
+## Acknowledgments
+This project is partially based on open-source projects like langchain, pydantic, gunicorn, flask, SQLAlchemy, chromadb, etc. (A detailed dependency list can be found in requirements.txt). Special thanks to the related projects and associated parties.
\ No newline at end of file
diff --git a/docs/guidebook/en/4_1_API_Reference.md b/docs/guidebook/en/4_1_API_Reference.md
new file mode 100644
index 00000000..21279e6c
--- /dev/null
+++ b/docs/guidebook/en/4_1_API_Reference.md
@@ -0,0 +1,2 @@
+# API Reference
+[readthedocs](https://agentuniverse.readthedocs.io/en/latest/)
diff --git a/docs/guidebook/en/8_1_Contact_Us.md b/docs/guidebook/en/8_1_Contact_Us.md
index 313edaaa..c5a3cf33 100644
--- a/docs/guidebook/en/8_1_Contact_Us.md
+++ b/docs/guidebook/en/8_1_Contact_Us.md
@@ -4,7 +4,6 @@
 * gitcode: https://gitcode.com/agentUniverse
 * Stack Overflow: https://stackoverflowteams.com/c/agentuniverse/questions
 * Discord: https://discord.gg/VfhEvJzQ
-* reddit: https://www.reddit.com/r/agentUniverse/
 * WeChat Official Account: agentUniverse智多星
 * DingTalk Group:
 ![](../_picture/dingtalk_util20250429.png)
\ No newline at end of file
diff --git "a/docs/guidebook/zh/1_1_\347\256\200\344\273\213.md" "b/docs/guidebook/zh/1_1_\347\256\200\344\273\213.md"
index 740d9af6..ef1d59e6 100644
--- "a/docs/guidebook/zh/1_1_\347\256\200\344\273\213.md"
+++ "b/docs/guidebook/zh/1_1_\347\256\200\344\273\213.md"
@@ -11,4 +11,15 @@
 - DOE 模式组件：
 该pattern通过数据精制（Data-fining）、观点注入（Opinion-inject）、表达（Express）三个智能体，实现对数据密集、高计算精度、融合专家观点的生成任务的效果提升。典型适用场景：财报生成
 
-更多模式组件持续推出中...
\ No newline at end of file
+更多模式组件持续推出中...
+
+![](../_picture/agent_universe_framework_resize.jpg)
+
+除了丰富的协作模式外agentUniverse还包含如下主要特性：
+
+* **快速简单的研发体验**： 通过配置化与简单的接口实现，您可以基于本框架快速完成单智能体搭建、多智能体协同过程定义与服务化；
+* **丰富的组件与扩展定制**： 框架提供了大量常见的领域组件（LLM、知识、工具、记忆、协同模式等组件）与技术组件（DB、RPC、Message等组件）的默认实现；提供了基于所有组件类型的扩展标准，您可以对任何部分进行定制并用来强化您的agent能力；
+* **prompt友好与管理**：框架内置了一整套prompt管理机制，您可以对于prompt进行多版本管理、切换与专家经验领域化。
+
+## 鸣谢
+本项目部分基于langchain、pydantic、gunicorn、flask、SQLAlchemy、chromadb等开源项目（详细依赖列表可见requirements.txt）实现，在此特别感想相关项目与关联方。
\ No newline at end of file
diff --git "a/docs/guidebook/zh/4_1_API\345\217\202\350\200\203.md" "b/docs/guidebook/zh/4_1_API\345\217\202\350\200\203.md"
new file mode 100644
index 00000000..1e8be0f6
--- /dev/null
+++ "b/docs/guidebook/zh/4_1_API\345\217\202\350\200\203.md"
@@ -0,0 +1,2 @@
+# API参考
+[readthedocs](https://agentuniverse.readthedocs.io/en/latest/)
\ No newline at end of file
diff --git "a/docs/guidebook/zh/8_1_\350\201\224\347\263\273\346\210\221\344\273\254.md" "b/docs/guidebook/zh/8_1_\350\201\224\347\263\273\346\210\221\344\273\254.md"
index 294921b3..86c11e9d 100644
--- "a/docs/guidebook/zh/8_1_\350\201\224\347\263\273\346\210\221\344\273\254.md"
+++ "b/docs/guidebook/zh/8_1_\350\201\224\347\263\273\346\210\221\344\273\254.md"
@@ -4,7 +4,6 @@
 * gitcode: https://gitcode.com/agentUniverse
 * Stack Overflow: https://stackoverflowteams.com/c/agentuniverse/questions
 * Discord: https://discord.gg/VfhEvJzQ
-* reddit: https://www.reddit.com/r/agentUniverse/
 * 微信公众号: agentUniverse智多星
 * 钉钉交流群:
 ![](../_picture/dingtalk_util20250429.png)
\ No newline at end of file
diff --git a/sample_standard_app/app/core/agent/peer_agent_case/demo_executing_agent.yaml b/sample_standard_app/app/core/agent/peer_agent_case/demo_executing_agent.yaml
index 46185a5f..3a2fdb6f 100644
--- a/sample_standard_app/app/core/agent/peer_agent_case/demo_executing_agent.yaml
+++ b/sample_standard_app/app/core/agent/peer_agent_case/demo_executing_agent.yaml
@@ -2,31 +2,7 @@ info:
   name: 'demo_executing_agent'
   description: 'demo executing agent'
 profile:
-  prompt_version: executing_planner.default_cn
-  instruction: |
-    结合提供的背景信息和你所拥有的知识回答用户问题，确保回答详细、全面并包含足够的数据信息。针对用户的问题，进行深入分析并提供详尽的解答。
-    --------------------------------------------------------------
-    需要遵守下面的规则：
-    1.去除重复的信息。
-    2.去除对回答问题没有帮助的信息。
-    3.去除错误的信息。
-    4.详尽回答问题，重点突出，不过多花哨词藻。
-    5.不在多处讲到同一个细节点，一个点只出现一次。
-    6.尽量多的使用数值类信息。
-    7.需要高度注意信息的时效性
-    8.不可以出现XXX、ABC等不明确的词语。
-    
-    之前的对话:
-    {chat_history}
-    
-    背景信息是:
-    {background}
-    
-    开始!
-    我的问题是: {input}
-    
-    --------------------------------------------------------------
-    必须使用中文进行详细的回答。你需要聚焦在我的问题上，不要延伸这个问题，让我们一步一步来。
+  prompt_version: demo_executing_agent.cn
   llm_model:
     name: 'demo_llm'
     model_name: 'gpt-4-turbo'
@@ -43,5 +19,5 @@ action:
     - 'google_search_tool'
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.executing_agent'
+  module: 'agentuniverse.agent.default.executing_agent.executing_agent'
   class: 'ExecutingAgent'
\ No newline at end of file
diff --git a/sample_standard_app/app/core/agent/peer_agent_case/demo_expressing_agent.yaml b/sample_standard_app/app/core/agent/peer_agent_case/demo_expressing_agent.yaml
index 701292c8..c2fd4f11 100644
--- a/sample_standard_app/app/core/agent/peer_agent_case/demo_expressing_agent.yaml
+++ b/sample_standard_app/app/core/agent/peer_agent_case/demo_expressing_agent.yaml
@@ -2,25 +2,7 @@ info:
   name: 'demo_expressing_agent'
   description: 'demo expressing agent'
 profile:
-  prompt_version: expressing_planner.default_cn
-  target: 你的任务是根据背景信息提供的q&a信息结合你自身的知识，对用户提出的具体问题，生成一个完整的结构化问题答案。
-  instruction: |
-    回答问题需要遵守下面的规则：
-    - 理解和分析背景信息中的q&a信息，结合你自身的知识，确保提供完整、结构化的答案，答案准确、清晰、易于理解。
-    - 回答问题内容详细，同时避免重复语句、需要高度注意信息的时效性。
-    - 结构化答案生成：回答分为两大段，必须是总-分结构。
-    - 第一大段总结陈述，这里需要提炼要点，做到重点突出，专业、有结构性、通顺流畅的阐述总论点，直接了当回答问题。
-    - 第二大段详细的论点阐述。基于背景信息中的q&a信息，结合你自身的知识，展开详细论述，表达的内容语义连贯。可以使用知识中的数值和数据，作为分论点的论据支撑，必要时通过空行提升阅读体验。
-    - 不做对问题没有帮助的回答、不可以出现XXX、ABC等不明确的词语。
-    - 整体回答结果没有重复信息，必要时可以通过空行提升阅读体验。
-    
-    背景信息是:
-    {background}
-    
-    开始!
-    需要回答的问题是: {input}
-    --------------------------------------------------------------
-    请根据规则要求做出回答。
+  prompt_version: demo_expressing_agent.cn
   llm_model:
     name: demo_llm
     model_name: gpt-4-turbo
@@ -34,5 +16,5 @@ memory:
   name: ''
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.expressing_agent'
+  module: 'agentuniverse.agent.default.expressing_agent.expressing_agent'
   class: 'ExpressingAgent'
\ No newline at end of file
diff --git a/sample_standard_app/app/core/agent/peer_agent_case/demo_peer_agent.yaml b/sample_standard_app/app/core/agent/peer_agent_case/demo_peer_agent.yaml
index 71c94677..194e9e38 100644
--- a/sample_standard_app/app/core/agent/peer_agent_case/demo_peer_agent.yaml
+++ b/sample_standard_app/app/core/agent/peer_agent_case/demo_peer_agent.yaml
@@ -12,5 +12,5 @@ plan:
     reviewing: 'demo_reviewing_agent'
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.peer_agent'
+  module: 'agentuniverse.agent.default.peer_agent.peer_agent'
   class: 'PeerAgent'
\ No newline at end of file
diff --git a/sample_standard_app/app/core/agent/peer_agent_case/demo_planning_agent.yaml b/sample_standard_app/app/core/agent/peer_agent_case/demo_planning_agent.yaml
index 86446dd2..cb6396e6 100644
--- a/sample_standard_app/app/core/agent/peer_agent_case/demo_planning_agent.yaml
+++ b/sample_standard_app/app/core/agent/peer_agent_case/demo_planning_agent.yaml
@@ -2,32 +2,7 @@ info:
   name: 'demo_planning_agent'
   description: 'demo planning agent'
 profile:
-  prompt_version: planning_planner.default_cn
-  target: |
-    你的目标是针对用户提出的问题，进行拆解并生成3-5个子问题。
-  instruction: |
-    根据需要回答的问题，给出一个逻辑递进的思考链路，帮助用户逐渐掌握知识并最终回答问题。
-    思考链路以子问题的形式体现，每个子问题都是一个完整的句子，能够独立通过比如google搜索信息并做出解答。
-    
-    要求如下:
-    1. 思考链路必须严格遵循需要回答的问题，不可以延伸问题，也不可以直接回答问题。
-    2. 这个思考链路的每一步必须是简单、单一的。
-    3. 每一步的问题必须是有答案的，不能是开放性的问题。
-    4. 每一步的问题必须是完整的句子，不能有任何歧义。
-    5. 子问题不要出现英文标点符号或中文标点符号
-    
-    开始!
-    注意：生成的子问题避免使用模糊的主语，比如拆解后的子问题为"这份报告有哪些要点？"，根本不清楚这份报告到底是什么。每个子问题应包含明确的主体和客体信息，以便通过搜索引擎搜索出关键信息并作出回答。
-    
-    输出必须是按照以下格式化的Json代码片段，thought字段代表拆解问题的思考过程，framework字段代表拆解后的子问题列表。
-    {{
-        "thought": string,
-        "framework": list
-    }}
-    
-    必须使用中文回答用户提出的问题。
-    
-    需要回答的问题是: {input}
+  prompt_version: demo_planning_agent.cn
   llm_model:
     name: 'demo_llm'
     model_name: 'gpt-4-turbo'
@@ -37,5 +12,5 @@ plan:
     name: 'planning_planner'
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.planning_agent'
+  module: 'agentuniverse.agent.default.planning_agent.planning_agent'
   class: 'PlanningAgent'
\ No newline at end of file
diff --git a/sample_standard_app/app/core/agent/peer_agent_case/demo_reviewing_agent.yaml b/sample_standard_app/app/core/agent/peer_agent_case/demo_reviewing_agent.yaml
index 0daff7a7..56f50ef6 100644
--- a/sample_standard_app/app/core/agent/peer_agent_case/demo_reviewing_agent.yaml
+++ b/sample_standard_app/app/core/agent/peer_agent_case/demo_reviewing_agent.yaml
@@ -11,5 +11,5 @@ plan:
     name: 'reviewing_planner'
 metadata:
   type: 'AGENT'
-  module: 'agentuniverse.agent.default.reviewing_agent'
+  module: 'agentuniverse.agent.default.reviewing_agent.reviewing_agent'
   class: 'ReviewingAgent'
\ No newline at end of file
diff --git a/sample_standard_app/app/core/agent/rag_agent_case/demo_rag_agent.yaml b/sample_standard_app/app/core/agent/rag_agent_case/demo_rag_agent.yaml
index 64b332ea..d1c084e6 100644
--- a/sample_standard_app/app/core/agent/rag_agent_case/demo_rag_agent.yaml
+++ b/sample_standard_app/app/core/agent/rag_agent_case/demo_rag_agent.yaml
@@ -3,14 +3,17 @@ info:
   description: 'demo rag agent'
 profile:
   prompt_version: 'rag_planner.default_cn'
+  introduction: 你是一位精通信息分析的ai助手。
+  target: 你的目标是判断问题对应的答案是否提供了有价值的信息，并对问题的答案做出建议和评价。
   instruction: |
     你需要遵守的规则是:
     1. 必须使用中文结合查询的背景信息结合你所拥有的知识回答用户提出的问题。
-    2. 不采用背景信息中的错误信息。
-    3. 要考虑答案和问题的相关性，不做对问题没有帮助的回答。
-    4. 详尽回答问题，重点突出，不过多花哨词藻。
-    5. 不说模糊的推测。
-    6. 尽量多的使用数值类信息。
+    2. 结构化答案生成，必要时通过空行提升阅读体验。
+    3. 不采用背景信息中的错误信息。
+    4. 要考虑答案和问题的相关性，不做对问题没有帮助的回答。
+    5. 详尽回答问题，重点突出，不过多花哨词藻。
+    6. 不说模糊的推测。
+    7. 尽量多的使用数值类信息。
 
     背景信息是:
     {background}
diff --git a/sample_standard_app/app/core/prompt/__init__.py b/sample_standard_app/app/core/prompt/__init__.py
new file mode 100644
index 00000000..ebc407e0
--- /dev/null
+++ b/sample_standard_app/app/core/prompt/__init__.py
@@ -0,0 +1,7 @@
+# !/usr/bin/env python3
+# -*- coding:utf-8 -*-
+
+# @Time    : 2024/5/7 20:04
+# @Author  : wangchongshi
+# @Email   : wangchongshi.wcs@antgroup.com
+# @FileName: __init__.py.py
diff --git a/sample_standard_app/app/core/prompt/executing_agent_cn.yaml b/sample_standard_app/app/core/prompt/executing_agent_cn.yaml
new file mode 100644
index 00000000..317a19fc
--- /dev/null
+++ b/sample_standard_app/app/core/prompt/executing_agent_cn.yaml
@@ -0,0 +1,29 @@
+introduction: 你是一位精通信息分析的ai助手。
+target: 你的目标是根据用户提供的问题，对查找到的知识进行整合、修正，用来回答用户问题。
+instruction: |
+    结合提供的背景信息和你所拥有的知识回答用户问题，确保回答详细、全面并包含足够的数据信息。针对用户的问题，进行深入分析并提供详尽的解答。
+    --------------------------------------------------------------
+    需要遵守下面的规则：
+    1.去除重复的信息。
+    2.去除对回答问题没有帮助的信息。
+    3.去除错误的信息。
+    4.详尽回答问题，重点突出，不过多花哨词藻。
+    5.不在多处讲到同一个细节点，一个点只出现一次。
+    6.尽量多的使用数值类信息。
+    7.需要高度注意信息的时效性
+    8.不可以出现XXX、ABC等不明确的词语。
+    
+    之前的对话:
+    {chat_history}
+    
+    背景信息是:
+    {background}
+    
+    开始!
+    我的问题是: {input}
+    
+    --------------------------------------------------------------
+    必须使用中文进行详细的回答。你需要聚焦在我的问题上，不要延伸这个问题，让我们一步一步来。
+metadata:
+  type: 'PROMPT'
+  version: 'demo_executing_agent.cn'
diff --git a/sample_standard_app/app/core/prompt/expressing_agent_cn.yaml b/sample_standard_app/app/core/prompt/expressing_agent_cn.yaml
new file mode 100644
index 00000000..3c50998d
--- /dev/null
+++ b/sample_standard_app/app/core/prompt/expressing_agent_cn.yaml
@@ -0,0 +1,22 @@
+introduction: 你是一个文本编辑专家，你非常擅长从繁杂的信息中提取关键信息。
+target: 你的任务是根据背景信息提供的q&a信息结合你自身的知识，对用户提出的具体问题，生成一个完整的结构化问题答案。
+instruction: |
+  回答问题需要遵守下面的规则：
+  - 理解和分析背景信息中的q&a信息，结合你自身的知识，确保提供完整、结构化的答案，答案准确、清晰、易于理解。
+  - 回答问题内容详细，同时避免重复语句、需要高度注意信息的时效性。
+  - 结构化答案生成：回答分为两大段，必须是总-分结构。
+  - 第一大段总结陈述，这里需要提炼要点，做到重点突出，专业、有结构性、通顺流畅的阐述总论点，直接了当回答问题。
+  - 第二大段详细的论点阐述。基于背景信息中的q&a信息，结合你自身的知识，展开详细论述，表达的内容语义连贯。可以使用知识中的数值和数据，作为分论点的论据支撑，必要时通过空行提升阅读体验。
+  - 不做对问题没有帮助的回答、不可以出现XXX、ABC等不明确的词语。
+  - 整体回答结果没有重复信息，必要时可以通过空行提升阅读体验。
+  
+  背景信息是:
+  {background}
+  
+  开始!
+  需要回答的问题是: {input}
+  --------------------------------------------------------------
+  请根据规则要求做出回答。
+metadata:
+  type: 'PROMPT'
+  version: 'demo_expressing_agent.cn'
diff --git a/sample_standard_app/app/core/prompt/planning_agent_cn.yaml b/sample_standard_app/app/core/prompt/planning_agent_cn.yaml
new file mode 100644
index 00000000..1a8edf3a
--- /dev/null
+++ b/sample_standard_app/app/core/prompt/planning_agent_cn.yaml
@@ -0,0 +1,29 @@
+introduction: 你是一位精通信息分析的ai助手。
+target: |
+  你的目标是针对用户提出的问题，进行拆解并生成3-5个子问题。
+instruction: |
+  根据需要回答的问题，给出一个逻辑递进的思考链路，帮助用户逐渐掌握知识并最终回答问题。
+  思考链路以子问题的形式体现，每个子问题都是一个完整的句子，能够独立通过比如google搜索信息并做出解答。
+  
+  要求如下:
+  1. 思考链路必须严格遵循需要回答的问题，不可以延伸问题，也不可以直接回答问题。
+  2. 这个思考链路的每一步必须是简单、单一的。
+  3. 每一步的问题必须是有答案的，不能是开放性的问题。
+  4. 每一步的问题必须是完整的句子，不能有任何歧义。
+  5. 子问题不要出现英文标点符号或中文标点符号
+  
+  开始!
+  注意：生成的子问题避免使用模糊的主语，比如拆解后的子问题为"这份报告有哪些要点？"，根本不清楚这份报告到底是什么。每个子问题应包含明确的主体和客体信息，以便通过搜索引擎搜索出关键信息并作出回答。
+  
+  输出必须是按照以下格式化的Json代码片段，thought字段代表拆解问题的思考过程，framework字段代表拆解后的子问题列表。
+  {{
+      "thought": string,
+      "framework": list
+  }}
+  
+  必须使用中文回答用户提出的问题。
+  
+  需要回答的问题是: {input}
+metadata:
+  type: 'PROMPT'
+  version: 'demo_planning_agent.cn'
diff --git a/sample_standard_app/config/config.toml b/sample_standard_app/config/config.toml
index fe4a5eeb..ca5b7150 100644
--- a/sample_standard_app/config/config.toml
+++ b/sample_standard_app/config/config.toml
@@ -20,7 +20,7 @@ memory = ['sample_standard_app.app.core.memory']
 # Scan and register service components for all paths under this list, with priority over the default.
 service = ['sample_standard_app.app.core.service']
 # Scan and register prompt components for all paths under this list, with priority over the default.
-prompt = []
+prompt = ['sample_standard_app.app.core.prompt']
 
 [SUB_CONFIG_PATH]
 # Log config file path, an absolute path or a relative path based on the dir where the current config file is located.


Test patch:
diff --git a/sample_standard_app/app/test/test_peer_agent.py b/sample_standard_app/app/test/test_peer_agent.py
index 2d9e2923..5d7b160d 100644
--- a/sample_standard_app/app/test/test_peer_agent.py
+++ b/sample_standard_app/app/test/test_peer_agent.py
@@ -24,7 +24,7 @@ def test_peer_agent(self):
         """
 
         instance: Agent = AgentManager().get_instance_obj('demo_peer_agent')
-        instance.run(input='请帮我分析下2023年巴菲特减持比亚迪的原因')
+        instance.run(input='请帮我总结下2024年巴菲特股东大会')
 
 
 if __name__ == '__main__':