Paper2Any / docs /quickstart.md
Nichengjin
Clean commit without faiss cache
a23394a
|
Raw
History Blame Contribute Delete
28 kB
# DataFlow Agent 快速入门指南
本指南将帮助您快速上手 DataFlow Agent 平台的5个核心功能模块。
## 目录
1. [管线推荐](#1-管线推荐)
2. [算子编写](#2-算子编写)
3. [手动编排](#3-手动编排)
4. [算子复用/提示词优化](#4-算子复用提示词优化)
5. [Web Search/数据采集](#5-web-search数据采集)
---
## 1. 管线推荐
### 功能概述
根据用户的自然语言描述,自动推荐并生成合适的 DataFlow Pipeline,包括算子选择、参数配置和代码生成。
### 使用场景
- 快速构建数据处理流程
- 不熟悉具体算子时的智能推荐
- 自动化 Pipeline 生成
### 输入参数
#### 基础配置
- **目标描述** (必需)
- 描述您想要实现的数据处理目标
- 示例:`"给我随意符合逻辑的5个算子,过滤,去重!"`
- 示例:`"对文本数据进行清洗、去重、分类"`
- **输入 JSONL 文件路径** (必需)
- 用于测试 Pipeline 的数据文件
- 格式:每行一个 JSON 对象
- 默认:`{项目根目录}/tests/test.jsonl`
- **Session ID**
- 会话标识符,用于缓存和追踪
- 默认:`"default"`
#### API 配置
**主要模型配置**
- **Chat API URL**: LLM 服务地址
- 默认:`http://123.129.219.111:3000/v1/`
- **API Key**: 访问密钥
- **模型名称**: 如 `gpt-4o`, `qwen-max`, `llama3`
- 默认:`gpt-4o`
**嵌入模型配置**
- **Embedding API URL**: 嵌入模型服务地址(可选,留空则使用主要 API)
- **Embedding 模型名称**: 如 `text-embedding-3-small`
#### 调试配置
- **启用调试模式**: 是否启用自动调试和修复
- **调试模式执行次数**: 1-10 次,默认 2 次
### 输出结果
#### 1. Pipeline Code (生成的代码)
```python
# 自动生成的 Python 代码
# 包含完整的 Pipeline 定义和执行逻辑
```
#### 2. Execution Log (执行日志)
- Pipeline 执行过程的详细日志
- 包含每个算子的执行状态
- 错误信息和调试信息
#### 3. Agent Results (Agent 执行结果)
```json
{
"recommender": {...},
"pipeline_builder": {...},
"operator_executor": {...}
}
```
- 各个 Agent 节点的详细执行结果
- 包含推荐的算子列表、构建过程等
### 使用步骤
1. 在"目标描述"框中输入您的需求
2. 配置 API 信息(URL、Key、模型)
3. (可选)配置嵌入模型和调试选项
4. 点击"生成 Pipeline"按钮
5. 查看生成的代码和执行结果
---
## 2. 算子编写
### 功能概述
根据用户需求自动生成新的 DataFlow 算子代码,包括算子实现、测试代码和调试。
### 使用场景
- 创建自定义数据处理算子
- 扩展 DataFlow 功能
- 快速原型开发
### 输入参数
#### 基础配置
- **目标描述** (必需)
- 描述算子的功能和用途
- 示例:`"创建一个算子,用于对文本进行情感分析"`
- 示例:`"实现一个数据去重算子,支持多字段组合去重"`
- **算子类别**
- 算子所属类别,用于匹配相似算子作为参考
- 默认:`"Default"`
- 可选:`"filter"`, `"mapper"`, `"aggregator"`
- **测试数据文件路径 (JSONL)**
- 用于测试算子的数据文件
- 默认:`{项目根目录}/tests/test.jsonl`
#### API 配置
- **Chat API URL**: LLM 服务地址
- **API Key**: 访问密钥(留空则使用环境变量 `DF_API_KEY`
- **模型名称**: 默认 `gpt-4o`
#### 高级配置
- **输出语言**: `en` (英文) 或 `zh` (中文)
- **启用调试模式**: 自动执行并修复代码错误
- **最大调试轮次**: 1-10 次,默认 3 次
- **输出文件路径**: 保存生成代码的位置(可选)
### 输出结果
#### 1. 生成的代码
```python
# 完整的算子实现代码
class YourOperator(Operator):
def __init__(self, ...):
...
def run(self, dataset, ...):
...
```
#### 2. 匹配的算子
```json
[
{
"op_name": "similar_operator_1",
"similarity": 0.85,
"description": "..."
}
]
```
- 系统匹配到的相似算子列表
- 用作参考和学习
#### 3. 执行结果
```json
{
"success": true,
"output": {...},
"stderr": "",
"stdout": "..."
}
```
- 算子的执行状态
- 输出数据预览
- 错误信息(如有)
#### 4. 调试信息
```json
{
"round": 2,
"input_key": "text",
"available_keys": ["text", "label"],
"stdout": "...",
"stderr": "..."
}
```
- 调试过程的详细信息
- 每轮调试的输入输出
#### 5. Agent 结果
- 各个 Agent 节点的执行详情
- 包含匹配、编写、执行、调试等阶段
#### 6. 执行日志
- 完整的执行过程日志
- 包含所有阶段的详细信息
### 使用步骤
1. 在"目标描述"中详细说明算子功能
2. 选择合适的算子类别
3. 配置 API 信息
4. (可选)启用调试模式以自动修复错误
5. 点击"生成算子"按钮
6. 查看生成的代码和测试结果
7. 如需修改,可调整参数后重新生成
---
## 3. 手动编排
### 功能概述
通过可视化界面手动选择和组装算子,构建自定义 Pipeline,支持拖拽排序和参数配置。
### 使用场景
- 精确控制 Pipeline 结构
- 复用现有算子
- 快速原型验证
- 学习算子使用方法
### 输入参数
#### API 和文件配置
- **Chat API URL**: LLM 服务地址
- **API Key**: 访问密钥
- **模型名称**: 默认 `gpt-4o`
- **输入 JSONL 文件路径**: 测试数据文件
#### 算子选择和配置
**步骤 1: 选择算子**
1. 从"算子分类"下拉框选择类别
- 如:`filter`, `mapper`, `deduplicator`
2. 从"算子"下拉框选择具体算子
- 系统会自动显示该算子的参数说明
**步骤 2: 配置参数**
- **Prompt Template (可选)**
- 如果算子支持 Prompt 模板,会显示下拉选择器
- 选择后自动更新到 `__init__()` 参数中
- **`__init__()` 参数 (JSON 格式)**
```json
{
"param1": "value1",
"param2": 123,
"prompt_template": "module.PromptClass"
}
```
- 算子初始化参数
- 必须是有效的 JSON 对象
- **`run()` 参数 (JSON 格式)**
```json
{
"input_key": "text",
"output_key": "processed_text",
"batch_size": 32
}
```
- 算子运行时参数
- 必须是有效的 JSON 对象
**步骤 3: 添加到 Pipeline**
- 点击"➕ 添加算子到 Pipeline"按钮
- 算子会被添加到 Pipeline 序列中
**步骤 4: 调整顺序**
- 在 Pipeline 可视化区域,拖拽算子卡片调整顺序
- 系统会自动重新编号
**步骤 5: 自动链接**
- 系统会自动分析算子间的输入输出关系
- 显示链接状态:
- 🔗 **已链接**: 输出键成功匹配到下一个算子的输入
- ⚠️ **待处理**: 输入为空或未匹配
### 输出结果
#### 1. 当前 Pipeline (可视化展示)
- 每个算子显示为卡片,包含:
- 步骤编号
- 算子名称
- `__init__()` 参数预览
- `run()` 参数预览
- 与上一步的连接状态
#### 2. 当前 Pipeline (JSON 格式)
```json
[
{
"op_name": "TextCleanerOperator",
"init_params": {...},
"run_params": {...},
"_incoming_links": [
{
"input_key": "text",
"value": "raw_text",
"output_keys": ["output"]
}
]
}
]
```
#### 3. 生成的代码
```python
# 完整的 Pipeline 执行代码
from dataflow import Dataset
from dataflow.operators import *
# 加载数据
dataset = Dataset.load("input.jsonl")
# 执行 Pipeline
dataset = TextCleanerOperator(...).run(dataset, ...)
dataset = DeduplicatorOperator(...).run(dataset, ...)
...
# 保存结果
dataset.save("output.jsonl")
```
#### 4. 处理结果数据 (前 100 条)
```json
[
{"text": "processed text 1", "label": "A"},
{"text": "processed text 2", "label": "B"},
...
]
```
#### 5. 输出文件路径
- 处理后数据的保存位置
### 使用步骤
1. 配置 API 信息和输入文件路径
2. 选择算子分类和具体算子
3. 编辑 `__init__()``run()` 参数(JSON 格式)
4. 点击"➕ 添加算子到 Pipeline"
5. 重复步骤 2-4 添加更多算子
6. 拖拽调整算子顺序(可选)
7. 检查自动链接状态,确保参数正确
8. 点击"🚀 运行 Pipeline"
9. 查看生成的代码和执行结果
### 高级技巧
- **清空 Pipeline**: 点击"🗑️ 清空 Pipeline"按钮
- **参数复用**: 系统会自动将上一个算子的输出键链接到下一个算子的输入
- **调试**: 如果执行失败,检查日志中的错误信息,调整参数后重试
---
## 4. 算子复用/提示词优化
### 功能概述
PromptAgent 前端,用于生成和优化算子的 Prompt 模板,支持多轮对话式改写和测试。
### 使用场景
- 为算子创建高质量的 Prompt 模板
- 优化现有 Prompt 的效果
- 快速迭代 Prompt 设计
- 生成测试代码和数据
### 输入参数
#### 运行配置
- **Chat API Base URL**: LLM 服务地址
- 默认:`http://123.129.219.111:3000/v1/`
- **Chat API Key**: 访问密钥
- **Model**: 模型名称,默认 `gpt-4o`
- **Language**: 提示词语言,`zh` (中文) 或 `en` (英文)
#### Prompt 配置
- **任务描述** (必需)
- 详细描述 Prompt 要完成的任务
- 示例:`"对用户输入的文本进行情感分析,判断是正面、负面还是中性"`
- 示例:`"将产品描述改写为更吸引人的营销文案"`
- **算子名称 (op-name)** (必需)
- Prompt 类的名称
- 示例:`SentimentAnalysisPrompt`
- 示例:`MarketingCopywriterPrompt`
- **输出格式** (可选)
- 指定 Prompt 输出的格式
- 示例:
```
{
"sentiment": "positive/negative/neutral",
"confidence": 0.95
}
```
- **参数列表** (可选)
- Prompt 模板需要的参数,用逗号、空格或换行分隔
- 示例:`text, language, style`
- 示例:
```
input_text
target_audience
tone
```
- **文件输出根路径** (可选)
- 保存生成文件的目录
- 默认:`./pa_cache`
- **生成后删除测试文件**
- 是否在生成后删除测试文件(保留路径占位)
- 默认:启用
### 输出结果
#### 1. Prompt 文件路径
- 生成的 Prompt 模板文件位置
- 示例:`./pa_cache/prompts/SentimentAnalysisPrompt.py`
#### 2. 测试数据文件路径
- 自动生成的测试数据文件
- 示例:`./pa_cache/test_data/test_data.jsonl`
#### 3. 测试代码文件路径
- 自动生成的测试代码
- 示例:`./pa_cache/tests/test_prompt.py`
#### 4. 测试数据预览
```json
[
{"text": "这个产品真不错!", "language": "zh"},
{"text": "质量太差了", "language": "zh"},
{"text": "还可以吧", "language": "zh"}
]
```
#### 5. 测试结果预览
```json
[
{
"input": {"text": "这个产品真不错!"},
"output": {
"sentiment": "positive",
"confidence": 0.92
}
}
]
```
#### 6. Prompt 代码预览
```python
from dataflow_agent.promptstemplates import PromptTemplate
class SentimentAnalysisPrompt(PromptTemplate):
"""情感分析 Prompt 模板"""
def __init__(self):
super().__init__()
self.system_prompt = "你是一个情感分析专家..."
self.user_prompt_template = "请分析以下文本的情感:{text}"
def format(self, text: str, **kwargs) -> str:
return self.user_prompt_template.format(text=text)
```
#### 7. 测试代码预览
```python
import json
from your_prompt import SentimentAnalysisPrompt
# 加载测试数据
with open("test_data.jsonl") as f:
test_data = [json.loads(line) for line in f]
# 测试 Prompt
prompt = SentimentAnalysisPrompt()
for item in test_data:
result = prompt.format(**item)
print(result)
```
### 多轮改写功能
在右侧对话区域,您可以:
1. **查看初次生成结果**
- Prompt 代码
- 测试结果
2. **提出改进建议**
- 在对话输入框中描述您希望如何修改
- 示例:
- `"增加对讽刺语气的识别"`
- `"输出格式改为只返回 positive/negative/neutral 字符串"`
- `"添加置信度阈值,低于 0.7 时返回 uncertain"`
3. **发送改写指令**
- 点击"发送改写指令"按钮
- 系统会根据反馈重新生成 Prompt
4. **迭代优化**
- 查看更新后的代码和测试结果
- 继续提出改进建议
- 重复直到满意
5. **清空会话**
- 点击"清空会话"按钮重新开始
### 使用步骤
#### 初次生成
1. 配置 API 信息(URL、Key、模型)
2. 填写任务描述、算子名称
3. (可选)指定输出格式和参数列表
4. 点击"生成 Prompt 模板"按钮
5. 查看生成的 Prompt 代码和测试结果
#### 多轮优化
1. 在右侧对话框中输入改进建议
2. 点击"发送改写指令"
3. 查看更新后的代码和测试结果
4. 重复步骤 1-3 直到满意
#### 使用生成的 Prompt
1. 从"Prompt 文件路径"获取文件位置
2. 将 Prompt 类导入到您的算子中
3. 在算子的 `__init__()` 中指定 `prompt_template`
---
## 5. Web Search/数据采集
### 功能概述
从网络(HuggingFace、Kaggle 等平台)自动采集数据集,并转换为统一格式,支持智能搜索、下载和数据清洗。
### 使用场景
- 快速构建训练数据集
- 收集特定领域的数据
- 数据集格式转换
- 批量下载和处理
### 输入参数
#### 采集配置
- **目标描述** (必需)
- 描述您想要收集的数据类型
- 示例:`"收集 Python 代码示例的数据集"`
- 示例:`"收集中文对话数据,用于训练聊天机器人"`
- 示例:`"收集图像分类数据集,包含猫和狗的图片"`
- **数据类别**
- `PT`: 预训练数据(Pre-Training)
- `SFT`: 监督微调数据(Supervised Fine-Tuning)
- 默认:`SFT`
- **数据集数量上限(每关键词)**
- 每个搜索关键词返回的数据集数量
- 范围:1-50
- 默认:5
- 注意:仅用于参考,实际数量可能因搜索结果而异
- **数据集大小范围**
- 筛选数据集的大小范围
- 选项:
- `n<1K`: 小于 1000 条
- `1K<n<10K`: 1000-10000 条
- `10K<n<100K`: 10000-100000 条
- `100K<n<1M`: 100000-1000000 条
- `n>1M`: 大于 1000000 条
- 默认:`1K<n<10K`
- **下载子任务上限**
- 限制最终执行的下载任务数量
- 留空表示不限制
- 用于控制下载规模和时间
- **最大数据集大小**
- 单个数据集的大小上限
- 输入数值后选择单位(B/KB/MB/GB/TB)
- 留空表示不限制
- **下载目录**
- 数据保存的根目录
- 默认:`downloaded_data`
- **提示词语言**
- `zh`: 中文
- `en`: 英文
- 默认:`zh`
#### LLM 配置
- **CHAT_API_URL**: LLM 服务地址
- 默认:`http://123.129.219.111:3000/v1/chat/completions`
- **CHAT_API_KEY**: 访问密钥
- **CHAT_MODEL**: 模型名称
- 默认:`deepseek-chat`
#### 其他环境配置
- **HF_ENDPOINT**: HuggingFace 镜像地址
- 默认:`https://hf-mirror.com`
- **KAGGLE_USERNAME**: Kaggle 用户名
- **KAGGLE_KEY**: Kaggle API 密钥
- **TAVILY_API_KEY**: Tavily 搜索 API 密钥
#### RAG 配置
- **RAG_EBD_MODEL**: 嵌入模型名称
- 默认:`text-embedding-3-large`
- **RAG_API_URL**: RAG 服务地址
- **RAG_API_KEY**: RAG API 密钥
#### 高级配置(可折叠)
**网页采集高级配置**
- **下载任务最大循环次数**: 1-50,默认 10
- 控制每个下载任务的最大重试次数
- **研究阶段最大循环次数**: 1-50,默认 15
- research 阶段的最大循环次数,允许访问更多网站
- **搜索引擎**: `tavily` / `duckduckgo` / `jina`
- 默认:`tavily`
- **使用 Jina Reader**: 是否使用 Jina Reader 提取网页内容
- 默认:启用
- 优点:快速、结构化(Markdown 格式)
- **启用 RAG 增强**: 是否使用 RAG 精炼内容
- 默认:启用
- **并行处理页面数**: 1-20,默认 5
- 并行处理的页面数量
- 建议:3-10(根据网络和机器性能调整)
- **禁用缓存**: 是否禁用 HuggingFace 和 Kaggle 缓存
- 默认:启用
- 启用后使用临时目录,下载后自动清理
- **临时目录**: 自定义临时目录路径
- 留空则使用默认临时目录
**数据转换高级配置**
- **转换模型温度**: 0.0-2.0,默认 0.0
- 数据转换时的模型温度参数
- **转换最大 Token 数**: 512-8192,默认 4096
- 数据转换时的最大 token 数
- **最大采样长度(字符)**: 50-1000,默认 200
- 每个字段的最大采样长度
- **采样记录数量**: 1-10,默认 3
- 用于分析的采样记录数量
### 输出结果
#### 1. 执行日志(实时流式输出)
```
============================================================
开始执行网页采集与转换工作流
============================================================
目标: 收集 Python 代码示例的数据集
类别: SFT
下载目录: downloaded_data
【网页采集配置】
- 搜索引擎: tavily
- 下载子任务上限: 不限制
- 任务最大循环次数: 10
- 研究阶段最大循环次数: 15
- 使用 Jina Reader: 是
- 启用 RAG: 是
- 并行页面数: 5
- 禁用缓存: 是
【数据转换配置】
- 模型温度: 0.0
- 最大 Token 数: 4096
- 最大采样长度: 200
- 采样记录数: 3
数据集大小限制: 不限制
============================================================
2025-01-23 10:00:00 [INFO] 开始搜索数据集...
2025-01-23 10:00:05 [INFO] 找到 15 个候选数据集
2025-01-23 10:00:10 [INFO] 开始下载数据集 1/5...
2025-01-23 10:01:00 [INFO] 数据集 1 下载完成
...
2025-01-23 10:15:00 [INFO] 开始数据转换...
2025-01-23 10:20:00 [INFO] 数据转换完成
流程执行完成!
```
#### 2. 结果摘要
```json
{
"download_dir": "downloaded_data",
"processed_output": "downloaded_data/processed_output",
"category": "SFT",
"language": "zh",
"chat_model": "deepseek-chat",
"max_download_subtasks": null,
"max_dataset_size_bytes": null,
"max_dataset_size_unit": null,
"max_dataset_size_value": null
}
```
### 输出文件结构
```
downloaded_data/
├── raw/ # 原始下载的数据
│ ├── dataset_1/
│ │ ├── data.jsonl
│ │ └── metadata.json
│ ├── dataset_2/
│ └── ...
└── processed_output/ # 转换后的统一格式数据
├── combined.jsonl # 合并后的数据
├── train.jsonl # 训练集(如果分割)
├── validation.jsonl # 验证集(如果分割)
└── metadata.json # 元数据信息
```
### 使用步骤
#### 基础使用
1. 在"目标描述"中详细说明要收集的数据类型
2. 选择数据类别(PT 或 SFT)
3. 配置数据集数量和大小限制
4. 配置 LLM API 信息
5. (可选)配置 Kaggle、Tavily 等服务的密钥
6. 点击"开始网页采集与转换"按钮
7. 实时查看执行日志
8. 等待完成后查看结果摘要
9. 在下载目录中查看采集的数据
#### 高级使用
1. 展开"⚙️ 高级配置"区域
2. 根据需求调整:
- 搜索引擎选择
- 并行处理数量
- 缓存策略
- 数据转换参数
3. 执行采集任务
4. 根据日志调整参数优化效果
### 注意事项
1. **API 密钥**
- 确保配置了必要的 API 密钥
- Tavily 用于搜索,Kaggle 用于下载 Kaggle 数据集
2. **网络环境**
- 如果在国内,建议使用 HuggingFace 镜像
- 调整并行数量以适应网络带宽
3. **存储空间**
- 确保有足够的磁盘空间
- 大型数据集可能需要数 GB 空间
4. **执行时间**
- 采集过程可能需要较长时间(几分钟到几小时)
- 可以通过限制下载任务数量来控制时间
5. **数据质量**
- 启用 RAG 增强可以提高数据质量
- 调整采样参数以平衡质量和速度
---
## 常见问题
### Q1: API 密钥如何获取?
- **OpenAI/GPT**: 访问 [OpenAI Platform](https://platform.openai.com/)
- **Tavily**: 访问 [Tavily](https://tavily.com/)
- **Kaggle**: 访问 [Kaggle Settings](https://www.kaggle.com/settings)
### Q2: 如何选择合适的模型?
- **快速原型**: `gpt-3.5-turbo`, `deepseek-chat`
- **高质量输出**: `gpt-4o`, `claude-3-opus`
- **中文优化**: `qwen-max`, `deepseek-chat`
### Q3: Pipeline 执行失败怎么办?
1. 检查执行日志中的错误信息
2. 确认输入数据格式正确
3. 检查算子参数配置
4. 启用调试模式自动修复
5. 查看 Agent 结果了解详细错误
### Q4: 如何提高数据采集质量?
1. 使用更精确的目标描述
2. 启用 RAG 增强
3. 调整数据集大小范围
4. 增加采样记录数量
5. 使用更强大的 LLM 模型
### Q5: 生成的代码可以直接使用吗?
- **管线推荐**: 可以直接运行,但建议先在测试数据上验证
- **算子编写**: 建议先测试,必要时手动调整
- **手动编排**: 生成的代码已经过测试,可以直接使用
- **Prompt 模板**: 建议多轮优化后再用于生产环境
---
## 下一步
- 查看 [架构文档](guides/architecture.md) 了解系统设计
- 查看 [算子编写指南](guides/operator_write.md) 学习自定义算子
- 查看 [工作流编写教程](tutorials/workflow_write.md) 学习创建工作流
- 访问 [项目介绍](guides/project_introduction.md) 了解更多功能
---
## 技术支持
如有问题或建议,请:
- 提交 [GitHub Issue](https://github.com/OpenDCAI/Paper2Any/issues)
- 查看 [FAQ](faq.md)
- 参考 [贡献指南](contributing.md)
## 附录:Agent 结构化输出(response_schema)配置说明
在很多场景下,我们希望 Agent 不只是返回一段自由文本,而是返回**结构化的 JSON 结果**,方便后续程序消费。
DataFlow-Agent 在 `BaseAgentConfig` 中内置了针对 JSON 解析的快捷配置字段:
- `parser_type`: 解析器类型,默认为 `"json"`
- `response_schema`: 期望的返回结构定义(轻量级 JSON Schema)
- `response_schema_description`: 对该结构的中文/英文文字说明
- `response_example`: 一份期望的 JSON 返回示例
- `required_fields`: 必须出现的字段列表,用于约束模型输出
这些字段可以通过 `create_simple_agent` / `create_react_agent` 等便捷函数传入,也可以自行构造 `SimpleConfig` / `ReactConfig` 后再调用 `create_agent`
### 1. 基本用法示例:简单模式 Agent
下面的示例中,我们要求 Agent 返回包含 `code``files` 两个字段的 JSON,其中 `code` 是字符串,`files` 是字符串列表:
```python
from dataflow_agent.agentroles import create_simple_agent
agent = create_simple_agent(
"coder",
# 解析器类型设为 json(默认即为 json)
parser_type="json",
# 期望的返回结构(轻量 JSON Schema)
response_schema={
"code": "string",
"files": ["string"], # 表示由字符串组成的列表
"summary": "string", # 可选字段,用于描述本次修改
},
# 对 Schema 的自然语言说明,帮助模型理解每个字段含义
response_schema_description=(
"请返回代码生成结果。"
"code 字段包含完整的代码内容;"
"files 是本次修改涉及到的文件路径列表;"
"summary 对主要改动进行简要说明。"
),
# 一份期望的返回示例,模型会参考该结构生成
response_example={
"code": "# 写在这里的是完整的 Python 代码 ...",
"files": ["dataflow_agent/agentroles/__init__.py"],
"summary": "新增了 create_simple_agent 的使用示例。",
},
# 必须出现的字段
required_fields=["code", "files"],
)
# 后续在你的业务逻辑中,一般会以异步方式调用 agent:
# result = await agent.execute({"task": "请为我实现一个计算阶乘的函数"})
# print(result["code"])
# print(result["files"])
```
要点说明:
1. **parser_type 建议为 `"json"`**
`response_schema*` 这一组字段是为 JSON 解析场景设计的。当 `parser_type="json"` 时,框架会根据这些配置构建 Prompt 与解析逻辑,尽量保证返回满足你指定的结构。
2. **`response_schema` 是“轻量级 JSON Schema”**
- 推荐使用简单的类型标注,如:
- `"string"`, `"number"`, `"boolean"` 等
- `["string"]` 表示“字符串列表”
- 也可以嵌套字典/列表描述更复杂结构
- 不必完全遵循官方 JSON Schema 规范,保持可读性和易理解为主。
3. **`response_schema_description``response_example` 用于“教模型”**
- `response_schema_description`: 用自然语言解释每个字段含义和要求;
- `response_example`: 给出一份“长得像最终结果”的 JSON 示例。
在实践中,这两项对提升结构化输出的稳定性非常有帮助。
4. **`required_fields` 指定“必填字段”**
- `required_fields=["code", "files"]` 表示:无论如何,这两个 key 必须出现在最终 JSON 中;
- 这可以配合 ReAct 模式/验证逻辑,用于在缺字段时触发重试或报错(具体行为取决于所用 Agent 策略和解析实现)。
### 2. 在 ReAct 模式中使用 `response_schema`
`create_react_agent` 同样支持以上字段,使用方式几乎一致,只是多了 ReAct 本身的重试与验证能力:
```python
from dataflow_agent.agentroles import create_react_agent
agent = create_react_agent(
"planner",
max_retries=3,
parser_type="json",
response_schema={
"plan": ["string"], # 分步计划,每一步是一句自然语言描述
"risks": ["string"], # 可能的风险点
},
response_schema_description=(
"请返回本次任务的分步计划,以及可能的风险点列表。"
"plan 字段是按执行顺序排列的步骤列表,risks 列出需要注意的问题。"
),
response_example={
"plan": [
"分析用户提供的数据源格式。",
"根据数据格式选择合适的预处理算子。",
"设计并生成完整的 DataFlow Pipeline 代码。"
],
"risks": [
"数据中可能包含脏数据,需要额外清洗步骤。",
"某些算子依赖的第三方库可能尚未安装。"
]
},
required_fields=["plan"],
)
```
在这种模式下:
- 如果模型第一次返回的 JSON 不满足要求(字段缺失/类型不符等),
- 策略层可以结合验证器(`validators`)和重试机制,对结果进行检查并尝试修正,
- 从而提高结构化输出的可靠性。
### 3. 直接使用配置类(进阶用法)
如果你希望显式构造配置对象,也可以直接使用 `SimpleConfig` / `ReactConfig` 等,然后调用 `create_agent`:
```python
from dataflow_agent.agentroles import (
SimpleConfig,
create_agent,
)
config = SimpleConfig(
model_name="gpt-4o",
parser_type="json",
response_schema={
"title": "string",
"outline": ["string"],
},
response_schema_description="生成一篇技术文章的大纲。",
response_example={
"title": "如何使用 DataFlow-Agent 构建智能数据处理管线",
"outline": [
"项目背景介绍",
"核心概念与模块划分",
"实战示例:从原始数据到可复用算子",
],
},
required_fields=["title", "outline"],
)
agent = create_agent("writer", config=config)
# result = await agent.execute({"topic": "DataFlow-Agent 使用实践"})
# print(result["title"])
# print(result["outline"])
```
这种方式在以下场景比较适合:
- 你已经有一套统一的配置管理/注入机制;
- 希望在不同 Agent 之间重用同一份结构化返回配置;
- 或者需要在运行时动态调整配置(模型、温度、schema 等)。