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 等)。