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

6.6 KiB
Raw Blame History

创建Agent经验总结实战版

基于本仓库实际落地的 Android应用开发助手(已发布可用)沉淀:从“想法→工作流→落库→发布→验证→避坑”一套流程。

1. 目标与验收标准

  • 目标:在 Agent 管理页面出现一个“可运行/可使用”的 Agent并且能通过 /api/v1/executions 正常触发执行并拿到结果。
  • 关键验收
    • 状态Agent 为 publishedrunning(否则普通用户无法执行)
    • 工作流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.pyAndroid应用开发助手
    • backend/scripts/generate_content_agent.py(内容生成助手)

3. Agent 能不能“运行”,最关键的规则

3.1 Agent 状态与执行权限

后端创建执行时会做状态校验:非 owner 执行必须是 published/running

对应代码(要点:状态不对会 403

        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.pycreate_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 的边

                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

运行方式:

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. 发起执行:
POST /api/v1/executions
{
  "agent_id": "你的agent_id",
  "input_data": {
    "query": "帮我生成一个登录页",
    "USER_INPUT": "帮我生成一个登录页"
  }
}
  1. 轮询状态:
  • GET /api/v1/executions/{execution_id}/status
  1. 获取结果:
  • 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. 本次落地成果(可复用资产)

  • 可运行 AgentAndroid应用开发助手脚本创建状态 published
  • 生成脚本backend/scripts/generate_android_agent.py
  • Prompt 方案文档androidExampleDemo/多功能android应用智能体的提示词.md

最后更新2026-01-20