WebCPM

GitHub
914 72 较难 2 次阅读 1周前Apache-2.0语言模型Agent
AI 解读 由 AI 自动生成,仅供参考

WebCPM 是一个专为中文长篇幅问答任务设计的开源项目,源自 ACL 2023 的研究成果。它核心解决了大模型在面对复杂中文问题时,因缺乏实时信息或领域知识而导致回答不准确、内容单薄的问题。通过模拟人类“搜索 - 阅读 - 总结”的交互过程,WebCPM 能够主动进行网络搜索,收集相关事实依据,并据此生成详实、可信的长篇回答。

该项目特别适合自然语言处理领域的研究人员和开发者使用。它不仅提供了完整的代码实现和数据集,还开放了基于 CPM-bee 架构的百亿参数中文预训练模型权重,方便用户复现论文结果或进行二次开发。此外,项目包含一个可收集人类搜索行为数据的网页接口,为研究人类如何高效利用搜索引擎提供了宝贵资源。

WebCPM 的技术亮点在于其“交互式网络搜索”机制。不同于传统的单次检索,它能像人类专家一样多轮次地发起查询、筛选信息,并将获取的知识融入生成过程。这种机制显著提升了模型在处理需要多方验证或深度背景知识的复杂问题时的表现,是推动中文大模型具备更强工具使用能力和事实准确性的重要探索。

使用场景

某智库研究员需要针对“中国新能源汽车产业链在 2023 年的关键瓶颈与突破”这一复杂议题,撰写一份深度分析报告。

没有 WebCPM 时

  • 信息检索碎片化:研究员需手动在多个搜索引擎中反复切换关键词,难以系统性地获取覆盖全产业链的最新数据。
  • 长文生成逻辑断层:收集到的资料零散,人工整合成连贯的长篇报告耗时极长,且容易遗漏关键因果链条。
  • 中文语境理解偏差:通用模型对国内特有的政策术语(如“双积分政策”)或社区讨论(如知乎深度帖)理解不足,导致内容空洞。
  • 事实核查成本高:生成的内容缺乏实时网页依据,研究员必须逐条回溯验证信息来源,效率极低。

使用 WebCPM 后

  • 交互式自主搜索:WebCPM 能模拟人类专家行为,自主规划搜索路径,主动挖掘从政策解读到企业动态的多维度信息。
  • 基于事实的长文生成:模型直接基于检索到的实时网页事实,自动生成逻辑严密、引据详实的千字以上深度分析。
  • 深耕中文垂直领域:依托 CPM-bee 基座及知乎等高质量中文数据微调,精准把握本土行业术语与社区观点,内容更具洞察力。
  • 来源可追溯:生成的每一段论述均自动关联原始网页链接,研究员可直接点击核验,大幅降低事实核查的时间成本。

WebCPM 将研究员从繁琐的“搜索 - 整理 - 写作”循环中解放出来,使其能专注于高价值的策略判断,实现了中文长问答领域的效率跃迁。

运行环境要求

操作系统
  • 未说明
GPU

必需,官方示例使用 8x80G A100 GPU,模型参数量达 10B,建议显存充足以支持大模型微调

内存

未说明

依赖
notes需安装 requirements.txt 中的依赖;不同版本的 PyTorch 等包可能导致结果与论文有差异;需自行申请 Bing Search API Key;初始模型约 10B 参数,需从清华云盘下载;支持交互式搜索和流水线式搜索两种模式。
python未说明
torch
cpm-live (或适配新版 CPM-Bee 的包)
WebCPM hero image

快速开始

WebCPM

✨ 这是 ACL 2023 论文 面向中文长文档问答的交互式网络搜索 的实现。

paper

请阅读中文版


快速链接

概述

platform

在本工作中,我们提出了 WebCPM,这是一个使用中文预训练模型进行交互式网络搜索的项目。我们开发了一个网络搜索界面,该界面既能供人类使用,又能收集人类的网络搜索行为。随后,我们对参数规模高达 100 亿的预训练语言模型进行微调,以模仿人类的网络搜索行为,并根据收集到的事实生成答案。我们开源了网络搜索界面、数据集、实现代码以及模型参数。

要求

要运行我们的代码,请使用以下命令安装所有依赖包:

pip install -r requirements.txt

注意:不同版本的软件包(例如 pytorch)可能会导致与论文中不同的结果。然而,无论您使用什么版本的软件包,总体趋势应该保持一致。

准备

准备数据

首先从 Google Drive 下载数据,并将文件 interactive_datapipeline_data 放入 ./data 目录中,或者运行以下命令:

下载的文件包含以下内容:

interactive_data/data.json 是论文实验中使用的数据集(共 5500 个实例)。 interactive_data/data_zhihu.json 是伴随本论文额外收集的数据集(约 900 个实例),问题来源于 知乎,可用于数据增强。

请使用以下代码将上述数据拆分为训练集、验证集和测试集(设置 --add_zhihu 将添加 data_zhihu.json)。

cd data/interactive_data
python split.py --add_zhihu

除了交互式网络搜索数据外,我们还提供了训练基于流水线的网络搜索所需的数据集:pipeline_data(共 11 万个实例)。所有数据均由 text-davinci-003 模型生成(也涉及必应搜索引擎),随后由人工标注员进行手动筛选。(注意这部分未包含在论文中,无需将其拆分为训练/验证/测试集。)

准备模型

WebCPM 基于 CPM-bee,其参数规模最高可达 100 亿,是社区内最大的中文预训练语言模型之一。我们使用的是 CPM-bee 的早期版本,名为 cpm_10b_webcpm_exp.pt。最新版本的 CPM-bee 托管在 New-CPM-bee 中。您可能需要将 cpm-live 包替换为新版本。请注意,该模型检查点尚未针对任何下游任务进行微调。要获取 cpm_10b_webcpm_exp.pt,您可以从 清华大学云 下载模型参数,或运行以下脚本:

cd models
bash download_model_initial_model.sh

上述代码会将未经微调的 100 亿参数模型下载到 models 目录下。对于经过微调的流水线模型,请参考 download_model_pipeline_finetuned.sh,或直接从 清华大学云 手动下载。

训练 WebCPM

platform

我们提供了两个版本的 WebCPM:(1) 交互式网络搜索(ACL 论文提出的方法)和 (2) 基于流水线的网络搜索,后者更易于部署(该方法未在论文中报道)。这两个版本分别使用不同的脚本生成训练数据,但采用相同的代码进行模型训练。

基于流水线的网络搜索简介

其工作流程分为四个阶段:(1) 首先根据原始问题生成可能的搜索查询;(2) 然后针对每个搜索查询调用必应搜索引擎并访问前 K 个网页;(3) 对每个网页提取重要信息;(4) 根据所有记录的信息生成连贯而细致的答案。所有这些步骤均以多任务方式训练,详情请参阅 run_web_browsing/run_pipeline.py。有关交互式网络搜索的详细信息,请参阅我们的原始论文。

数据预处理

在开始之前,请运行以下命令:

export PYTHONPATH=/**your-base-path**/webcpm

训练数据的生成分为交互式网络搜索和基于流水线的方法。以下代码将在相应文件夹中生成 train_datadev_datatest_data,这些数据将在训练过程中被加载。

交互式网络搜索的训练数据生成

首先,使用以下命令构建合成模型的数据:

cd dataset_interactive
python make_data_synthesis_model.py --data_path ../../data/interactive_data  --augment_qa_data --augment_data_path ../../data/pipeline_data

其中一些参数说明如下:

  • data_path: 数据源路径。
  • augment_qa_data: 是否使用 text-davinci 自动生成的问答数据来增强训练数据。(若要复现论文中的结果,请不要添加此参数)
  • augment_data_path: 增强训练数据的路径。

接下来是搜索模型的训练数据生成:

python make_data_search_model.py --add_query --add_action --add_abstract --abstract_all_tokens

其中一些参数说明如下:

  • data_path: 数据源路径。
  • add_query: 如果为 True,则会添加查询生成数据。
  • add_abstract: 如果为 True,则会添加支持性事实抽取数据。
  • abstract_all_tokens: 如果为 True,支持性事实抽取模块将生成所有 token,而不仅仅是前几个或后几个 token。
  • add_action: 如果为 True,则会添加动作预测数据。
  • add_synthesis: 如果为 True,则会加载合成模型的本地数据。请注意,必须先运行 python make_data_synthesis_model.py 获取合成数据,然后再在此处添加该参数

如果希望以多任务方式训练所有子任务,只需添加上述所有参数;否则,仅添加一个参数(例如 --add_query)即可进行单任务测试。

基于流水线的网络搜索的训练数据生成

请运行以下命令:

cd dataset_pipeline
python make_data.py

训练

要训练 WebCPM,请运行以下命令:

cd training
export PYTHONPATH=/**your-base-path**/webcpm
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
GPUS_PER_NODE=$(echo $CUDA_VISIBLE_DEVICES | tr ',' '\n' | wc -l | xargs)
echo "可见设备数量: $GPUS_PER_NODE,应与实际可见设备数量一致"

set -ex

MASTER_ADDR=localhost
MASTER_PORT=3239
NNODES=1
NODE_RANK=0

OPTS=""
OPTS+=" --model-config config/cpm-bee-10b.json"
OPTS+=" --dataset ../data/dataset_interactive/train_data"
OPTS+=" --dataseteval ../data/dataset_interactive/dev_data"
OPTS+=" --epoch 5"
OPTS+=" --batch-size 8"
OPTS+=" --train-iters 100"
OPTS+=" --save-name webcpm_finetuned"
OPTS+=" --max-length 2560"
OPTS+=" --save ../models/"
OPTS+=" --lr 0.0001"
OPTS+=" --inspect-iters 100"
OPTS+=" --warmup-iters 1"
OPTS+=" --save-epochs 1"
OPTS+=" --lr-decay-style noam"
OPTS+=" --weight-decay 0.01"
OPTS+=" --clip-grad 1.0"
OPTS+=" --loss-scale 32768"
OPTS+=" --start-step 0"
OPTS+=" --load ../models/cpm_10b_webcpm_exp.pt"

CMD="torchrun --nnodes=${NNODES} --nproc_per_node=${GPUS_PER_NODE} --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} finetune_cpm_bee.py ${OPTS}"

echo ${CMD}
$CMD

其中一些参数说明如下:

  • datasetdataseteval: 处理后的文件路径。对于交互式网络搜索,路径为 dataset_interactive;对于基于流水线的方法,路径为 dataset_pipeline
  • batch-size: 单个 GPU 的批次大小,实际批次大小为 GPU 数量 × 每个 GPU 的批次大小。
  • max-length: 数据的最大序列长度(不是模型的最大序列长度),超过此长度的训练样本将会被丢弃。
  • save-namesave: 微调后模型的保存路径及模型检查点的名称。
  • epoch: 训练的轮数。
  • load: 预训练模型检查点的路径(本例中为 cpmb)。

请注意,无论您训练的是哪个模块(或多任务设置),都可以使用上述代码。我们是在 8 张 80G A100 上进行训练的,您可以根据自己的 GPU 设备调整批次大小,性能对超参数并不敏感。

单任务评估

要评估不同的子任务,您可以先运行以下命令,获取微调后模型在测试数据上的预测结果:

cd inference
python inference.py --test_file ../training/dataset_interactive/test.txt --output_file output/test_predictions.json --ckpt_path **your_finetuned_checkpoint.pt

其中一些参数说明如下:

  • test_file: 测试文件路径,应在数据预处理阶段生成。
  • output_file: 您希望写入预测结果的路径。
  • ckpt_path: 您微调后模型的路径。

获得测试文件的预测结果后,您可以运行以下代码进行单任务评估:

python evaluate.py --input_file output/test_predictions.txt --evaluate_action

其中一些参数说明如下:

  • input_file: 您写入测试文件预测结果的路径。
  • evaluate_action: 是否要评估动作预测任务(F1)。
  • evaluate_query: 是否要评估搜索查询生成任务(Rougel-L)。
  • evaluate_abstract: 是否要评估支持性事实抽取任务(Rougel-L)。
  • abstract_all_tokens: 您的模型在支持性事实抽取方面采用哪种模式,如果您生成所有 token,请添加此参数(Rougel-L)。
  • evaluate_answer: 是否要评估答案合成任务(Rougel-L)。
  • beam_size: 将束宽设置为 1 可显著加快推理速度,但可能会略微降低性能。

使用 WebCPM 回答新问题

这是整个流水线评估的实现。您可以使用以下代码为新问题生成答案。请注意,这需要您首先从 这里 获取 Bing 搜索 API 密钥,并运行以下命令:

cd run_web_browsing
export PYTHONPATH=/**base-path**/webcpm
export BING_SEARCH_KEY="**Your Bing Search API Key**"

交互式网络搜索

python run_interactive.py --data_path predictions/test_interactive.json --ckpt_path **your-checkpoint**

基于流水线的网络搜索

python run_pipeline.py --data_path predictions/test.json --ckpt_path **your-checkpoint**

其中一些参数说明如下:

  • data_path: 您写入预测结果的路径。
  • ckpt_path: 您使用基于流水线的方法进行训练的检查点路径。

数据标注平台搭建

platform

我们开源了我们的网页搜索界面,您可以将其用于数据标注。请参阅标注。目前代码尚显杂乱,我们很快会上传一个更整洁的版本。

发现问题或有疑问?

如果您对代码或论文有任何疑问,请联系Yujia(qyj20@mails.tsinghua.edu.cn)或提交一个问题。

工具学习相关资源

借助基础模型的强大能力,我们非常期待它们在操作各类工具方面的应用。WebCPM便是其中一项典型的研究尝试。更多资源请参阅以下内容:

引用

如果您认为我们的WebCPM很有用,请使用以下引用:

@inproceedings{qin2023webcpm,
    title = "WebCPM: 用于中文长文本问答的交互式网络搜索",
    author={秦宇佳、蔡子涵、金典、闫兰、梁世豪、朱坤伦、林彦凯、韩旭、丁宁、王华东、谢若冰、齐凡超、刘知远、孙茂松、周杰},
    booktitle = "ACL 2023会议论文集",
    year = "2023",
    publisher = "计算语言学协会",
    url = "https://arxiv.org/abs/2305.06849",
}

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架