airoles 0.5.7__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 (103) hide show
  1. airoles-0.5.7/PKG-INFO +59 -0
  2. airoles-0.5.7/README.md +40 -0
  3. airoles-0.5.7/airoles/__init__.py +159 -0
  4. airoles-0.5.7/airoles/adapters/__init__.py +13 -0
  5. airoles-0.5.7/airoles/adapters/autogen.py +54 -0
  6. airoles-0.5.7/airoles/adapters/crewai.py +74 -0
  7. airoles-0.5.7/airoles/adapters/dify.py +29 -0
  8. airoles-0.5.7/airoles/adapters/flowise.py +44 -0
  9. airoles-0.5.7/airoles/adapters/langgraph.py +47 -0
  10. airoles-0.5.7/airoles/builder.py +334 -0
  11. airoles-0.5.7/airoles/compiled/clarifier_enterprise.txt +34 -0
  12. airoles-0.5.7/airoles/compiled/clarifier_fast.txt +17 -0
  13. airoles-0.5.7/airoles/compiled/clarifier_nano.txt +13 -0
  14. airoles-0.5.7/airoles/compiled/hypothesis.txt +20 -0
  15. airoles-0.5.7/airoles/compiled/planner_free_form_enterprise.txt +70 -0
  16. airoles-0.5.7/airoles/compiled/planner_free_form_fast.txt +46 -0
  17. airoles-0.5.7/airoles/compiled/planner_free_form_nano.txt +27 -0
  18. airoles-0.5.7/airoles/compiled/planner_high_risk_enterprise.txt +76 -0
  19. airoles-0.5.7/airoles/compiled/planner_high_risk_fast.txt +52 -0
  20. airoles-0.5.7/airoles/compiled/planner_high_risk_nano.txt +33 -0
  21. airoles-0.5.7/airoles/compiled/planner_knowledge_reference_enterprise.txt +102 -0
  22. airoles-0.5.7/airoles/compiled/planner_knowledge_reference_fast.txt +78 -0
  23. airoles-0.5.7/airoles/compiled/planner_knowledge_reference_nano.txt +33 -0
  24. airoles-0.5.7/airoles/compiled/planner_planning_enterprise.txt +98 -0
  25. airoles-0.5.7/airoles/compiled/planner_planning_fast.txt +74 -0
  26. airoles-0.5.7/airoles/compiled/planner_planning_nano.txt +55 -0
  27. airoles-0.5.7/airoles/compiled/planner_sop_enforced_enterprise.txt +90 -0
  28. airoles-0.5.7/airoles/compiled/planner_sop_enforced_fast.txt +66 -0
  29. airoles-0.5.7/airoles/compiled/planner_sop_enforced_nano.txt +47 -0
  30. airoles-0.5.7/airoles/compiled/router_enterprise.txt +81 -0
  31. airoles-0.5.7/airoles/compiled/router_fast.txt +59 -0
  32. airoles-0.5.7/airoles/compiled/router_nano.txt +21 -0
  33. airoles-0.5.7/airoles/compiled/summarizer_enterprise.txt +39 -0
  34. airoles-0.5.7/airoles/compiled/summarizer_fast.txt +20 -0
  35. airoles-0.5.7/airoles/compiled/summarizer_nano.txt +20 -0
  36. airoles-0.5.7/airoles/compiled/task_profiler_enterprise.txt +61 -0
  37. airoles-0.5.7/airoles/compiled/task_profiler_fast.txt +50 -0
  38. airoles-0.5.7/airoles/compiled/task_profiler_nano.txt +50 -0
  39. airoles-0.5.7/airoles/compiler/__init__.py +10 -0
  40. airoles-0.5.7/airoles/compiler/compile_prompts.py +145 -0
  41. airoles-0.5.7/airoles/compiler/loader.py +37 -0
  42. airoles-0.5.7/airoles/grounding_config.py +31 -0
  43. airoles-0.5.7/airoles/grounding_rules.json +12 -0
  44. airoles-0.5.7/airoles/json_schemas.py +16 -0
  45. airoles-0.5.7/airoles/phrases.py +22 -0
  46. airoles-0.5.7/airoles/policies.py +173 -0
  47. airoles-0.5.7/airoles/prompt_profiler.py +134 -0
  48. airoles-0.5.7/airoles/prompt_trace.py +50 -0
  49. airoles-0.5.7/airoles/providers/__init__.py +32 -0
  50. airoles-0.5.7/airoles/providers/_http.py +29 -0
  51. airoles-0.5.7/airoles/providers/anthropic_provider.py +63 -0
  52. airoles-0.5.7/airoles/providers/anthropic_sdk_provider.py +41 -0
  53. airoles-0.5.7/airoles/providers/base.py +13 -0
  54. airoles-0.5.7/airoles/providers/callable_provider.py +24 -0
  55. airoles-0.5.7/airoles/providers/config.py +100 -0
  56. airoles-0.5.7/airoles/providers/ollama_provider.py +46 -0
  57. airoles-0.5.7/airoles/providers/openai_compatible.py +85 -0
  58. airoles-0.5.7/airoles/providers/openai_sdk_provider.py +47 -0
  59. airoles-0.5.7/airoles/py.typed +0 -0
  60. airoles-0.5.7/airoles/registry.py +107 -0
  61. airoles-0.5.7/airoles/roles.py +70 -0
  62. airoles-0.5.7/airoles/rules.py +20 -0
  63. airoles-0.5.7/airoles/runtime/__init__.py +15 -0
  64. airoles-0.5.7/airoles/runtime/agent.py +98 -0
  65. airoles-0.5.7/airoles/runtime/base.py +69 -0
  66. airoles-0.5.7/airoles/runtime/clarifier.py +22 -0
  67. airoles-0.5.7/airoles/runtime/execution_context.py +82 -0
  68. airoles-0.5.7/airoles/runtime/grounding.py +83 -0
  69. airoles-0.5.7/airoles/runtime/json_utils.py +24 -0
  70. airoles-0.5.7/airoles/runtime/planner.py +71 -0
  71. airoles-0.5.7/airoles/runtime/router.py +26 -0
  72. airoles-0.5.7/airoles/runtime/summarizer.py +20 -0
  73. airoles-0.5.7/airoles/runtime/summary_grounding.py +79 -0
  74. airoles-0.5.7/airoles/runtime/task_profiler.py +14 -0
  75. airoles-0.5.7/airoles/runtime/validators.py +91 -0
  76. airoles-0.5.7/airoles/schema.py +73 -0
  77. airoles-0.5.7/airoles/selector.py +311 -0
  78. airoles-0.5.7/airoles/session.py +32 -0
  79. airoles-0.5.7/airoles/task_types.py +17 -0
  80. airoles-0.5.7/airoles/templates.py +306 -0
  81. airoles-0.5.7/airoles/tree.py +27 -0
  82. airoles-0.5.7/airoles.egg-info/PKG-INFO +59 -0
  83. airoles-0.5.7/airoles.egg-info/SOURCES.txt +101 -0
  84. airoles-0.5.7/airoles.egg-info/dependency_links.txt +1 -0
  85. airoles-0.5.7/airoles.egg-info/requires.txt +9 -0
  86. airoles-0.5.7/airoles.egg-info/top_level.txt +1 -0
  87. airoles-0.5.7/pyproject.toml +32 -0
  88. airoles-0.5.7/setup.cfg +4 -0
  89. airoles-0.5.7/tests/test_adapters.py +39 -0
  90. airoles-0.5.7/tests/test_builder.py +45 -0
  91. airoles-0.5.7/tests/test_compiler_and_validators.py +153 -0
  92. airoles-0.5.7/tests/test_exports.py +54 -0
  93. airoles-0.5.7/tests/test_grounding_rules.py +68 -0
  94. airoles-0.5.7/tests/test_json_utils.py +13 -0
  95. airoles-0.5.7/tests/test_prompt_profiler.py +60 -0
  96. airoles-0.5.7/tests/test_prompt_snapshot.py +38 -0
  97. airoles-0.5.7/tests/test_providers.py +106 -0
  98. airoles-0.5.7/tests/test_registry.py +23 -0
  99. airoles-0.5.7/tests/test_runtime.py +121 -0
  100. airoles-0.5.7/tests/test_schema.py +26 -0
  101. airoles-0.5.7/tests/test_selector.py +102 -0
  102. airoles-0.5.7/tests/test_session_and_tier.py +88 -0
  103. airoles-0.5.7/tests/test_summary_grounding.py +50 -0
airoles-0.5.7/PKG-INFO ADDED
@@ -0,0 +1,59 @@
1
+ Metadata-Version: 2.4
2
+ Name: airoles
3
+ Version: 0.5.7
4
+ Summary: AI Role 树 — 约束 LLM 防致幻(Role / Policy 唯一源码)
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://gitee.com/wangguoran/airoles
7
+ Project-URL: Repository, https://gitee.com/wangguoran/airoles.git
8
+ Keywords: ai,llm,prompt,rag,anti-hallucination,dify
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Programming Language :: Python :: 3
11
+ Requires-Python: >=3.10
12
+ Description-Content-Type: text/markdown
13
+ Provides-Extra: dev
14
+ Requires-Dist: pytest>=7.0; extra == "dev"
15
+ Provides-Extra: openai
16
+ Requires-Dist: openai>=1.0; extra == "openai"
17
+ Provides-Extra: anthropic
18
+ Requires-Dist: anthropic>=0.25; extra == "anthropic"
19
+
20
+ # airoles
21
+
22
+ **Model-Agnostic Agent Role Framework** — 防致幻规则 + PromptBuilder + Runtime。
23
+
24
+ ```bash
25
+ pip install airoles
26
+ export AIROLES_API_KEY=sk-...
27
+ export AIROLES_BASE_URL=https://api.deepseek.com/v1
28
+ export AIROLES_MODEL=deepseek-chat
29
+ ```
30
+
31
+ ```python
32
+ from airoles import Planner
33
+
34
+ result = Planner.from_env().run(
35
+ "帮我规划一套 ERP 系统",
36
+ policy_mode="planning",
37
+ )
38
+ print(result["need_confirmation"], result["plan"]["summary"])
39
+ ```
40
+
41
+ **无 API Key 测试**(Mock Provider):
42
+
43
+ ```python
44
+ from airoles import Agent, CallableProvider
45
+
46
+ agent = Agent(CallableProvider(your_mock_fn))
47
+ out = agent.plan("...", skip_clarify=True)
48
+ ```
49
+
50
+ ## 三层
51
+
52
+ | 层 | API | 版本 |
53
+ |----|-----|------|
54
+ | Prompt | `ROLE_*`, `POLICY_*`, `templates` | v0.1+ |
55
+ | 组装 | `PromptBuilder` + `PolicySelector` + `compiled/` | v0.5 |
56
+ | Runtime | `Planner.from_env().run()` + Provider + Adapters | v0.3+ |
57
+
58
+ - [ARCHITECTURE.md](./ARCHITECTURE.md) — 六层架构 + P4 路线图
59
+ - [OPERATION.md](./OPERATION.md) — 发版
@@ -0,0 +1,40 @@
1
+ # airoles
2
+
3
+ **Model-Agnostic Agent Role Framework** — 防致幻规则 + PromptBuilder + Runtime。
4
+
5
+ ```bash
6
+ pip install airoles
7
+ export AIROLES_API_KEY=sk-...
8
+ export AIROLES_BASE_URL=https://api.deepseek.com/v1
9
+ export AIROLES_MODEL=deepseek-chat
10
+ ```
11
+
12
+ ```python
13
+ from airoles import Planner
14
+
15
+ result = Planner.from_env().run(
16
+ "帮我规划一套 ERP 系统",
17
+ policy_mode="planning",
18
+ )
19
+ print(result["need_confirmation"], result["plan"]["summary"])
20
+ ```
21
+
22
+ **无 API Key 测试**(Mock Provider):
23
+
24
+ ```python
25
+ from airoles import Agent, CallableProvider
26
+
27
+ agent = Agent(CallableProvider(your_mock_fn))
28
+ out = agent.plan("...", skip_clarify=True)
29
+ ```
30
+
31
+ ## 三层
32
+
33
+ | 层 | API | 版本 |
34
+ |----|-----|------|
35
+ | Prompt | `ROLE_*`, `POLICY_*`, `templates` | v0.1+ |
36
+ | 组装 | `PromptBuilder` + `PolicySelector` + `compiled/` | v0.5 |
37
+ | Runtime | `Planner.from_env().run()` + Provider + Adapters | v0.3+ |
38
+
39
+ - [ARCHITECTURE.md](./ARCHITECTURE.md) — 六层架构 + P4 路线图
40
+ - [OPERATION.md](./OPERATION.md) — 发版
@@ -0,0 +1,159 @@
1
+ """airoles — AI Role 约束树 + PromptBuilder + Agent Runtime."""
2
+
3
+ from airoles.adapters import (
4
+ AutoGenAdapter,
5
+ CrewAIAdapter,
6
+ DifyAdapter,
7
+ FlowiseAdapter,
8
+ LangGraphAdapter,
9
+ )
10
+ from airoles.builder import PromptBuilder, default_builder
11
+ from airoles.prompt_profiler import PromptProfiler, estimate_tokens, policy_token_weights
12
+ from airoles.prompt_trace import PromptTrace
13
+ from airoles.phrases import (
14
+ RAG_ENTERPRISE_SYSTEM_PROMPT,
15
+ RAG_FORBIDDEN_PATTERNS,
16
+ RAG_REFUSAL_PHRASES,
17
+ )
18
+ from airoles.policies import (
19
+ POLICY_ANTI_HALLUCINATION,
20
+ POLICY_ANTI_HALLUCINATION_MIN,
21
+ POLICY_CLARIFY_THRESHOLD,
22
+ POLICY_CLARIFY_THRESHOLD_MIN,
23
+ POLICY_DAG_VALIDATION,
24
+ POLICY_EXECUTION_GATE,
25
+ POLICY_EXPERIENCE_GUIDED_REASONING,
26
+ POLICY_HYPOTHESIS_DRIVEN,
27
+ POLICY_NO_GUESS,
28
+ POLICY_PLANNING_MODE,
29
+ POLICY_RAG_ENTERPRISE,
30
+ POLICY_SAFETY,
31
+ POLICY_SOP_ENFORCEMENT,
32
+ POLICY_SUMMARIZER_GROUNDING,
33
+ POLICY_SUMMARIZER_GROUNDING_MIN,
34
+ POLICY_TOOL_SELECTION,
35
+ )
36
+ from airoles.providers import (
37
+ AnthropicProvider,
38
+ CallableProvider,
39
+ OllamaProvider,
40
+ OpenAICompatibleProvider,
41
+ load_config,
42
+ provider_from_config,
43
+ provider_from_env,
44
+ )
45
+ from airoles.registry import (
46
+ PROMPT_REGISTRY,
47
+ PromptRule,
48
+ export_metadata,
49
+ get_prompt,
50
+ list_prompt_ids,
51
+ )
52
+ from airoles.selector import (
53
+ PolicyContext,
54
+ PolicySelector,
55
+ PlannerSelection,
56
+ RoleContext,
57
+ select_planner_from_profile,
58
+ select_planner_policies,
59
+ tier_from_env,
60
+ )
61
+ from airoles.session import SESSION_GLOBAL_CONSTRAINTS, SessionContext
62
+ from airoles.roles import (
63
+ ROLE_CLARIFIER,
64
+ ROLE_PLANNER,
65
+ ROLE_ROUTER,
66
+ ROLE_SUMMARIZER,
67
+ ROLE_TASK_PROFILER,
68
+ )
69
+ from airoles.runtime import (
70
+ Agent,
71
+ Clarifier,
72
+ Planner,
73
+ Router,
74
+ Summarizer,
75
+ TaskProfiler,
76
+ )
77
+ from airoles.runtime.json_utils import extract_json, parse_json
78
+ from airoles.runtime.validators import (
79
+ validate_clarifier_output,
80
+ validate_planner_plan,
81
+ validate_router_route,
82
+ )
83
+ from airoles.task_types import TASK_TYPES
84
+
85
+ _PROMPT_EXPORTS = [
86
+ "ROLE_ROUTER",
87
+ "ROLE_CLARIFIER",
88
+ "ROLE_PLANNER",
89
+ "ROLE_SUMMARIZER",
90
+ "ROLE_TASK_PROFILER",
91
+ "TASK_TYPES",
92
+ "POLICY_ANTI_HALLUCINATION",
93
+ "POLICY_ANTI_HALLUCINATION_MIN",
94
+ "POLICY_CLARIFY_THRESHOLD",
95
+ "POLICY_CLARIFY_THRESHOLD_MIN",
96
+ "POLICY_NO_GUESS",
97
+ "POLICY_SAFETY",
98
+ "POLICY_EXECUTION_GATE",
99
+ "POLICY_PLANNING_MODE",
100
+ "POLICY_TOOL_SELECTION",
101
+ "POLICY_SOP_ENFORCEMENT",
102
+ "POLICY_EXPERIENCE_GUIDED_REASONING",
103
+ "POLICY_HYPOTHESIS_DRIVEN",
104
+ "POLICY_DAG_VALIDATION",
105
+ "POLICY_RAG_ENTERPRISE",
106
+ "POLICY_SUMMARIZER_GROUNDING",
107
+ "POLICY_SUMMARIZER_GROUNDING_MIN",
108
+ "RAG_ENTERPRISE_SYSTEM_PROMPT",
109
+ "RAG_REFUSAL_PHRASES",
110
+ "RAG_FORBIDDEN_PATTERNS",
111
+ ]
112
+
113
+ _RUNTIME_EXPORTS = [
114
+ "PromptBuilder",
115
+ "default_builder",
116
+ "PromptTrace",
117
+ "PromptProfiler",
118
+ "estimate_tokens",
119
+ "policy_token_weights",
120
+ "Agent",
121
+ "Router",
122
+ "TaskProfiler",
123
+ "Clarifier",
124
+ "Planner",
125
+ "Summarizer",
126
+ "CallableProvider",
127
+ "OpenAICompatibleProvider",
128
+ "AnthropicProvider",
129
+ "OllamaProvider",
130
+ "provider_from_env",
131
+ "provider_from_config",
132
+ "load_config",
133
+ "extract_json",
134
+ "parse_json",
135
+ "DifyAdapter",
136
+ "LangGraphAdapter",
137
+ "CrewAIAdapter",
138
+ "AutoGenAdapter",
139
+ "FlowiseAdapter",
140
+ "PromptRule",
141
+ "PROMPT_REGISTRY",
142
+ "get_prompt",
143
+ "list_prompt_ids",
144
+ "export_metadata",
145
+ "PolicyContext",
146
+ "PolicySelector",
147
+ "PlannerSelection",
148
+ "select_planner_policies",
149
+ "select_planner_from_profile",
150
+ "RoleContext",
151
+ "tier_from_env",
152
+ "SessionContext",
153
+ "SESSION_GLOBAL_CONSTRAINTS",
154
+ "validate_planner_plan",
155
+ "validate_router_route",
156
+ "validate_clarifier_output",
157
+ ]
158
+
159
+ __all__ = _PROMPT_EXPORTS + _RUNTIME_EXPORTS
@@ -0,0 +1,13 @@
1
+ from airoles.adapters.autogen import AutoGenAdapter
2
+ from airoles.adapters.crewai import CrewAIAdapter
3
+ from airoles.adapters.dify import DifyAdapter
4
+ from airoles.adapters.flowise import FlowiseAdapter
5
+ from airoles.adapters.langgraph import LangGraphAdapter
6
+
7
+ __all__ = [
8
+ "DifyAdapter",
9
+ "LangGraphAdapter",
10
+ "CrewAIAdapter",
11
+ "AutoGenAdapter",
12
+ "FlowiseAdapter",
13
+ ]
@@ -0,0 +1,54 @@
1
+ """Microsoft AutoGen Assistant 配置导出."""
2
+ from __future__ import annotations
3
+
4
+ from typing import Any
5
+
6
+ from airoles.builder import PromptBuilder, default_builder
7
+
8
+
9
+ class AutoGenAdapter:
10
+ """导出 AutoGen ConversableAgent / AssistantAgent 配置片段."""
11
+
12
+ def __init__(self, builder: PromptBuilder | None = None) -> None:
13
+ self.builder = builder or default_builder
14
+
15
+ def export(self) -> dict[str, Any]:
16
+ return {
17
+ "framework": "autogen",
18
+ "agents": [
19
+ {
20
+ "name": "router",
21
+ "system_message": self.builder.router(),
22
+ "human_input_mode": "NEVER",
23
+ "description": "意图路由,输出 JSON",
24
+ },
25
+ {
26
+ "name": "clarifier",
27
+ "system_message": self.builder.clarifier(),
28
+ "human_input_mode": "ALWAYS",
29
+ "description": "澄清缺失参数",
30
+ },
31
+ {
32
+ "name": "task_profiler",
33
+ "system_message": self.builder.task_profiler(),
34
+ "human_input_mode": "NEVER",
35
+ },
36
+ {
37
+ "name": "planner",
38
+ "system_message": self.builder.planner(policy_mode="free_form"),
39
+ "human_input_mode": "NEVER",
40
+ "description": "产出需用户 confirm 的计划 JSON",
41
+ },
42
+ {
43
+ "name": "summarizer",
44
+ "system_message": self.builder.summarizer(),
45
+ "human_input_mode": "NEVER",
46
+ },
47
+ ],
48
+ "group_chat_suggestion": [
49
+ "User → router",
50
+ "router → clarifier (if needs_clarification)",
51
+ "router → task_profiler → planner",
52
+ "executor (external) → summarizer",
53
+ ],
54
+ }
@@ -0,0 +1,74 @@
1
+ """CrewAI Agent 定义导出."""
2
+ from __future__ import annotations
3
+
4
+ from typing import Any
5
+
6
+ from airoles.builder import PromptBuilder, default_builder
7
+ from airoles.roles import (
8
+ ROLE_CLARIFIER,
9
+ ROLE_PLANNER,
10
+ ROLE_ROUTER,
11
+ ROLE_SUMMARIZER,
12
+ ROLE_TASK_PROFILER,
13
+ )
14
+
15
+
16
+ class CrewAIAdapter:
17
+ """导出 CrewAI Agent 的 role / goal / backstory / system_prompt."""
18
+
19
+ def __init__(self, builder: PromptBuilder | None = None) -> None:
20
+ self.builder = builder or default_builder
21
+
22
+ def export(self) -> dict[str, Any]:
23
+ return {
24
+ "framework": "crewai",
25
+ "agents": [
26
+ {
27
+ "name": "router",
28
+ "role": "任务路由器",
29
+ "goal": "理解用户意图并结构化提取参数,判断是否需要澄清",
30
+ "backstory": ROLE_ROUTER.strip(),
31
+ "system_prompt": self.builder.router(),
32
+ "allow_delegation": False,
33
+ },
34
+ {
35
+ "name": "task_profiler",
36
+ "role": "任务画像分析师",
37
+ "goal": "深度理解用户真实目标、能力与质量标准",
38
+ "backstory": ROLE_TASK_PROFILER.split("\n")[0],
39
+ "system_prompt": self.builder.task_profiler(),
40
+ "allow_delegation": False,
41
+ },
42
+ {
43
+ "name": "clarifier",
44
+ "role": "任务澄清专家",
45
+ "goal": "在信息不足时提出最关键的问题",
46
+ "backstory": ROLE_CLARIFIER.strip(),
47
+ "system_prompt": self.builder.clarifier(),
48
+ "allow_delegation": False,
49
+ },
50
+ {
51
+ "name": "planner",
52
+ "role": "任务规划师",
53
+ "goal": "在经验约束下产出可确认的结构化执行计划",
54
+ "backstory": ROLE_PLANNER.strip()[:200],
55
+ "system_prompt": self.builder.planner(policy_mode="free_form"),
56
+ "allow_delegation": False,
57
+ },
58
+ {
59
+ "name": "summarizer",
60
+ "role": "结果汇总员",
61
+ "goal": "基于步骤真实输出生成简洁报告,禁止编造",
62
+ "backstory": ROLE_SUMMARIZER.strip(),
63
+ "system_prompt": self.builder.summarizer(),
64
+ "allow_delegation": False,
65
+ },
66
+ ],
67
+ "suggested_crew_flow": [
68
+ "router",
69
+ "clarifier?",
70
+ "task_profiler",
71
+ "planner",
72
+ "summarizer",
73
+ ],
74
+ }
@@ -0,0 +1,29 @@
1
+ """框架适配器 — 导出可直接粘贴的 Prompt 片段."""
2
+ from __future__ import annotations
3
+
4
+ from airoles.builder import PromptBuilder, default_builder
5
+
6
+
7
+ class DifyAdapter:
8
+ """Dify 应用 / 知识库 Prompt 导出."""
9
+
10
+ def __init__(self, builder: PromptBuilder | None = None) -> None:
11
+ self.builder = builder or default_builder
12
+
13
+ def rag_system_prompt(self) -> str:
14
+ """知识库 RAG 应用 System Prompt."""
15
+ return self.builder.rag_enterprise()
16
+
17
+ def export(self) -> dict[str, str]:
18
+ """各环节 system prompt 字典,可直接复制到 Dify 节点."""
19
+ return {
20
+ "version": "airoles",
21
+ "rag_knowledge_base": self.rag_system_prompt(),
22
+ "router": self.builder.router(),
23
+ "task_profiler": self.builder.task_profiler(),
24
+ "clarifier": self.builder.clarifier(),
25
+ "planner_free_form": self.builder.planner(policy_mode="free_form"),
26
+ "planner_planning": self.builder.planner(policy_mode="planning"),
27
+ "summarizer": self.builder.summarizer(),
28
+ "hypothesis": self.builder.hypothesis(),
29
+ }
@@ -0,0 +1,44 @@
1
+ """Flowise Chatflow 节点 Prompt 导出."""
2
+ from __future__ import annotations
3
+
4
+ from typing import Any
5
+
6
+ from airoles.builder import PromptBuilder, default_builder
7
+
8
+
9
+ class FlowiseAdapter:
10
+ """导出 Flowise Custom Tool / Chat Prompt Template 节点配置."""
11
+
12
+ def __init__(self, builder: PromptBuilder | None = None) -> None:
13
+ self.builder = builder or default_builder
14
+
15
+ def export(self) -> dict[str, Any]:
16
+ return {
17
+ "framework": "flowise",
18
+ "nodes": [
19
+ {
20
+ "type": "ChatPromptTemplate",
21
+ "label": "airoles_router",
22
+ "systemMessagePrompt": self.builder.router(),
23
+ "input": "{{userInput}}",
24
+ },
25
+ {
26
+ "type": "ChatPromptTemplate",
27
+ "label": "airoles_planner",
28
+ "systemMessagePrompt": self.builder.planner(policy_mode="free_form"),
29
+ "input": "{{userInput}}\n\nRouter: {{routerOutput}}",
30
+ },
31
+ {
32
+ "type": "ChatPromptTemplate",
33
+ "label": "airoles_rag",
34
+ "systemMessagePrompt": self.builder.rag_enterprise(),
35
+ "input": "Context:\n{{context}}\n\nQuestion:\n{{question}}",
36
+ },
37
+ {
38
+ "type": "ChatPromptTemplate",
39
+ "label": "airoles_summarizer",
40
+ "systemMessagePrompt": self.builder.summarizer(),
41
+ "input": "步骤结果:\n{{stepOutputs}}",
42
+ },
43
+ ],
44
+ }
@@ -0,0 +1,47 @@
1
+ """LangGraph 节点 Prompt 导出."""
2
+ from __future__ import annotations
3
+
4
+ from typing import Any
5
+
6
+ from airoles.builder import PromptBuilder, default_builder
7
+
8
+
9
+ class LangGraphAdapter:
10
+ """导出 LangGraph StateGraph 各节点的 system prompt 与建议边."""
11
+
12
+ def __init__(self, builder: PromptBuilder | None = None) -> None:
13
+ self.builder = builder or default_builder
14
+
15
+ def export(self) -> dict[str, Any]:
16
+ return {
17
+ "framework": "langgraph",
18
+ "nodes": {
19
+ "router": {
20
+ "system": self.builder.router(),
21
+ "output": "json",
22
+ },
23
+ "clarifier": {
24
+ "system": self.builder.clarifier(),
25
+ "output": "json",
26
+ },
27
+ "task_profiler": {
28
+ "system": self.builder.task_profiler(),
29
+ "output": "json",
30
+ },
31
+ "planner": {
32
+ "system_free_form": self.builder.planner(policy_mode="free_form"),
33
+ "system_planning": self.builder.planner(policy_mode="planning"),
34
+ "output": "json",
35
+ },
36
+ "summarizer": {
37
+ "system": self.builder.summarizer(),
38
+ "output": "text",
39
+ },
40
+ },
41
+ "suggested_edges": [
42
+ {"from": "router", "to": "clarifier", "when": "needs_clarification"},
43
+ {"from": "router", "to": "task_profiler", "when": "not needs_clarification"},
44
+ {"from": "task_profiler", "to": "planner"},
45
+ {"from": "planner", "to": "END", "when": "need_confirmation"},
46
+ ],
47
+ }