ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CAMEL Source2Synth 数据生成指南:从源文本到多跳 QA 数据集的完整管线

CAMEL Source2Synth 数据生成指南:从源文本到多跳 QA 数据集的完整管线 CAMEL Source2Synth 数据生成指南从源文本到多跳 QA 数据集的完整管线【免费下载链接】camel CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel导读本文聚焦 CAMEL 框架中的数据生成模块Source2Synth位于camel/datagen/source2synth/系统讲解如何把原始文本或代码加工为需要多步推理才能回答的高质量多跳问答Multi-hop QA数据集。你将掌握UserDataProcessor单条/批量处理 API、ProcessorConfig全部配置项、ExampleConstructor的信息抽取逻辑、DataCurator的四阶段数据治理流程以及底层MultiHopGeneratorAgent的提示词设计并可直接运行仓库中的端到端示例产出结构化 JSON 数据。Source2Synth 多跳问答生成示意图Source2Synth 是 CAMEL 数据生成Datagen体系中的一环与 CoT思维链、Self-Instruct、Self-Improving CoT 等模块并列见 docs/key_modules/datagen.md其定位是从源文本/代码合成多跳 QAAI 驱动与规则化步骤协同工作配合复杂度控制与数据集治理产出适合训练推理能力如 RAG 微调、推理评测的高质量数据。一、模块总览与核心类camel.datagen.source2synth包由 4 个文件组成见 camel/datagen/source2synth/init.py对外导出 6 个符号符号类型职责UserDataProcessor类面向用户的统一入口编排预处理 → 示例构造 → 数据治理全流程ExampleConstructor类从单条文本构造训练示例清洗文本、抽取信息对、生成 QA 对、计算复杂度DataCurator类数据集治理质量过滤、复杂度过滤、去重、采样到目标规模ProcessorConfigPydantic 模型全部处理参数种子、文本长度、复杂度阈值、数据集规模、AI 开关等MultiHopQAPydantic 模型一条多跳 QA 的结构化表示问题、推理步骤、答案、支撑事实、类型ReasoningStepPydantic 模型推理链中的单步描述对应模块文件data_processor.py、models.py、user_data_processor_config.py。从源码结构看整个管线呈清晰的构造construct→ 治理curate两段式设计ExampleConstructor负责从 0 到 1产出带 QA 的示例DataCurator负责从多到精筛掉低质量样本。二、ProcessorConfig数据处理的全部可配置参数ProcessorConfig是一个 PydanticBaseModel见 user_data_processor_config.py所有字段都有默认值因此可以零参数实例化。完整参数表如下参数类型默认值约束说明seedint随机生成0–1000—随机种子用于采样与随机性的可复现默认random.randint(0, 1000)每次实例化随机min_lengthint50ge0文本最小长度字符数低于此值直接丢弃max_lengthint512gt0文本最大长度字符数高于此值直接丢弃complexity_thresholdfloat0.5ge0.0, le1.0复杂度阈值示例复杂度低于该值的会被过滤dataset_sizeint1000gt0最终数据集目标规模超出时随机采样到该规模use_ai_modelboolTrue—是否使用 AI 模型生成 QAFalse时走纯规则路径此时 QA 生成依赖规则逻辑hop_generating_agentMultiHopGeneratorAgent默认实例化一个—用于生成多跳 QA 的 Agent可传入自定义实例替换两点值得注意的实现细节hop_generating_agent在默认情况下会被自动实例化UserDataProcessor.__init__中通过self.config.hop_generating_agent if self.config.use_ai_model else None决定是否真正使用data_processor.py。也就是说use_ai_modelFalse时即使配置里有 agent 也不会调用。配置类开启了validate_assignmentTrue意味着运行时对字段赋值也会触发校验arbitrary_types_allowedTrue允许MultiHopGeneratorAgent这种非 Pydantic 类型作为字段类型。三、端到端使用单条与批量处理3.1 最小可用代码from camel.datagen.source2synth import ( UserDataProcessor, ProcessorConfig, ) # 创建配置 config ProcessorConfig( seed42, min_length50, max_length1000, complexity_threshold0.5, dataset_size10, use_ai_modelTrue, ) # 初始化处理器 processor UserDataProcessor(config) # 单条文本处理 result processor.process_text( Your source text here, sourceexample_source, ) # 批量处理 texts [Text 1, Text 2, Text 3] sources [source1, source2, source3] batch_results processor.process_batch(texts, sources)process_text(text, sourceuser_input)与process_batch(texts, sourcesNone)两个入口的差异data_processor.pysource 参数作为元数据记录在每条示例的metadata.source中默认user_input建议传入有意义的来源标识如文件名、章节名以便追溯批量长度校验process_batch要求sources长度与texts一致否则抛出ValueError(Length of sources must match length of texts)不传sources时自动填user_input返回结构List[Dict]每个元素形如{ text: 预处理后的文本, qa_pairs: [ { question: ..., reasoning_steps: [...], answer: ..., supporting_facts: [...], type: multi_hop_qa } ], metadata: { source: ..., timestamp: , complexity: 0.88 } }3.2 可复跑的完整示例仓库提供了可直接运行的端到端示例 examples/datagen/source2synth.py。它以三段包含因果链条的文本技术演进史、气候变化链、抗生素耐药性为输入演示了使用logging.basicConfig开启 INFO 日志观察tqdm进度条与各阶段过滤统计单条处理后用json.dump(..., ensure_asciiFalse, indent2)保存为single_text_results.json批量处理后保存为batch_results.json输出示例中逐条打印 Question / Reasoning Steps / Answer / Supporting Facts统计multi_hop_qa与template_generated_multi_hop两种类型的数量、平均推理步数与平均复杂度。示例文件底部注释保留了一段真实运行输出examples/datagen/source2synth.py可作为预期结果参考处理 1 条文本约 10 秒、3 条约 22 秒取决于后端模型示例中 3 段文本共生成 9 条 AI 多跳 QA平均推理步数 4.00平均复杂度 0.90。四、ExampleConstructor从文本到多跳 QA 的内部机制ExampleConstructor.construct_examples对每条原始数据执行 4 个步骤data_processor.py4.1 文本预处理_preprocess_text依次执行类型检查非str直接返回空串→strip()去空白 →长度检查len(text) min_length or len(text) max_length时丢弃→质量检查_check_text_quality。质量检查包含两条规则data_processor.py句子数量text.count(.) 2判定为不合格即至少要有 2 个以上句号保证文本包含多条信息特殊字符比例非字母数字且非空白的字符占比超过 30% 判定为不合格如乱码、符号堆砌的噪声文本会被滤除。4.2 信息对抽取_extract_info_pairs规则式抽取无 AI 参与按.切分句子后滑动窗口遍历为满足当前句与下一句长度都 10的组合构造信息对data_processor.py{ premise: sentences[i], # 前提 intermediate: sentences[i1], # 中间事实 conclusion: sentences[i2], # 结论可能为空串 related_contexts: [...], # 其余句子中长度10的最多2条相关上下文 }这正是多跳推理的数据基础一条前提 → 中间事实 → 结论的链条天然要求模型跨越多个句子建立逻辑关联。4.3 QA 生成_generate_qa_pairs将premise intermediate conclusion拼接为完整上下文调用multi_hop_agent.generate_multi_hop_qa(context)data_processor.py。返回值是MultiHopQA模型实例通过response.value.dict()转为字典后追加到qa_pairs。若配置了use_ai_modelFalsemulti_hop_agent为None该循环不会产出任何 QA——纯规则模式目前主要依赖信息抽取阶段QA 生成环节留待扩展。4.4 复杂度打分_calculate_complexity每条 QA 的复杂度由 4 个因子加权data_processor.py因子计算方式归一化上限权重推理步数len(reasoning_steps)/3最多算 3 步0.4支撑事实数len(supporting_facts)/3最多算 3 条0.3问题长度len(question.split())/20最多算 20 词0.15答案长度len(answer.split())/50最多算 50 词0.15单个示例的复杂度为所有 QA 复杂度的均值取值区间[0.0, 1.0]写入metadata.complexity。五、DataCurator四阶段数据治理DataCurator.curate_dataset依次执行 4 个过滤阶段每阶段都会输出日志统计剩余数量data_processor.py质量过滤_quality_filter要求示例文本分词后不少于 20 词且所有 QA 对通过_check_qa_quality——问题长度 ≥ 10、答案长度 ≥ 5、问题不得与答案相同防复制粘贴型低质对data_processor.py。复杂度过滤_complexity_filter仅保留metadata.complexity config.complexity_threshold的示例默认 0.5。这是控制数据集难度上限的核心旋钮调高阈值可得到更难、推理链更长的样本调低则保留更多简单样本data_processor.py。去重_remove_duplicates以hash(text str(qa_pairs))为唯一标识去重data_processor.py。采样_sample_dataset若示例数超过dataset_size用配置的随机数生成器种子来自ProcessorConfig.seed在UserDataProcessor.__init__中创建random.Random(seed)无放回抽样到目标规模保证可复现data_processor.py。从源码实现可以推断dataset_size是上限而非必须达到的数量当示例不足时直接原样返回不做数据补全。六、底层 Agent 与数据结构6.1 MultiHopGeneratorAgent多跳 QA 生成引擎MultiHopGeneratorAgent继承自ProgrammableChatAgent见 multi_hop_generator_agent.py内置了一段专门的系统提示词核心指令包括识别上下文中多个相关事实构造需要跨多条信息推理的问题保证推理链清晰、逻辑连贯强制要求至少 2–3 步推理并把推理步骤写进答案输出结构固定为Question / Reasoning Steps / Answer / Supporting Facts。generate_multi_hop_qa(context)的实现要点将上下文包装为ContextPrompt(main_contextcontext, related_contextsNone)以model_dump_json()序列化为用户消息调用self.step(input_message, response_formatMultiHopQA)即结构化输出模式——LLM 直接生成符合MultiHopQAschema 的 JSON用MultiHopQA.model_validate_json(...)校验解析最后封装成ProgrammedAgentInstructionResult[MultiHopQA]返回。如果需要在ProcessorConfig中替换默认 Agent可传入自定义的MultiHopGeneratorAgent实例例如更换底层模型配置类允许任意类型字段arbitrary_types_allowedTrue。6.2 数据结构MultiHopQA / ReasoningStep / ContextPrompt定义于 models.pyReasoningStep单步推理描述字段step: strMultiHopQA一条完整多跳 QA字段包括question需要多步推理的问题、reasoning_steps推理步骤列表、answer最终答案、supporting_facts支撑推理的事实列表、typeQA 类型示例中取multi_hop_qa。模型自带的json_schema_extra示例展示了典型结构以法国的首都为例给出两步推理与两条支撑事实ContextPrompt生成 QA 时的输入封装main_context为主上下文related_contexts为可选的相关上下文列表当前generate_multi_hop_qa传入None。这些 Pydantic 模型同时承担输出校验职责Agent 生成的内容必须满足字段约束否则解析失败从而在数据源头拦截格式不合规的生成结果。七、典型应用场景与参数调优建议综合源码与示例Source2Synth 适合以下场景领域语料 → 推理训练数据把产品文档、研究报告、百科条目等长文本批量转换为带推理链的 QA 对用于微调模型的检索增强推理能力RAG 评测集构建利用supporting_facts字段天然携带答案依据可用来构造需要多文档/多段落联合检索的评测问题难度分层通过complexity_threshold产出不同难度梯度的数据集便于做课程式训练或能力评估。参数调优要点min_length/max_length过短文本信息量不足质量检查还会二次拦截过长文本会稀释信息密度并拖慢生成。示例中采用 50–1000 字符complexity_threshold调高会显著减少通过率需结合生成质量观察日志中的过滤后剩余数量use_ai_modelFalse可离线跑通信息抽取阶段此时qa_pairs为空用于快速验证文本清洗与信息对抽取逻辑seed固定后整条管线含随机采样可复现便于做消融对比。八、安装与运行Source2Synth 是 CAMEL 框架内置模块无需单独安装随camel包一起提供。运行示例前确保已安装 CAMEL 及其数据生成依赖pip install camel-ai # 运行端到端示例需配置可用的模型后端例如 OPENAI_API_KEY 环境变量 python examples/datagen/source2synth.py运行后会在当前目录生成single_text_results.json与batch_results.json两份 JSON 结果文件。若需替换模型后端如本地 vLLM、Ollama可参考 docs/key_modules/models.md 配置对应的ModelBackend并注入自定义MultiHopGeneratorAgent。结语Source2Synth 以规则式信息抽取 AI 多跳生成 多阶段数据治理的组合拳把杂乱源文本转化为结构清晰、带完整推理链的 QA 数据集。其 API 设计克制而完整ProcessorConfig一个配置类覆盖全部参数UserDataProcessor两个入口覆盖单条与批量场景DataCurator四阶段治理保证输出质量。无论是构建 RAG 评测集、推理能力训练数据还是做领域知识库问答改造都可以直接复用这条管线并通过源码data_processor.py、user_data_processor_config.py深入理解每一步的内部逻辑。【免费下载链接】camel CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表