Files
aiagent/创建Agent经验总结.md
2026-01-20 18:05:31 +08:00

187 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 创建Agent经验总结实战版
> 基于本仓库实际落地的 **Android应用开发助手**(已发布可用)沉淀:从“想法→工作流→落库→发布→验证→避坑”一套流程。
## 1. 目标与验收标准
- **目标**:在 Agent 管理页面出现一个“可运行/可使用”的 Agent并且能通过 `/api/v1/executions` 正常触发执行并拿到结果。
- **关键验收**
- **状态**Agent 为 `published``running`(否则普通用户无法执行)
- **工作流**`workflow_config` 必须包含合法的 `nodes` / `edges`,能从 `start` 走到 `end`
- **数据链路**LLM prompt 能正确拿到用户输入(一般是 `{{query}}` / `{{user_query}}`
## 2. 两种创建方式UI vs 脚本
### 2.1 UI 创建(适合调试)
- 优点:所见即所得、方便调整 prompt/连线/节点参数
- 缺点:重复劳动多,不利于批量/版本化
### 2.2 脚本创建推荐用于“生成一批可运行Agent/一键复现”)
- 典型做法:写一个 `backend/scripts/generate_xxx_agent.py`,直接用 SQLAlchemy 创建或更新 Agent。
- 本仓库示例:
- `backend/scripts/generate_android_agent.py`Android应用开发助手
- `backend/scripts/generate_content_agent.py`(内容生成助手)
## 3. Agent 能不能“运行”,最关键的规则
### 3.1 Agent 状态与执行权限
后端创建执行时会做状态校验:**非 owner 执行必须是 `published/running`**。
对应代码(要点:状态不对会 403
```103:104:backend/app/api/executions.py
if agent.status not in ["published", "running"] and agent.user_id != current_user.id:
raise HTTPException(status_code=403, detail="Agent未发布或无权执行")
```
**经验**
- 如果你希望“创建出来立刻可用”,脚本里就直接写 `status="published"`。
- 如果你希望“先草稿”,脚本里写 `draft`,但要用 owner 测试或再部署发布。
### 3.2 workflow_config 的最低要求
- 必须包含:
- `nodes`: 节点数组
- `edges`: 连线数组
- 且能通过校验(创建接口会校验):
- 参考:`backend/app/api/agents.py` 中 `create_agent` 会调用 `validate_workflow(...)`
**经验**
- 最小可运行工作流:`start -> llm -> end`
- 复杂工作流建议:`start -> 分析(llm) -> 分流(condition) -> 子分支(llm/transform) -> 汇总(transform) -> 输出优化(llm) -> end`
## 4. 数据流转与 Prompt 设计(决定“是否答非所问”)
### 4.1 输入字段命名建议
本平台执行 Agent 时,常见输入会放在:
- `query`
- `USER_INPUT`
Android 示例项目也是这样发起的:
- `query = 用户输入`
- `USER_INPUT = 用户输入`
**经验**
- prompt 里优先用 `{{query}}`(平台链路更稳定)
- 如果你做了 transform 映射,可统一成 `user_query` 再用 `{{user_query}}`
### 4.2 先分析、再生成:降低跑偏
常见稳定结构:
- 第 1 个 LLM**需求抽取/结构化**JSON 输出)
- 后续 LLM拿着“结构化需求 + 原始需求”做生成/诊断/优化
这样可以显著减少“答非所问”,也便于条件分支与 transform 做数据拼接。
## 5. 条件分支的关键坑:`sourceHandle`
条件节点“走哪个分支”,靠 edge 的 `sourceHandle` 来区分(例如 `true` / `false`)。
对应引擎逻辑(要点:**只保留 sourceHandle == branch 的边**
```1936:1961:backend/app/services/workflow_engine.py
if node.get('type') == 'condition':
branch = result.get('branch', 'false')
# 只保留:不是从条件节点出发的边,或 从条件节点出发且sourceHandle匹配分支的边
edges_to_remove = []
edges_to_keep = []
for edge in active_edges:
if edge['source'] == next_node_id:
edge_handle = edge.get('sourceHandle')
if edge_handle == branch:
edges_to_keep.append(edge)
else:
edges_to_remove.append(edge)
else:
edges_to_keep.append(edge)
active_edges = edges_to_keep
```
**经验**
- 条件节点的出边必须带 `sourceHandle`,而且值要与引擎产出的 `branch` 完全一致(常用:`true`/`false`
- 否则会出现:
- 分支全跑 / 分支全不跑 / 走错分支
## 6. 用脚本创建“可运行Agent”的推荐模板
核心点:
- 查用户owner
- 构造 `nodes/edges`
- 若同名存在则更新,否则创建
- 设置 `status="published"`
本仓库可直接复用(已验证创建成功):
- `backend/scripts/generate_android_agent.py`
运行方式:
```bash
cd /home/renjianbo/aiagent
python3 backend/scripts/generate_android_agent.py
```
运行后会输出 Agent ID、节点数、边数且状态为 `published`。
## 7. 如何验证 Agent “真的可运行”
### 7.1 前端验证
- 进入 **Agent管理**
- 找到 Agent例如Android应用开发助手
- 状态为 **已发布/运行中**
- 点击 **使用**,输入一句话触发执行
### 7.2 API 验证(推荐可自动化)
1) 登录获取 tokenform-urlencoded
2) 发起执行:
```json
POST /api/v1/executions
{
"agent_id": "你的agent_id",
"input_data": {
"query": "帮我生成一个登录页",
"USER_INPUT": "帮我生成一个登录页"
}
}
```
3) 轮询状态:
- `GET /api/v1/executions/{execution_id}/status`
4) 获取结果:
- `GET /api/v1/executions/{execution_id}`
## 8. 常见问题与排查清单
- **Agent 列表里看到了,但点“使用”无权限/403**
- 检查 `status` 是否为 `published/running`
- 是否为 owner 在测试草稿
- **LLM 输出跑偏/答非所问**
- 是否把用户输入稳定透传到了 `{{query}}`
- 是否先做“需求结构化”再生成
- prompt 是否过泛、缺少输出格式约束
- **条件节点后续分支乱跑**
- 检查条件节点出边是否有 `sourceHandle=true/false`
- 检查引擎分支值是否与 sourceHandle 对齐
- **输出结构混乱**
- 建议末端增加 `llm-format` 做统一 Markdown 格式化
- end 节点尽量只输出最终 `output` 字段(不要拼接用户 query
## 9. 本次落地成果(可复用资产)
- **可运行 Agent**Android应用开发助手脚本创建状态 `published`
- **生成脚本**`backend/scripts/generate_android_agent.py`
- **Prompt 方案文档**`androidExampleDemo/多功能android应用智能体的提示词.md`
---
最后更新2026-01-20