@gt-fe/eap-cli 0.2.20 → 0.2.21
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.
- package/README.md +304 -304
- package/dist/templates/README.md +51 -51
- package/dist/templates/agent-api-orchestration/README.md +326 -326
- package/dist/templates/agent-api-orchestration/eap.config.json +1 -1
- package/dist/templates/agent-api-orchestration/graph.json +35 -35
- package/dist/templates/agent-api-orchestration/package.json +1 -1
- package/dist/templates/dag-workflow/README.md +102 -102
- package/dist/templates/dag-workflow/agent.manifest.json +19 -19
- package/dist/templates/dag-workflow/eap.config.json +1 -1
- package/dist/templates/dag-workflow/gitignore +51 -51
- package/dist/templates/dag-workflow/graph.json +51 -51
- package/dist/templates/dag-workflow/skills/README.md +116 -116
- package/dist/templates/plan-and-execute/README.md +109 -109
- package/dist/templates/plan-and-execute/agent.manifest.json +19 -19
- package/dist/templates/plan-and-execute/eap.config.json +1 -1
- package/dist/templates/plan-and-execute/eap.lock.yaml +5 -5
- package/dist/templates/plan-and-execute/gitignore +51 -51
- package/dist/templates/plan-and-execute/graph.json +49 -49
- package/dist/templates/plan-and-execute/skills/README.md +120 -120
- package/dist/templates/simple-flow/README.md +87 -87
- package/dist/templates/simple-flow/agent.manifest.json +19 -19
- package/dist/templates/simple-flow/eap.config.json +1 -1
- package/dist/templates/simple-flow/gitignore +51 -51
- package/dist/templates/simple-flow/graph.json +32 -32
- package/dist/templates/simple-flow/package.json +10 -10
- package/dist/templates/simple-flow/skills/README.md +113 -113
- package/dist/templates/single-agent-with-tools/README.md +138 -138
- package/dist/templates/single-agent-with-tools/agent.manifest.json +19 -19
- package/dist/templates/single-agent-with-tools/eap.config.json +1 -1
- package/dist/templates/single-agent-with-tools/eap.lock.yaml +5 -5
- package/dist/templates/single-agent-with-tools/gitignore +51 -51
- package/dist/templates/single-agent-with-tools/graph.json +41 -41
- package/dist/templates/single-agent-with-tools/skills/README.md +119 -119
- package/dist/templates/single-agent-with-tools/tools/http-weather/toolset.manifest.json +73 -73
- package/dist/templates/single-agent-with-tools/tools/web-search/toolset.manifest.json +41 -41
- package/package.json +2 -2
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "规划后逐步执行:planner 写出计划,executor 按计划逐步调用工具直至完成。",
|
|
3
|
-
"nodes": [
|
|
4
|
-
{
|
|
5
|
-
"id": "planner",
|
|
6
|
-
"type": "llm",
|
|
7
|
-
"config": {
|
|
8
|
-
"disableTools": true,
|
|
9
|
-
"systemPrompt": "为用户请求写一份简短有序计划,每行一步。不要调用工具。不要把未调用的工具写成 XML、命令块或伪 execute_command。"
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"id": "executor",
|
|
14
|
-
"type": "llm",
|
|
15
|
-
"config": {
|
|
16
|
-
"systemPrompt": "按上一份计划逐步执行。每一步只做一件事:调用 echo-tool,把该步原文放入 text。只通过平台提供的工具调用执行,不要在回复里写未调用的 XML、命令块或伪 execute_command。全部完成后直接用中文回复,不要再调用工具。"
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"id": "tools",
|
|
21
|
-
"type": "tool",
|
|
22
|
-
"config": {
|
|
23
|
-
"tool": "echo-tool"
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"edges": [
|
|
28
|
-
{ "from": "__start__", "to": "planner" },
|
|
29
|
-
{ "from": "planner", "to": "executor" },
|
|
30
|
-
{ "from": "tools", "to": "executor" }
|
|
31
|
-
],
|
|
32
|
-
"conditionalEdges": [
|
|
33
|
-
{
|
|
34
|
-
"from": "executor",
|
|
35
|
-
"conditionFn": "shouldContinue",
|
|
36
|
-
"branches": [
|
|
37
|
-
{ "value": "call_tools", "to": "tools" },
|
|
38
|
-
{ "value": "finish", "to": "__end__" }
|
|
39
|
-
],
|
|
40
|
-
"fallback": "__end__"
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
"entryPoint": "planner",
|
|
44
|
-
"finishPoints": ["__end__"],
|
|
45
|
-
"config": {
|
|
46
|
-
"maxRetries": 3,
|
|
47
|
-
"checkpointStore": "memory"
|
|
48
|
-
}
|
|
49
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"description": "规划后逐步执行:planner 写出计划,executor 按计划逐步调用工具直至完成。",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "planner",
|
|
6
|
+
"type": "llm",
|
|
7
|
+
"config": {
|
|
8
|
+
"disableTools": true,
|
|
9
|
+
"systemPrompt": "为用户请求写一份简短有序计划,每行一步。不要调用工具。不要把未调用的工具写成 XML、命令块或伪 execute_command。"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "executor",
|
|
14
|
+
"type": "llm",
|
|
15
|
+
"config": {
|
|
16
|
+
"systemPrompt": "按上一份计划逐步执行。每一步只做一件事:调用 echo-tool,把该步原文放入 text。只通过平台提供的工具调用执行,不要在回复里写未调用的 XML、命令块或伪 execute_command。全部完成后直接用中文回复,不要再调用工具。"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "tools",
|
|
21
|
+
"type": "tool",
|
|
22
|
+
"config": {
|
|
23
|
+
"tool": "echo-tool"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"edges": [
|
|
28
|
+
{ "from": "__start__", "to": "planner" },
|
|
29
|
+
{ "from": "planner", "to": "executor" },
|
|
30
|
+
{ "from": "tools", "to": "executor" }
|
|
31
|
+
],
|
|
32
|
+
"conditionalEdges": [
|
|
33
|
+
{
|
|
34
|
+
"from": "executor",
|
|
35
|
+
"conditionFn": "shouldContinue",
|
|
36
|
+
"branches": [
|
|
37
|
+
{ "value": "call_tools", "to": "tools" },
|
|
38
|
+
{ "value": "finish", "to": "__end__" }
|
|
39
|
+
],
|
|
40
|
+
"fallback": "__end__"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"entryPoint": "planner",
|
|
44
|
+
"finishPoints": ["__end__"],
|
|
45
|
+
"config": {
|
|
46
|
+
"maxRetries": 3,
|
|
47
|
+
"checkpointStore": "memory"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
# 装配与执行 Skill
|
|
2
|
-
|
|
3
|
-
四种执行模式都可以装配 Skill,但装配与执行是两个步骤。
|
|
4
|
-
|
|
5
|
-
## 普通 SKILL.md 目录
|
|
6
|
-
|
|
7
|
-
1. 把含 `SKILL.md` 的目录放到 `skills/<name>/`,可同时包含 `scripts/`、`references/`。文件夹名与 frontmatter 的 `name` 保持一致;不要嵌套版本目录。
|
|
8
|
-
2. 在根级 `agent.manifest.json` 的 `skillRefs` 中追加 `{ "code": "<name>", "version": "1.0.0" }`,保留已有引用。本地版本来自 `SKILL.md` frontmatter,省略时为 `1.0.0`。
|
|
9
|
-
3. 确认 `eap.config.json` 的 `localSkillDirectories` 包含 `"./skills"`,重启本地运行以重新物化资源。
|
|
10
|
-
|
|
11
|
-
这种装配只需要 `SKILL.md`,无需额外 JSON 清单。可调用工具的 LLM 会获得 Skill 目录信息,通过 `read_file` 阅读正文、通过 `execute_command` 执行脚本。`disableTools: true` 的节点不能这样读取或执行 Skill。模型按文档使用脚本,不等于 Runtime 执行结构化 workflow。
|
|
12
|
-
|
|
13
|
-
## 作为子图执行的完整最小样例
|
|
14
|
-
|
|
15
|
-
本例创建 `request-summary`,由一个 code 节点整理用户请求,输出以“需求记录:”开头的助手消息。须设 `emitReply: true`,否则 `reply` 只出现在 tool 结果 JSON 里。不调用外部工具。
|
|
16
|
-
|
|
17
|
-
```text
|
|
18
|
-
skills/
|
|
19
|
-
request-summary/
|
|
20
|
-
SKILL.md
|
|
21
|
-
skill.manifest.json
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
创建 `skills/request-summary/SKILL.md`:
|
|
25
|
-
|
|
26
|
-
```markdown
|
|
27
|
-
---
|
|
28
|
-
name: request-summary
|
|
29
|
-
description: 整理用户原始请求,生成需求记录。
|
|
30
|
-
version: 1.0.0
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
把用户请求中的连续空白整理成一个空格,输出需求记录。
|
|
34
|
-
结构化执行入口在同目录 skill.manifest.json 的 workflow 字段中。
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
创建 `skills/request-summary/skill.manifest.json`:
|
|
38
|
-
|
|
39
|
-
```json
|
|
40
|
-
{
|
|
41
|
-
"code": "request-summary",
|
|
42
|
-
"name": "request-summary",
|
|
43
|
-
"version": "1.0.0",
|
|
44
|
-
"workflow": {
|
|
45
|
-
"nodes": [
|
|
46
|
-
{
|
|
47
|
-
"id": "record-request",
|
|
48
|
-
"type": "code",
|
|
49
|
-
"config": {
|
|
50
|
-
"timeoutMs": 1000,
|
|
51
|
-
"emitReply": true,
|
|
52
|
-
"code": "const messages = Array.isArray(state.messages) ? state.messages : []; let input = ''; for (let i = messages.length - 1; i >= 0; i--) { if (messages[i].role === 'user') { input = String(messages[i].content || ''); break; } } return { reply: '需求记录:' + input.replace(/\\s+/g, ' ').trim() };"
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
],
|
|
56
|
-
"edges": [
|
|
57
|
-
{
|
|
58
|
-
"from": "__start__",
|
|
59
|
-
"to": "record-request"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"from": "record-request",
|
|
63
|
-
"to": "__end__"
|
|
64
|
-
}
|
|
65
|
-
],
|
|
66
|
-
"entryPoint": "record-request",
|
|
67
|
-
"finishPoints": [
|
|
68
|
-
"__end__"
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
在 Agent 的 `skillRefs` 中追加:
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{ "code": "request-summary", "version": "1.0.0" }
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
这里的 `skill.manifest.json` 为子图提供结构化定义。当前 Runtime 从该清单的 `workflow`(也支持 `graph` / `definitionSnapshot`)读取图对象,**不会自动读取 Skill 目录中的独立 `graph.json`,也不会把 SKILL.md 的自然语言步骤编译成图**。
|
|
81
|
-
|
|
82
|
-
父图的节点必须绑定该 Skill:
|
|
83
|
-
|
|
84
|
-
```json
|
|
85
|
-
{
|
|
86
|
-
"id": "run-skill",
|
|
87
|
-
"type": "subgraph",
|
|
88
|
-
"config": { "skillCode": "request-summary" }
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
`skillCode` 必须与 `skillRefs[].code` 一致;不能只填写 `type: subgraph`。节点还需接入实际控制流,见下面的模板接法。
|
|
93
|
-
|
|
94
|
-
## 接到 Plan → Execute
|
|
95
|
-
|
|
96
|
-
默认 `executor` 的提示词只要求调用 `echo-tool`,它不会把任意计划步骤自动转换成 subgraph 调用。下面给出一个**固定两步计划**的接线示例,用于验证 Skill 执行:第一步执行 `request-summary`,第二步回显这份需求记录。
|
|
97
|
-
|
|
98
|
-
1. 在 `nodes` 中加入上面的 `run-skill`。
|
|
99
|
-
2. 将 `planner.config.systemPrompt` 改为:`为本示例输出固定的两步计划:第一步执行 request-summary 整理用户请求;第二步用 echo-tool 回显需求记录。不要调用工具。` 保持 `disableTools: true`。
|
|
100
|
-
3. 将 `executor.config.systemPrompt` 改为:`计划第一步 request-summary 已由上游子图完成。读取其需求记录,调用一次 echo-tool 回显该记录。收到结果后用中文报告完成,不要重复调用工具。`
|
|
101
|
-
4. 将 `planner → executor` 替换为下面的两条边,其他边、条件边、入口和结束配置保持原样:
|
|
102
|
-
|
|
103
|
-
```json
|
|
104
|
-
[
|
|
105
|
-
{ "from": "planner", "to": "run-skill" },
|
|
106
|
-
{ "from": "run-skill", "to": "executor" }
|
|
107
|
-
]
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
顺序为 `planner → run-skill → executor ⇄ tools`。Skill 每次请求只执行一次;不要把它接在 `tools → executor` 的循环上,否则每轮工具调用都会重复执行 Skill。
|
|
111
|
-
|
|
112
|
-
这个示例由图明确固定第一步。若要让任意动态计划中的某一步选择不同 Skill,需要另行实现计划步骤状态与 Skill 路由;默认模板没有这套调度。未接入子图的普通 Skill 仍可由支持工具的模型读取,但默认 executor 的 echo 专用提示词也需要按业务调整。
|
|
113
|
-
|
|
114
|
-
## 检查结果
|
|
115
|
-
|
|
116
|
-
改完文件后先执行 `eap validate`,再重启 `eap chat` / `eap dev`,输入“用户登录后导出月报”。应能看到 `request-summary` 的执行记录,以及“需求记录:用户登录后导出月报”的结果被后续步骤使用。
|
|
117
|
-
|
|
118
|
-
`eap validate` 能检查父图引用和连边,但通过校验不代表已验证 Skill workflow 的运行行为。若报“子图节点无法解析 Skill workflow”,检查清单中的 `workflow.nodes` 是否非空、`skillCode` 是否匹配、是否已重新物化资源。
|
|
119
|
-
|
|
120
|
-
示例是本地开发资源。上线前按平台要求登记、锁定和发布 Skill 及其依赖。
|
|
1
|
+
# 装配与执行 Skill
|
|
2
|
+
|
|
3
|
+
四种执行模式都可以装配 Skill,但装配与执行是两个步骤。
|
|
4
|
+
|
|
5
|
+
## 普通 SKILL.md 目录
|
|
6
|
+
|
|
7
|
+
1. 把含 `SKILL.md` 的目录放到 `skills/<name>/`,可同时包含 `scripts/`、`references/`。文件夹名与 frontmatter 的 `name` 保持一致;不要嵌套版本目录。
|
|
8
|
+
2. 在根级 `agent.manifest.json` 的 `skillRefs` 中追加 `{ "code": "<name>", "version": "1.0.0" }`,保留已有引用。本地版本来自 `SKILL.md` frontmatter,省略时为 `1.0.0`。
|
|
9
|
+
3. 确认 `eap.config.json` 的 `localSkillDirectories` 包含 `"./skills"`,重启本地运行以重新物化资源。
|
|
10
|
+
|
|
11
|
+
这种装配只需要 `SKILL.md`,无需额外 JSON 清单。可调用工具的 LLM 会获得 Skill 目录信息,通过 `read_file` 阅读正文、通过 `execute_command` 执行脚本。`disableTools: true` 的节点不能这样读取或执行 Skill。模型按文档使用脚本,不等于 Runtime 执行结构化 workflow。
|
|
12
|
+
|
|
13
|
+
## 作为子图执行的完整最小样例
|
|
14
|
+
|
|
15
|
+
本例创建 `request-summary`,由一个 code 节点整理用户请求,输出以“需求记录:”开头的助手消息。须设 `emitReply: true`,否则 `reply` 只出现在 tool 结果 JSON 里。不调用外部工具。
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
skills/
|
|
19
|
+
request-summary/
|
|
20
|
+
SKILL.md
|
|
21
|
+
skill.manifest.json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
创建 `skills/request-summary/SKILL.md`:
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
---
|
|
28
|
+
name: request-summary
|
|
29
|
+
description: 整理用户原始请求,生成需求记录。
|
|
30
|
+
version: 1.0.0
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
把用户请求中的连续空白整理成一个空格,输出需求记录。
|
|
34
|
+
结构化执行入口在同目录 skill.manifest.json 的 workflow 字段中。
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
创建 `skills/request-summary/skill.manifest.json`:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"code": "request-summary",
|
|
42
|
+
"name": "request-summary",
|
|
43
|
+
"version": "1.0.0",
|
|
44
|
+
"workflow": {
|
|
45
|
+
"nodes": [
|
|
46
|
+
{
|
|
47
|
+
"id": "record-request",
|
|
48
|
+
"type": "code",
|
|
49
|
+
"config": {
|
|
50
|
+
"timeoutMs": 1000,
|
|
51
|
+
"emitReply": true,
|
|
52
|
+
"code": "const messages = Array.isArray(state.messages) ? state.messages : []; let input = ''; for (let i = messages.length - 1; i >= 0; i--) { if (messages[i].role === 'user') { input = String(messages[i].content || ''); break; } } return { reply: '需求记录:' + input.replace(/\\s+/g, ' ').trim() };"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"edges": [
|
|
57
|
+
{
|
|
58
|
+
"from": "__start__",
|
|
59
|
+
"to": "record-request"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"from": "record-request",
|
|
63
|
+
"to": "__end__"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"entryPoint": "record-request",
|
|
67
|
+
"finishPoints": [
|
|
68
|
+
"__end__"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
在 Agent 的 `skillRefs` 中追加:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{ "code": "request-summary", "version": "1.0.0" }
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
这里的 `skill.manifest.json` 为子图提供结构化定义。当前 Runtime 从该清单的 `workflow`(也支持 `graph` / `definitionSnapshot`)读取图对象,**不会自动读取 Skill 目录中的独立 `graph.json`,也不会把 SKILL.md 的自然语言步骤编译成图**。
|
|
81
|
+
|
|
82
|
+
父图的节点必须绑定该 Skill:
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"id": "run-skill",
|
|
87
|
+
"type": "subgraph",
|
|
88
|
+
"config": { "skillCode": "request-summary" }
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`skillCode` 必须与 `skillRefs[].code` 一致;不能只填写 `type: subgraph`。节点还需接入实际控制流,见下面的模板接法。
|
|
93
|
+
|
|
94
|
+
## 接到 Plan → Execute
|
|
95
|
+
|
|
96
|
+
默认 `executor` 的提示词只要求调用 `echo-tool`,它不会把任意计划步骤自动转换成 subgraph 调用。下面给出一个**固定两步计划**的接线示例,用于验证 Skill 执行:第一步执行 `request-summary`,第二步回显这份需求记录。
|
|
97
|
+
|
|
98
|
+
1. 在 `nodes` 中加入上面的 `run-skill`。
|
|
99
|
+
2. 将 `planner.config.systemPrompt` 改为:`为本示例输出固定的两步计划:第一步执行 request-summary 整理用户请求;第二步用 echo-tool 回显需求记录。不要调用工具。` 保持 `disableTools: true`。
|
|
100
|
+
3. 将 `executor.config.systemPrompt` 改为:`计划第一步 request-summary 已由上游子图完成。读取其需求记录,调用一次 echo-tool 回显该记录。收到结果后用中文报告完成,不要重复调用工具。`
|
|
101
|
+
4. 将 `planner → executor` 替换为下面的两条边,其他边、条件边、入口和结束配置保持原样:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
[
|
|
105
|
+
{ "from": "planner", "to": "run-skill" },
|
|
106
|
+
{ "from": "run-skill", "to": "executor" }
|
|
107
|
+
]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
顺序为 `planner → run-skill → executor ⇄ tools`。Skill 每次请求只执行一次;不要把它接在 `tools → executor` 的循环上,否则每轮工具调用都会重复执行 Skill。
|
|
111
|
+
|
|
112
|
+
这个示例由图明确固定第一步。若要让任意动态计划中的某一步选择不同 Skill,需要另行实现计划步骤状态与 Skill 路由;默认模板没有这套调度。未接入子图的普通 Skill 仍可由支持工具的模型读取,但默认 executor 的 echo 专用提示词也需要按业务调整。
|
|
113
|
+
|
|
114
|
+
## 检查结果
|
|
115
|
+
|
|
116
|
+
改完文件后先执行 `eap validate`,再重启 `eap chat` / `eap dev`,输入“用户登录后导出月报”。应能看到 `request-summary` 的执行记录,以及“需求记录:用户登录后导出月报”的结果被后续步骤使用。
|
|
117
|
+
|
|
118
|
+
`eap validate` 能检查父图引用和连边,但通过校验不代表已验证 Skill workflow 的运行行为。若报“子图节点无法解析 Skill workflow”,检查清单中的 `workflow.nodes` 是否非空、`skillCode` 是否匹配、是否已重新物化资源。
|
|
119
|
+
|
|
120
|
+
示例是本地开发资源。上线前按平台要求登记、锁定和发布 Skill 及其依赖。
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
# 固定流程
|
|
2
|
-
|
|
3
|
-
步骤和边在图上固定。模型不选择下一条边。默认:code 整理输入后一次 LLM。无 ReAct 循环。
|
|
4
|
-
|
|
5
|
-
某一步可以是工具或已装配 Skill,须在图上写明。默认图未包含工具节点或 subgraph。装配 Skill 见 `skills/README.md`。
|
|
6
|
-
|
|
7
|
-
## 图结构
|
|
8
|
-
|
|
9
|
-
```text
|
|
10
|
-
┌─────────────────┐
|
|
11
|
-
╭───────────╮ ┌──────────────────┐ │ respond / llm · │ ╭─────────╮
|
|
12
|
-
│ __start__ ├───▶│ normalize / code ├───▶│ disableTools ├───▶│ __end__ │
|
|
13
|
-
╰───────────╯ └──────────────────┘ └─────────────────┘ ╰─────────╯
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
```mermaid
|
|
17
|
-
flowchart LR
|
|
18
|
-
start((__start__)) --> normalize[normalize / code]
|
|
19
|
-
normalize --> respond["respond / llm · disableTools"]
|
|
20
|
-
respond --> finish((__end__))
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
**适用**:固定步骤、一次模型回复。
|
|
24
|
-
|
|
25
|
-
**不适用**:模型按需选择工具。此类场景使用「单智能体与工具」模板。
|
|
26
|
-
|
|
27
|
-
整图超时:图上未写 `config.timeout` 时为 20 分钟。短任务可在图上写更短。
|
|
28
|
-
|
|
29
|
-
## 1. 配置
|
|
30
|
-
|
|
31
|
-
本地 `eap chat` 不要求 `eap login`。`runtime.llm` 会设置 `EAP_LLM_MODE=local`,用 `eap.config.json` 里的网关和 Token,不走 Foundation 模型路由。`platform.foundationServiceUrl` 默认是测试环境地址,给登录/发布用;纯本地可改为 `null`。
|
|
32
|
-
|
|
33
|
-
把 `runtime.llm.models.*.apiKey` 的 `sk-example-token` 换成与 `baseUrl` 一致的有效 Token,不要提交真实密钥。
|
|
34
|
-
|
|
35
|
-
| 项 | 要求 |
|
|
36
|
-
|----|------|
|
|
37
|
-
| `runtime.llm.models.*.apiKey` | 模板占位 `sk-example-token`,运行前替换 |
|
|
38
|
-
| `baseUrl` | 默认 `https://gtaiapi.gtcloud.cn/v1`。须与 Key 所属网关一致 |
|
|
39
|
-
| 生效 | 修改 `eap.config.json` 后重新启动 `eap chat` |
|
|
40
|
-
|
|
41
|
-
## 2. 占位符与密钥
|
|
42
|
-
|
|
43
|
-
模型密钥写在 `eap.config.json` 的 `runtime.llm.models.*.apiKey`,模板占位 `sk-example-token`。
|
|
44
|
-
|
|
45
|
-
| 环境 | 处理 |
|
|
46
|
-
|------|------|
|
|
47
|
-
| 本地 | 替换占位 Token;不要提交真实密钥 |
|
|
48
|
-
| 生产 | 不使用 `runtime.llm`(仅 `deploymentContext=dev`)。模型密钥由 Foundation 模型路由持有,不进入 Agent 包 |
|
|
49
|
-
|
|
50
|
-
华为云 UCS「配置项与密钥」中:**配置项**(ConfigMap)只存放 `FOUNDATION_SERVICE_URL`、`PORT` 等非敏感值;**密钥**(Secret)仅当该 Pod 必须持有敏感值,且须在工作负载中挂载。禁止将 API Key 写入配置项。
|
|
51
|
-
|
|
52
|
-
## 3. 运行
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
eap validate --strict
|
|
56
|
-
eap chat
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
`eap chat` 须在交互式终端中运行。启动摘要应为 `Runtime openai-http · mcp · dev`。
|
|
60
|
-
|
|
61
|
-
试跑:输入一句需要模型回答的中文请求。流程为整理空白后生成一次回复。
|
|
62
|
-
|
|
63
|
-
可选:`eap chat --verbose`;`eap dev` 启动 Playground。
|
|
64
|
-
|
|
65
|
-
## 4. 项目结构
|
|
66
|
-
|
|
67
|
-
```text
|
|
68
|
-
.
|
|
69
|
-
|-- agent.manifest.json
|
|
70
|
-
|-- graph.json
|
|
71
|
-
|-- eap.config.json
|
|
72
|
-
|-- eap.lock.yaml
|
|
73
|
-
|-- package.json
|
|
74
|
-
|-- .gitignore
|
|
75
|
-
`-- skills/README.md
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
`.eap/` 由运行时生成,不是源码。发布与部署以 Portal / Hosting 合同为准。
|
|
79
|
-
|
|
80
|
-
## 5. 故障排除
|
|
81
|
-
|
|
82
|
-
| 现象 | 处理 |
|
|
83
|
-
|------|------|
|
|
84
|
-
| `LLM API error 401` | Key 无效,或与 `baseUrl` 所属网关不一致 |
|
|
85
|
-
| 提示先执行 `eap login` | 升级 CLI。本地 `eap chat` 不要求登录 |
|
|
86
|
-
| 启动失败,提示 `no API key resolved` | 把 `eap.config.json` 的 `sk-example-token` 换成有效 Token |
|
|
87
|
-
| 请求进入 Foundation 模型路由 | `platform.foundationServiceUrl` 设为 `null`,并取消 `FOUNDATION_SERVICE_URL` |
|
|
1
|
+
# 固定流程
|
|
2
|
+
|
|
3
|
+
步骤和边在图上固定。模型不选择下一条边。默认:code 整理输入后一次 LLM。无 ReAct 循环。
|
|
4
|
+
|
|
5
|
+
某一步可以是工具或已装配 Skill,须在图上写明。默认图未包含工具节点或 subgraph。装配 Skill 见 `skills/README.md`。
|
|
6
|
+
|
|
7
|
+
## 图结构
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
┌─────────────────┐
|
|
11
|
+
╭───────────╮ ┌──────────────────┐ │ respond / llm · │ ╭─────────╮
|
|
12
|
+
│ __start__ ├───▶│ normalize / code ├───▶│ disableTools ├───▶│ __end__ │
|
|
13
|
+
╰───────────╯ └──────────────────┘ └─────────────────┘ ╰─────────╯
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart LR
|
|
18
|
+
start((__start__)) --> normalize[normalize / code]
|
|
19
|
+
normalize --> respond["respond / llm · disableTools"]
|
|
20
|
+
respond --> finish((__end__))
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**适用**:固定步骤、一次模型回复。
|
|
24
|
+
|
|
25
|
+
**不适用**:模型按需选择工具。此类场景使用「单智能体与工具」模板。
|
|
26
|
+
|
|
27
|
+
整图超时:图上未写 `config.timeout` 时为 20 分钟。短任务可在图上写更短。
|
|
28
|
+
|
|
29
|
+
## 1. 配置
|
|
30
|
+
|
|
31
|
+
本地 `eap chat` 不要求 `eap login`。`runtime.llm` 会设置 `EAP_LLM_MODE=local`,用 `eap.config.json` 里的网关和 Token,不走 Foundation 模型路由。`platform.foundationServiceUrl` 默认是测试环境地址,给登录/发布用;纯本地可改为 `null`。
|
|
32
|
+
|
|
33
|
+
把 `runtime.llm.models.*.apiKey` 的 `sk-example-token` 换成与 `baseUrl` 一致的有效 Token,不要提交真实密钥。
|
|
34
|
+
|
|
35
|
+
| 项 | 要求 |
|
|
36
|
+
|----|------|
|
|
37
|
+
| `runtime.llm.models.*.apiKey` | 模板占位 `sk-example-token`,运行前替换 |
|
|
38
|
+
| `baseUrl` | 默认 `https://gtaiapi.gtcloud.cn/v1`。须与 Key 所属网关一致 |
|
|
39
|
+
| 生效 | 修改 `eap.config.json` 后重新启动 `eap chat` |
|
|
40
|
+
|
|
41
|
+
## 2. 占位符与密钥
|
|
42
|
+
|
|
43
|
+
模型密钥写在 `eap.config.json` 的 `runtime.llm.models.*.apiKey`,模板占位 `sk-example-token`。
|
|
44
|
+
|
|
45
|
+
| 环境 | 处理 |
|
|
46
|
+
|------|------|
|
|
47
|
+
| 本地 | 替换占位 Token;不要提交真实密钥 |
|
|
48
|
+
| 生产 | 不使用 `runtime.llm`(仅 `deploymentContext=dev`)。模型密钥由 Foundation 模型路由持有,不进入 Agent 包 |
|
|
49
|
+
|
|
50
|
+
华为云 UCS「配置项与密钥」中:**配置项**(ConfigMap)只存放 `FOUNDATION_SERVICE_URL`、`PORT` 等非敏感值;**密钥**(Secret)仅当该 Pod 必须持有敏感值,且须在工作负载中挂载。禁止将 API Key 写入配置项。
|
|
51
|
+
|
|
52
|
+
## 3. 运行
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
eap validate --strict
|
|
56
|
+
eap chat
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`eap chat` 须在交互式终端中运行。启动摘要应为 `Runtime openai-http · mcp · dev`。
|
|
60
|
+
|
|
61
|
+
试跑:输入一句需要模型回答的中文请求。流程为整理空白后生成一次回复。
|
|
62
|
+
|
|
63
|
+
可选:`eap chat --verbose`;`eap dev` 启动 Playground。
|
|
64
|
+
|
|
65
|
+
## 4. 项目结构
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
.
|
|
69
|
+
|-- agent.manifest.json
|
|
70
|
+
|-- graph.json
|
|
71
|
+
|-- eap.config.json
|
|
72
|
+
|-- eap.lock.yaml
|
|
73
|
+
|-- package.json
|
|
74
|
+
|-- .gitignore
|
|
75
|
+
`-- skills/README.md
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`.eap/` 由运行时生成,不是源码。发布与部署以 Portal / Hosting 合同为准。
|
|
79
|
+
|
|
80
|
+
## 5. 故障排除
|
|
81
|
+
|
|
82
|
+
| 现象 | 处理 |
|
|
83
|
+
|------|------|
|
|
84
|
+
| `LLM API error 401` | Key 无效,或与 `baseUrl` 所属网关不一致 |
|
|
85
|
+
| 提示先执行 `eap login` | 升级 CLI。本地 `eap chat` 不要求登录 |
|
|
86
|
+
| 启动失败,提示 `no API key resolved` | 把 `eap.config.json` 的 `sk-example-token` 换成有效 Token |
|
|
87
|
+
| 请求进入 Foundation 模型路由 | `platform.foundationServiceUrl` 设为 `null`,并取消 `FOUNDATION_SERVICE_URL` |
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"code": "my-agent",
|
|
3
|
-
"name": "my-agent",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"description": "固定流程:整理输入后一次 LLM,无工具循环",
|
|
6
|
-
"toolRefs": [],
|
|
7
|
-
"skillRefs": [],
|
|
8
|
-
"prompts": {
|
|
9
|
-
"system": "你是顺序工作流助手。用中文回答。"
|
|
10
|
-
},
|
|
11
|
-
"models": {
|
|
12
|
-
"default": "DeepSeek-V4-Pro",
|
|
13
|
-
"allowed": ["DeepSeek-V4-Pro", "DeepSeek-V4-Flash"]
|
|
14
|
-
},
|
|
15
|
-
"metadata": {
|
|
16
|
-
"owner": "agent-template",
|
|
17
|
-
"tags": ["template"]
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"code": "my-agent",
|
|
3
|
+
"name": "my-agent",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"description": "固定流程:整理输入后一次 LLM,无工具循环",
|
|
6
|
+
"toolRefs": [],
|
|
7
|
+
"skillRefs": [],
|
|
8
|
+
"prompts": {
|
|
9
|
+
"system": "你是顺序工作流助手。用中文回答。"
|
|
10
|
+
},
|
|
11
|
+
"models": {
|
|
12
|
+
"default": "DeepSeek-V4-Pro",
|
|
13
|
+
"allowed": ["DeepSeek-V4-Pro", "DeepSeek-V4-Flash"]
|
|
14
|
+
},
|
|
15
|
+
"metadata": {
|
|
16
|
+
"owner": "agent-template",
|
|
17
|
+
"tags": ["template"]
|
|
18
|
+
}
|
|
19
|
+
}
|