1385 lines
22 KiB
Markdown
1385 lines
22 KiB
Markdown
|
|
# 创建Agent经验总结
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 📋 目录
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
1. [创建Agent的完整流程](#创建agent的完整流程)
|
|||
|
|
|
|||
|
|
2. [工作流设计经验](#工作流设计经验)
|
|||
|
|
|
|||
|
|
3. [节点配置要点](#节点配置要点)
|
|||
|
|
|
|||
|
|
4. [Prompt设计技巧](#prompt设计技巧)
|
|||
|
|
|
|||
|
|
5. [数据流转与上下文传递](#数据流转与上下文传递)
|
|||
|
|
|
|||
|
|
6. [常见问题和解决方案](#常见问题和解决方案)
|
|||
|
|
|
|||
|
|
7. [最佳实践](#最佳实践)
|
|||
|
|
|
|||
|
|
8. [实战案例](#实战案例)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 创建Agent的完整流程
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 1. 准备工作
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 1.1 明确Agent目标
|
|||
|
|
|
|||
|
|
- **功能定位**:确定Agent要解决什么问题
|
|||
|
|
|
|||
|
|
- **目标用户**:明确使用场景和用户群体
|
|||
|
|
|
|||
|
|
- **输出格式**:确定最终输出的格式(文本、JSON、Markdown等)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 1.2 设计工作流结构
|
|||
|
|
|
|||
|
|
- 绘制工作流流程图
|
|||
|
|
|
|||
|
|
- 确定节点类型和数量
|
|||
|
|
|
|||
|
|
- 规划数据流转路径
|
|||
|
|
|
|||
|
|
- 考虑分支和合并逻辑
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 1.3 准备Prompt模板
|
|||
|
|
|
|||
|
|
- 为每个LLM节点准备详细的Prompt
|
|||
|
|
|
|||
|
|
- 考虑上下文传递和变量替换
|
|||
|
|
|
|||
|
|
- 明确输出格式要求
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 2. 编写生成脚本
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 2.1 脚本结构模板
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
#!/usr/bin/env python3
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
生成[Agent名称]Agent
|
|||
|
|
|
|||
|
|
[Agent功能描述]
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import sys
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
from sqlalchemy.orm import Session
|
|||
|
|
|
|||
|
|
from app.core.database import SessionLocal
|
|||
|
|
|
|||
|
|
from app.models.agent import Agent
|
|||
|
|
|
|||
|
|
from app.models.user import User
|
|||
|
|
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
import uuid
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
def generate_xxx_agent(db: Session, username: str = "admin"):
|
|||
|
|
|
|||
|
|
"""生成[Agent名称]Agent"""
|
|||
|
|
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
print("生成[Agent名称]Agent")
|
|||
|
|
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 1. 查找用户
|
|||
|
|
|
|||
|
|
user = db.query(User).filter(User.username == username).first()
|
|||
|
|
|
|||
|
|
if not user:
|
|||
|
|
|
|||
|
|
print(f"❌ 未找到用户 '{username}',请先创建该用户")
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
print(f"✅ 找到用户: {user.username} (ID: {user.id})")
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 2. 创建工作流配置
|
|||
|
|
|
|||
|
|
nodes = []
|
|||
|
|
|
|||
|
|
edges = []
|
|||
|
|
|
|||
|
|
# 3. 添加节点
|
|||
|
|
|
|||
|
|
# ... 节点配置 ...
|
|||
|
|
|
|||
|
|
# 4. 添加连接
|
|||
|
|
|
|||
|
|
# ... 边配置 ...
|
|||
|
|
|
|||
|
|
# 5. 创建或更新Agent
|
|||
|
|
|
|||
|
|
workflow_config = {
|
|||
|
|
|
|||
|
|
"nodes": nodes,
|
|||
|
|
|
|||
|
|
"edges": edges
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
agent = db.query(Agent).filter(
|
|||
|
|
|
|||
|
|
Agent.name == "[Agent名称]",
|
|||
|
|
|
|||
|
|
Agent.user_id == user.id
|
|||
|
|
|
|||
|
|
).first()
|
|||
|
|
|
|||
|
|
if agent:
|
|||
|
|
|
|||
|
|
# 更新现有Agent
|
|||
|
|
|
|||
|
|
agent.workflow_config = workflow_config
|
|||
|
|
|
|||
|
|
agent.updated_at = datetime.now()
|
|||
|
|
|
|||
|
|
agent.status = "published" # 设置为已发布
|
|||
|
|
|
|||
|
|
print("⚠️ Agent已存在,将更新它...")
|
|||
|
|
|
|||
|
|
else:
|
|||
|
|
|
|||
|
|
# 创建新Agent
|
|||
|
|
|
|||
|
|
agent = Agent(
|
|||
|
|
|
|||
|
|
id=str(uuid.uuid4()),
|
|||
|
|
|
|||
|
|
name="[Agent名称]",
|
|||
|
|
|
|||
|
|
description="[Agent描述]",
|
|||
|
|
|
|||
|
|
workflow_config=workflow_config,
|
|||
|
|
|
|||
|
|
status="published", # 直接设置为已发布,可立即使用
|
|||
|
|
|
|||
|
|
user_id=user.id,
|
|||
|
|
|
|||
|
|
version=1
|
|||
|
|
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
db.add(agent)
|
|||
|
|
|
|||
|
|
# 6. 提交并输出结果
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
|
|||
|
|
db.commit()
|
|||
|
|
|
|||
|
|
db.refresh(agent)
|
|||
|
|
|
|||
|
|
print("✅ Agent创建/更新成功!")
|
|||
|
|
|
|||
|
|
print(f" - ID: {agent.id}")
|
|||
|
|
|
|||
|
|
print(f" - 状态: {agent.status}")
|
|||
|
|
|
|||
|
|
return agent
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
|
|||
|
|
db.rollback()
|
|||
|
|
|
|||
|
|
print(f"❌ 创建Agent失败: {str(e)}")
|
|||
|
|
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
|
|||
|
|
"""主函数"""
|
|||
|
|
|
|||
|
|
db = SessionLocal()
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
|
|||
|
|
generate_xxx_agent(db, username="admin")
|
|||
|
|
|
|||
|
|
finally:
|
|||
|
|
|
|||
|
|
db.close()
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
|
|||
|
|
main()
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 3. 执行脚本
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
|
|||
|
|
# 1. 添加执行权限
|
|||
|
|
|
|||
|
|
chmod +x backend/scripts/generate_xxx_agent.py
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 2. 运行脚本
|
|||
|
|
|
|||
|
|
python3 backend/scripts/generate_xxx_agent.py
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 4. 验证和测试
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
- 在Agent管理页面查看创建的Agent
|
|||
|
|
|
|||
|
|
- 使用"使用"按钮测试Agent功能
|
|||
|
|
|
|||
|
|
- 根据测试结果调整Prompt和工作流
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 工作流设计经验
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 1. 常见工作流模式
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 模式1:线性流程
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
开始 → 处理1 → 处理2 → 处理3 → 结束
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**适用场景**:简单的顺序处理任务
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 模式2:分支流程
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
开始 → 分析 → 条件判断 → [分支A | 分支B] → 整合 → 结束
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**适用场景**:需要根据条件选择不同处理路径
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 模式3:并行处理
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
开始 → 分析 → [处理A | 处理B | 处理C] → 整合 → 结束
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**适用场景**:多个独立任务可以并行执行
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 模式4:循环处理
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
开始 → 循环开始 → 处理 → 条件判断 → [继续循环 | 退出] → 结束
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**适用场景**:需要重复处理的数据
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 2. 节点布局建议
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 2.1 位置规划
|
|||
|
|
|
|||
|
|
- **X轴间距**:建议200-250像素,确保节点不重叠
|
|||
|
|
|
|||
|
|
- **Y轴间距**:分支节点建议100-150像素
|
|||
|
|
|
|||
|
|
- **起始位置**:开始节点建议 (50, 300-400)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 2.2 布局示例
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
# 线性布局
|
|||
|
|
|
|||
|
|
start_node = {"position": {"x": 50, "y": 400}}
|
|||
|
|
|
|||
|
|
node1 = {"position": {"x": 250, "y": 400}}
|
|||
|
|
|
|||
|
|
node2 = {"position": {"x": 450, "y": 400}}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 分支布局
|
|||
|
|
|
|||
|
|
condition_node = {"position": {"x": 450, "y": 400}}
|
|||
|
|
|
|||
|
|
branch_true = {"position": {"x": 650, "y": 300}} # 上分支
|
|||
|
|
|
|||
|
|
branch_false = {"position": {"x": 650, "y": 500}} # 下分支
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 3. 工作流设计原则
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 3.1 单一职责原则
|
|||
|
|
|
|||
|
|
- 每个节点只负责一个明确的任务
|
|||
|
|
|
|||
|
|
- 避免在一个节点中做太多事情
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 3.2 数据流清晰
|
|||
|
|
|
|||
|
|
- 明确每个节点的输入和输出
|
|||
|
|
|
|||
|
|
- 使用Transform节点整理数据
|
|||
|
|
|
|||
|
|
- 避免数据丢失或混乱
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 3.3 错误处理
|
|||
|
|
|
|||
|
|
- 考虑异常情况的处理
|
|||
|
|
|
|||
|
|
- 提供默认分支
|
|||
|
|
|
|||
|
|
- 添加错误提示节点(可选)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 3.4 可扩展性
|
|||
|
|
|
|||
|
|
- 预留扩展点
|
|||
|
|
|
|||
|
|
- 使用条件节点支持多种场景
|
|||
|
|
|
|||
|
|
- 保持工作流的灵活性
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 节点配置要点
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 1. 开始节点 (start)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
start_node = {
|
|||
|
|
|
|||
|
|
"id": "start-1", # 唯一ID,建议使用 start-1, start-2 等
|
|||
|
|
|
|||
|
|
"type": "start",
|
|||
|
|
|
|||
|
|
"position": {"x": 50, "y": 400},
|
|||
|
|
|
|||
|
|
"data": {
|
|||
|
|
|
|||
|
|
"label": "开始",
|
|||
|
|
|
|||
|
|
"output_format": "json" # 可选:json 或 text
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
**要点**:
|
|||
|
|
|
|||
|
|
- ID必须唯一
|
|||
|
|
|
|||
|
|
- `output_format` 决定后续节点如何接收数据
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 2. LLM节点 (llm)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
llm_node = {
|
|||
|
|
|
|||
|
|
"id": "llm-xxx",
|
|||
|
|
|
|||
|
|
"type": "llm",
|
|||
|
|
|
|||
|
|
"position": {"x": 250, "y": 400},
|
|||
|
|
|
|||
|
|
"data": {
|
|||
|
|
|
|||
|
|
"label": "节点名称",
|
|||
|
|
|
|||
|
|
"provider": "deepseek", # 或 "openai"
|
|||
|
|
|
|||
|
|
"model": "deepseek-chat", # 模型名称
|
|||
|
|
|
|||
|
|
"temperature": "0.3", # 温度参数,字符串格式
|
|||
|
|
|
|||
|
|
"max_tokens": "2000", # 最大token数,字符串格式
|
|||
|
|
|
|||
|
|
"prompt": """你的Prompt内容
|
|||
|
|
|
|||
|
|
使用 {{variable}} 引用变量
|
|||
|
|
|
|||
|
|
使用 {{query}} 引用用户输入
|
|||
|
|
|
|||
|
|
使用 {{output}} 引用上一个节点的输出"""
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
**要点**:
|
|||
|
|
|
|||
|
|
- `temperature` 和 `max_tokens` 必须是字符串
|
|||
|
|
|
|||
|
|
- Prompt中使用 `{{variable}}` 进行变量替换
|
|||
|
|
|
|||
|
|
- 明确指定输出格式要求(JSON、Markdown等)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 3. 条件节点 (condition)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
condition_node = {
|
|||
|
|
|
|||
|
|
"id": "condition-xxx",
|
|||
|
|
|
|||
|
|
"type": "condition",
|
|||
|
|
|
|||
|
|
"position": {"x": 450, "y": 400},
|
|||
|
|
|
|||
|
|
"data": {
|
|||
|
|
|
|||
|
|
"label": "条件判断",
|
|||
|
|
|
|||
|
|
"condition": "{variable} contains '关键词' or {variable} contains '另一个关键词'"
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
**要点**:
|
|||
|
|
|
|||
|
|
- 条件表达式使用 `{variable}` 引用变量
|
|||
|
|
|
|||
|
|
- 支持 `contains`、`==`、`!=` 等操作符
|
|||
|
|
|
|||
|
|
- 支持 `and`、`or` 逻辑运算符
|
|||
|
|
|
|||
|
|
- 连接边需要指定 `sourceHandle`:`"true"` 或 `"false"`
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 4. Transform节点 (transform)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
transform_node = {
|
|||
|
|
|
|||
|
|
"id": "transform-xxx",
|
|||
|
|
|
|||
|
|
"type": "transform",
|
|||
|
|
|
|||
|
|
"position": {"x": 650, "y": 400},
|
|||
|
|
|
|||
|
|
"data": {
|
|||
|
|
|
|||
|
|
"label": "数据转换",
|
|||
|
|
|
|||
|
|
"mode": "merge", # 或 "replace"、"extract"
|
|||
|
|
|
|||
|
|
"mapping": {
|
|||
|
|
|
|||
|
|
"key1": "{{variable1}}",
|
|||
|
|
|
|||
|
|
"key2": "{{variable2}}",
|
|||
|
|
|
|||
|
|
"key3": "{{output}}"
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
**要点**:
|
|||
|
|
|
|||
|
|
- `mode: "merge"` 用于合并多个数据源
|
|||
|
|
|
|||
|
|
- `mode: "replace"` 用于替换整个数据
|
|||
|
|
|
|||
|
|
- `mode: "extract"` 用于提取特定字段
|
|||
|
|
|
|||
|
|
- 使用 `{{variable}}` 引用变量
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 5. 结束节点 (end)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
end_node = {
|
|||
|
|
|
|||
|
|
"id": "end-1",
|
|||
|
|
|
|||
|
|
"type": "end",
|
|||
|
|
|
|||
|
|
"position": {"x": 1450, "y": 400},
|
|||
|
|
|
|||
|
|
"data": {
|
|||
|
|
|
|||
|
|
"label": "结束",
|
|||
|
|
|
|||
|
|
"description": "返回最终结果"
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
**要点**:
|
|||
|
|
|
|||
|
|
- 结束节点会返回最终输出
|
|||
|
|
|
|||
|
|
- 可以设置 `output_format` 控制输出格式
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 6. 连接边 (edges)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
# 普通连接
|
|||
|
|
|
|||
|
|
edge = {
|
|||
|
|
|
|||
|
|
"id": "e1", # 唯一ID
|
|||
|
|
|
|||
|
|
"source": "start-1", # 源节点ID
|
|||
|
|
|
|||
|
|
"target": "llm-xxx" # 目标节点ID
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 条件分支连接
|
|||
|
|
|
|||
|
|
edge_true = {
|
|||
|
|
|
|||
|
|
"id": "e2-true",
|
|||
|
|
|
|||
|
|
"source": "condition-xxx",
|
|||
|
|
|
|||
|
|
"target": "branch-true",
|
|||
|
|
|
|||
|
|
"sourceHandle": "true" # true分支
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
edge_false = {
|
|||
|
|
|
|||
|
|
"id": "e2-false",
|
|||
|
|
|
|||
|
|
"source": "condition-xxx",
|
|||
|
|
|
|||
|
|
"target": "branch-false",
|
|||
|
|
|
|||
|
|
"sourceHandle": "false" # false分支
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
**要点**:
|
|||
|
|
|
|||
|
|
- 每个边必须有唯一的ID
|
|||
|
|
|
|||
|
|
- 条件节点的分支必须指定 `sourceHandle`
|
|||
|
|
|
|||
|
|
- 确保所有节点都有正确的连接
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## Prompt设计技巧
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 1. Prompt结构
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 1.1 角色定位
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
你是一个专业的[角色],请[任务描述]。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**示例**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
你是一个专业的Android开发顾问。请分析用户的需求,提取关键信息。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 1.2 任务说明
|
|||
|
|
|
|||
|
|
- 明确任务目标
|
|||
|
|
|
|||
|
|
- 列出具体要求
|
|||
|
|
|
|||
|
|
- 提供输出格式示例
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 1.3 上下文信息
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
用户需求:{{query}}
|
|||
|
|
|
|||
|
|
需求分析结果:{{requirement_analysis}}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 1.4 输出要求
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
请以JSON格式输出分析结果:
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
"key1": "value1",
|
|||
|
|
|
|||
|
|
"key2": "value2"
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 2. 变量使用
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 2.1 常用变量
|
|||
|
|
|
|||
|
|
- `{{query}}` - 用户原始输入
|
|||
|
|
|
|||
|
|
- `{{user_query}}` - 用户查询(可能经过处理)
|
|||
|
|
|
|||
|
|
- `{{output}}` - 上一个节点的输出
|
|||
|
|
|
|||
|
|
- `{{variable_name}}` - 自定义变量(通过Transform节点传递)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 2.2 变量引用示例
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
"prompt": """用户需求:{{query}}
|
|||
|
|
|
|||
|
|
需求分析:{{requirement_analysis}}
|
|||
|
|
|
|||
|
|
请根据以上信息生成代码。"""
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 3. 输出格式控制
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 3.1 JSON格式
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
请以JSON格式输出:
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
"field1": "value1",
|
|||
|
|
|
|||
|
|
"field2": ["item1", "item2"]
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
请确保输出是有效的JSON格式。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 3.2 Markdown格式
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
请以Markdown格式输出,包含:
|
|||
|
|
|
|||
|
|
1. 标题
|
|||
|
|
|
|||
|
|
2. 代码块(使用正确的语言标识)
|
|||
|
|
|
|||
|
|
3. 列表
|
|||
|
|
|
|||
|
|
4. 表格(如需要)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 3.3 纯文本格式
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
请直接输出优化后的完整内容(纯文本格式)。
|
|||
|
|
|
|||
|
|
不要包含JSON格式或其他包装。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 4. 温度参数选择
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
| 场景 | Temperature | 说明 |
|
|||
|
|
|
|||
|
|
|------|------------|------|
|
|||
|
|
|
|||
|
|
| 代码生成 | 0.2-0.3 | 需要准确、一致的输出 |
|
|||
|
|
|
|||
|
|
| 需求分析 | 0.3-0.5 | 需要平衡准确性和灵活性 |
|
|||
|
|
|
|||
|
|
| 创意内容 | 0.7-0.9 | 需要多样性和创造性 |
|
|||
|
|
|
|||
|
|
| 格式化输出 | 0.1-0.2 | 需要严格按照格式要求 |
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 5. Token限制
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
| 任务类型 | Max Tokens | 说明 |
|
|||
|
|
|
|||
|
|
|---------|-----------|------|
|
|||
|
|
|
|||
|
|
| 简单分析 | 1000-2000 | 简短的分析和提取 |
|
|||
|
|
|
|||
|
|
| 代码生成 | 3000-4000 | 完整的代码文件 |
|
|||
|
|
|
|||
|
|
| 长文档生成 | 4000-8000 | 长篇文章或文档 |
|
|||
|
|
|
|||
|
|
| 格式化输出 | 2000-4000 | 整理和格式化内容 |
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 数据流转与上下文传递
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 1. 数据流转路径
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
开始节点 → LLM节点 → Transform节点 → 条件节点 → LLM节点 → 结束节点
|
|||
|
|
|
|||
|
|
↓ ↓ ↓ ↓ ↓ ↓
|
|||
|
|
|
|||
|
|
query output merged_data condition solution final_output
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 2. 上下文传递策略
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 2.1 使用Transform节点合并数据
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
transform_node = {
|
|||
|
|
|
|||
|
|
"data": {
|
|||
|
|
|
|||
|
|
"mode": "merge",
|
|||
|
|
|
|||
|
|
"mapping": {
|
|||
|
|
|
|||
|
|
"user_query": "{{query}}", # 保留原始输入
|
|||
|
|
|
|||
|
|
"analysis": "{{output}}", # 保留分析结果
|
|||
|
|
|
|||
|
|
"context": "{{previous_output}}" # 保留上下文
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#### 2.2 在Prompt中传递上下文
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
|
|||
|
|
"prompt": """用户原始需求:{{user_query}}
|
|||
|
|
|
|||
|
|
需求分析结果:{{requirement_analysis}}
|
|||
|
|
|
|||
|
|
请根据以上信息生成代码。"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.3 数据传递示例
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 完整的数据流转示例
|
|||
|
|
# 1. 开始节点输出:{"query": "用户输入"}
|
|||
|
|
# 2. LLM节点分析,输出:{"app_type": "...", "modules": [...]}
|
|||
|
|
# 3. Transform节点合并:
|
|||
|
|
transform_node = {
|
|||
|
|
"data": {
|
|||
|
|
"mode": "merge",
|
|||
|
|
"mapping": {
|
|||
|
|
"user_query": "{{query}}", # 保留原始输入
|
|||
|
|
"requirement_analysis": "{{output}}" # 保留分析结果
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
# 4. 后续LLM节点可以使用:{{user_query}} 和 {{requirement_analysis}}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 避免数据丢失
|
|||
|
|
|
|||
|
|
#### 3.1 使用Transform节点保留关键数据
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 在分支前合并数据,确保所有分支都能访问
|
|||
|
|
transform_before_branch = {
|
|||
|
|
"data": {
|
|||
|
|
"mode": "merge",
|
|||
|
|
"mapping": {
|
|||
|
|
"original_query": "{{query}}",
|
|||
|
|
"analysis": "{{output}}",
|
|||
|
|
"context": "{{previous_context}}"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3.2 在Prompt中明确引用
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
"prompt": """请参考以下完整上下文:
|
|||
|
|
|
|||
|
|
原始需求:{{user_query}}
|
|||
|
|
分析结果:{{requirement_analysis}}
|
|||
|
|
历史上下文:{{context}}
|
|||
|
|
|
|||
|
|
根据以上信息完成任务。"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 常见问题和解决方案
|
|||
|
|
|
|||
|
|
### 1. Agent无法执行(403错误)
|
|||
|
|
|
|||
|
|
**问题现象**:
|
|||
|
|
- 点击"使用"按钮提示无权限
|
|||
|
|
- API调用返回403
|
|||
|
|
|
|||
|
|
**原因分析**:
|
|||
|
|
- Agent状态不是 `published` 或 `running`
|
|||
|
|
- 非owner用户尝试执行 `draft` 状态的Agent
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```python
|
|||
|
|
# 在创建脚本中设置状态
|
|||
|
|
agent = Agent(
|
|||
|
|
...
|
|||
|
|
status="published", # 直接设置为已发布
|
|||
|
|
...
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. LLM输出答非所问
|
|||
|
|
|
|||
|
|
**问题现象**:
|
|||
|
|
- Agent执行了,但回答不相关
|
|||
|
|
- 输出内容与用户需求不符
|
|||
|
|
|
|||
|
|
**原因分析**:
|
|||
|
|
- Prompt中没有正确引用用户输入
|
|||
|
|
- 缺少需求分析步骤
|
|||
|
|
- 上下文传递丢失
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```python
|
|||
|
|
# 1. 确保Prompt中包含用户输入
|
|||
|
|
"prompt": """用户需求:{{query}}
|
|||
|
|
|
|||
|
|
请根据用户需求完成任务。"""
|
|||
|
|
|
|||
|
|
# 2. 添加需求分析节点
|
|||
|
|
# 先分析需求,再生成内容
|
|||
|
|
|
|||
|
|
# 3. 使用Transform节点保留原始输入
|
|||
|
|
transform_node = {
|
|||
|
|
"data": {
|
|||
|
|
"mode": "merge",
|
|||
|
|
"mapping": {
|
|||
|
|
"user_query": "{{query}}" # 保留原始输入
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 条件节点分支执行错误
|
|||
|
|
|
|||
|
|
**问题现象**:
|
|||
|
|
- 条件判断后,所有分支都执行了
|
|||
|
|
- 或者分支执行顺序错误
|
|||
|
|
|
|||
|
|
**原因分析**:
|
|||
|
|
- 边的 `sourceHandle` 未设置或设置错误
|
|||
|
|
- 条件表达式不正确
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```python
|
|||
|
|
# 1. 确保条件节点的边有sourceHandle
|
|||
|
|
edge_true = {
|
|||
|
|
"id": "e-true",
|
|||
|
|
"source": "condition-xxx",
|
|||
|
|
"target": "branch-true",
|
|||
|
|
"sourceHandle": "true" # 必须设置
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
edge_false = {
|
|||
|
|
"id": "e-false",
|
|||
|
|
"source": "condition-xxx",
|
|||
|
|
"target": "branch-false",
|
|||
|
|
"sourceHandle": "false" # 必须设置
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 2. 条件表达式要明确
|
|||
|
|
"condition": "{user_query} contains '生成' or {user_query} contains '创建'"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 输出格式混乱
|
|||
|
|
|
|||
|
|
**问题现象**:
|
|||
|
|
- 输出包含多余信息
|
|||
|
|
- 格式不统一
|
|||
|
|
- 代码块格式错误
|
|||
|
|
|
|||
|
|
**原因分析**:
|
|||
|
|
- 缺少格式化节点
|
|||
|
|
- Prompt中格式要求不明确
|
|||
|
|
- End节点输出了不必要的数据
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```python
|
|||
|
|
# 1. 添加格式化节点
|
|||
|
|
format_node = {
|
|||
|
|
"id": "llm-format",
|
|||
|
|
"type": "llm",
|
|||
|
|
"data": {
|
|||
|
|
"label": "格式化输出",
|
|||
|
|
"temperature": "0.1", # 低温度确保格式一致
|
|||
|
|
"prompt": """请将以下内容整理成专业的Markdown格式:
|
|||
|
|
|
|||
|
|
内容:{{input}}
|
|||
|
|
|
|||
|
|
要求:
|
|||
|
|
- 使用清晰的标题层级
|
|||
|
|
- 代码块使用正确的语言标识
|
|||
|
|
- 格式统一、易读"""
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 2. End节点只输出必要字段
|
|||
|
|
# 在workflow_engine.py中,End节点会排除query、USER_INPUT等字段
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 数据传递中断
|
|||
|
|
|
|||
|
|
**问题现象**:
|
|||
|
|
- 后续节点无法获取前面节点的输出
|
|||
|
|
- 变量引用失败
|
|||
|
|
|
|||
|
|
**原因分析**:
|
|||
|
|
- 节点之间缺少连接
|
|||
|
|
- Transform节点映射错误
|
|||
|
|
- 变量名不匹配
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```python
|
|||
|
|
# 1. 检查节点连接
|
|||
|
|
edges = [
|
|||
|
|
{"id": "e1", "source": "node1", "target": "node2"},
|
|||
|
|
{"id": "e2", "source": "node2", "target": "node3"}
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
# 2. 使用Transform节点明确映射
|
|||
|
|
transform_node = {
|
|||
|
|
"data": {
|
|||
|
|
"mode": "merge",
|
|||
|
|
"mapping": {
|
|||
|
|
"key1": "{{output}}", # 上一个节点的输出
|
|||
|
|
"key2": "{{query}}", # 用户输入
|
|||
|
|
"key3": "{{custom_var}}" # 自定义变量
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 3. 在Prompt中正确引用
|
|||
|
|
"prompt": """使用变量:{{key1}}、{{key2}}、{{key3}}"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. Token限制导致输出截断
|
|||
|
|
|
|||
|
|
**问题现象**:
|
|||
|
|
- 输出内容不完整
|
|||
|
|
- 代码生成到一半就停止了
|
|||
|
|
|
|||
|
|
**原因分析**:
|
|||
|
|
- `max_tokens` 设置过小
|
|||
|
|
- 输出内容过长
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```python
|
|||
|
|
# 根据任务类型调整max_tokens
|
|||
|
|
llm_node = {
|
|||
|
|
"data": {
|
|||
|
|
"max_tokens": "4000", # 代码生成建议3000-4000
|
|||
|
|
# 长文档建议4000-8000
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 最佳实践
|
|||
|
|
|
|||
|
|
### 1. 工作流设计原则
|
|||
|
|
|
|||
|
|
#### 1.1 单一职责
|
|||
|
|
- 每个节点只做一件事
|
|||
|
|
- 避免在一个节点中处理多个任务
|
|||
|
|
|
|||
|
|
#### 1.2 数据流清晰
|
|||
|
|
- 明确每个节点的输入输出
|
|||
|
|
- 使用Transform节点整理数据
|
|||
|
|
- 保留关键上下文信息
|
|||
|
|
|
|||
|
|
#### 1.3 错误处理
|
|||
|
|
- 提供默认分支
|
|||
|
|
- 考虑异常情况
|
|||
|
|
- 添加错误提示
|
|||
|
|
|
|||
|
|
#### 1.4 可扩展性
|
|||
|
|
- 预留扩展点
|
|||
|
|
- 使用条件节点支持多种场景
|
|||
|
|
- 保持工作流灵活性
|
|||
|
|
|
|||
|
|
### 2. Prompt设计原则
|
|||
|
|
|
|||
|
|
#### 2.1 明确角色定位
|
|||
|
|
```
|
|||
|
|
你是一个专业的[角色],请[任务描述]。
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.2 结构化输出
|
|||
|
|
- 明确指定输出格式(JSON、Markdown等)
|
|||
|
|
- 提供输出示例
|
|||
|
|
- 要求验证格式正确性
|
|||
|
|
|
|||
|
|
#### 2.3 上下文传递
|
|||
|
|
- 在Prompt中明确引用所有需要的变量
|
|||
|
|
- 保留原始用户输入
|
|||
|
|
- 传递分析结果和上下文
|
|||
|
|
|
|||
|
|
#### 2.4 温度参数选择
|
|||
|
|
- 代码生成:0.2-0.3(准确)
|
|||
|
|
- 需求分析:0.3-0.5(平衡)
|
|||
|
|
- 创意内容:0.7-0.9(多样)
|
|||
|
|
- 格式化:0.1-0.2(严格)
|
|||
|
|
|
|||
|
|
### 3. 节点配置建议
|
|||
|
|
|
|||
|
|
#### 3.1 节点ID命名规范
|
|||
|
|
- 开始节点:`start-1`, `start-2`
|
|||
|
|
- LLM节点:`llm-xxx`(如 `llm-analysis`, `llm-generation`)
|
|||
|
|
- 条件节点:`condition-xxx`
|
|||
|
|
- Transform节点:`transform-xxx`
|
|||
|
|
- 结束节点:`end-1`
|
|||
|
|
|
|||
|
|
#### 3.2 边ID命名规范
|
|||
|
|
- 普通边:`e1`, `e2`, `e3`...
|
|||
|
|
- 条件分支:`e-true`, `e-false`
|
|||
|
|
- 多分支:`e-branch1`, `e-branch2`
|
|||
|
|
|
|||
|
|
#### 3.3 位置布局
|
|||
|
|
- X轴间距:200-250像素
|
|||
|
|
- Y轴间距:分支节点100-150像素
|
|||
|
|
- 起始位置:(50, 300-400)
|
|||
|
|
|
|||
|
|
### 4. 测试和验证
|
|||
|
|
|
|||
|
|
#### 4.1 单元测试
|
|||
|
|
- 测试每个节点的输入输出
|
|||
|
|
- 验证数据传递正确性
|
|||
|
|
- 检查条件分支逻辑
|
|||
|
|
|
|||
|
|
#### 4.2 集成测试
|
|||
|
|
- 测试完整工作流
|
|||
|
|
- 验证最终输出格式
|
|||
|
|
- 检查错误处理
|
|||
|
|
|
|||
|
|
#### 4.3 用户测试
|
|||
|
|
- 收集真实使用反馈
|
|||
|
|
- 根据反馈调整Prompt
|
|||
|
|
- 优化工作流结构
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 实战案例
|
|||
|
|
|
|||
|
|
### 案例1:Android应用开发助手
|
|||
|
|
|
|||
|
|
**目标**:帮助开发者快速生成、优化和调试Android应用
|
|||
|
|
|
|||
|
|
**工作流结构**:
|
|||
|
|
```
|
|||
|
|
开始 → 需求分析 → 需求分类 → [代码生成 | 架构设计/问题诊断/性能优化] → 结果整合 → 格式化输出 → 结束
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键设计**:
|
|||
|
|
1. **需求分析节点**:提取结构化信息(JSON格式)
|
|||
|
|
2. **需求分类节点**:根据关键词判断需求类型
|
|||
|
|
3. **分支处理**:不同需求类型走不同分支
|
|||
|
|
4. **结果整合**:使用Transform节点合并数据
|
|||
|
|
5. **格式化输出**:统一Markdown格式
|
|||
|
|
|
|||
|
|
**脚本位置**:`backend/scripts/generate_android_agent.py`
|
|||
|
|
|
|||
|
|
**状态**:已发布,可直接使用
|
|||
|
|
|
|||
|
|
### 案例2:内容生成助手
|
|||
|
|
|
|||
|
|
**目标**:根据用户需求生成各种类型的高质量内容
|
|||
|
|
|
|||
|
|
**工作流结构**:
|
|||
|
|
```
|
|||
|
|
开始 → 需求分析 → 内容类型判断 → [文章生成 | 文案生成 | 脚本生成 | 通用生成] → 内容整合 → 内容优化 → 结束
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键设计**:
|
|||
|
|
1. **多分支处理**:根据内容类型选择不同生成策略
|
|||
|
|
2. **内容优化**:添加优化润色节点
|
|||
|
|
3. **格式统一**:确保输出格式一致
|
|||
|
|
|
|||
|
|
**脚本位置**:`backend/scripts/generate_content_agent.py`
|
|||
|
|
|
|||
|
|
### 案例3:智能需求分析与解决方案生成器
|
|||
|
|
|
|||
|
|
**目标**:分析用户需求并生成专业解决方案
|
|||
|
|
|
|||
|
|
**工作流结构**:
|
|||
|
|
```
|
|||
|
|
开始 → 需求理解 → 需求分类 → [技术方案分支 | 业务流程分支] → 方案整合 → 输出优化 → 结束
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键设计**:
|
|||
|
|
1. **深度分析**:多步骤需求理解
|
|||
|
|
2. **专业分支**:技术方案和业务流程分开处理
|
|||
|
|
3. **方案整合**:合并各分支结果
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 总结
|
|||
|
|
|
|||
|
|
创建Agent是一个系统性的工作,需要:
|
|||
|
|
|
|||
|
|
1. **明确目标**:确定Agent要解决什么问题
|
|||
|
|
2. **设计工作流**:规划节点和连接关系
|
|||
|
|
3. **编写Prompt**:设计清晰、有效的提示词
|
|||
|
|
4. **数据流转**:确保上下文正确传递
|
|||
|
|
5. **测试验证**:充分测试各种场景
|
|||
|
|
6. **持续优化**:根据反馈不断改进
|
|||
|
|
|
|||
|
|
### 关键要点
|
|||
|
|
|
|||
|
|
- ✅ **状态设置**:创建时直接设置 `status="published"` 可立即使用
|
|||
|
|
- ✅ **数据传递**:使用Transform节点保留关键上下文
|
|||
|
|
- ✅ **条件分支**:必须设置 `sourceHandle` 才能正确分支
|
|||
|
|
- ✅ **Prompt设计**:明确角色、任务、输出格式
|
|||
|
|
- ✅ **格式化输出**:添加格式化节点确保输出统一
|
|||
|
|
|
|||
|
|
### 参考资源
|
|||
|
|
|
|||
|
|
- **生成脚本示例**:
|
|||
|
|
- `backend/scripts/generate_android_agent.py`
|
|||
|
|
- `backend/scripts/generate_content_agent.py`
|
|||
|
|
- `backend/scripts/generate_smart_agent.py`
|
|||
|
|
|
|||
|
|
- **API文档**:
|
|||
|
|
- `backend/app/api/agents.py` - Agent管理API
|
|||
|
|
- `backend/app/api/executions.py` - 执行管理API
|
|||
|
|
|
|||
|
|
- **工作流引擎**:
|
|||
|
|
- `backend/app/services/workflow_engine.py` - 工作流执行逻辑
|
|||
|
|
|
|||
|
|
- **提示词文档**:
|
|||
|
|
- `androidExampleDemo/多功能android应用智能体的提示词.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**最后更新**:2026-01-20
|
|||
|
|
|
|||
|
|
**版本**:v1.0
|
|||
|
|
|
|||
|
|
**作者**:Agent开发团队
|