File size: 27,991 Bytes
a23394a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 | # 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 等)。
|