站点图标 高效码农

揭秘STORM知识创作助手:如何用AI协作写作技术10倍提升维基百科级内容产出?

用 STORM 和 Co-STORM 打造你的知识创作助手

在信息爆炸的时代,高效的知识创作和整理变得前所未有的重要。斯坦福大学推出的 STORM(Synthesis of Topic Outlines through Retrieval and Multi-perspective Question Asking)及其升级版 Co-STORM,就像一位智能助手,能帮我们从零开始撰写类似维基百科的文章。本文将深入浅出地介绍这一工具,并手把手教你如何安装和使用。

一、STORM 是什么?

简单来说,STORM 是一个基于大型语言模型(LLM)的系统,它能像人类一样,先通过网络搜索收集资料,再整理出文章大纲,最后撰写出带有引用的完整文章。就像写论文前的文献调研和提纲撰写,STORM 能帮我们完成这些耗时费力的前期工作。

更厉害的是,它的升级版 Co-STORM 还支持人机协作。想象一下,你和一个知识渊博的助手一起探讨话题,它不仅能回答问题,还会根据对话提出新问题,引导你深入思考。这种互动式知识整理,让复杂的主题也能逐步理清。

二、STORM 的工作原理

STORM 的巧妙之处在于,它把写长文章这个复杂任务拆解成两步:

  1. 预写作阶段:它先在互联网上搜索资料,收集相关参考文献,然后生成一个大纲。这就好比我们写论文前先确定几个核心章节。
  2. 写作阶段:有了大纲和资料后,它再把这些内容扩展成完整的文章,并添加引用。

为了问出高质量的问题,STORM 采用了两种策略:

  1. 多视角引导式提问:它会参考类似主题的文章,发现不同视角,然后从这些角度提问。比如写 “人工智能伦理” 时,它会从技术、社会、法律等多个维度思考。
  2. 模拟对话:它模拟维基百科作者和领域专家之间的对话。通过这种 “头脑风暴”,它能不断完善对主题的理解,提出更有深度的后续问题。

三、Co-STORM 的协作魔法

Co-STORM 在 STORM 的基础上更进一步,它引入了一种协作对话协议,让人类和 AI 能顺畅互动:

  1. Co-STORM 专家:这个 AI 专家基于外部知识源回答问题,或者根据对话历史提出新问题。
  2. 主持人:它会从检索到但未直接使用的信息中获取灵感,提出发人深省的问题。
  3. 人类用户:你可以选择被动观察对话,深化对主题的理解;也可以主动发言,引导讨论方向。

此外,Co-STORM 还维护一个动态更新的思维导图。这个思维导图把收集到的信息整理成层次化的概念结构,就像在你和 AI 之间搭建了一个共享的知识空间。当对话深入时,它能减轻你的认知负担,帮你理清思路。

四、如何安装 STORM 和 Co-STORM?

安装这个工具分为两种方式:直接安装预编译包,或者从源代码安装以便定制。

(一)直接安装预编译包

打开终端,输入以下命令:

pip install knowledge-storm

这种方式最适合想快速体验功能的用户,系统会自动安装所有依赖。

(二)从源代码安装

  1. 克隆项目仓库:
git clone https://github.com/stanford-oval/storm.git
cd storm
  1. 创建并激活 Python 环境:
conda create -n storm python=3.11
conda activate storm
  1. 安装依赖:
pip install -r requirements.txt

这种方式适合想根据自己的需求修改代码的用户,比如调整 AI 模型或检索模块。

五、如何使用 STORM?

(一)基本使用示例

代码示例:

import os
from knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs
from knowledge_storm.lm import LitellmModel
from knowledge_storm.rm import YouRM

# 配置语言模型
lm_configs = STORMWikiLMConfigs()
openai_kwargs = {
    'api_key': os.getenv("OPENAI_API_KEY"),
    'temperature': 1.0,
    'top_p': 0.9,
}
gpt_35 = LitellmModel(model='gpt-3.5-turbo', max_tokens=500, **openai_kwargs)
gpt_4 = LitellmModel(model='gpt-4o', max_tokens=3000, **openai_kwargs)

lm_configs.set_conv_simulator_lm(gpt_35)
lm_configs.set_question_asker_lm(gpt_35)
lm_configs.set_outline_gen_lm(gpt_4)
lm_configs.set_article_gen_lm(gpt_4)
lm_configs.set_article_polish_lm(gpt_4)

# 配置检索模块
engine_args = STORMWikiRunnerArguments(...)
rm = YouRM(ydc_api_key=os.getenv('YDC_API_KEY'), k=engine_args.search_top_k)

# 创建运行器
runner = STORMWikiRunner(engine_args, lm_configs, rm)

# 运行
topic = input('输入主题:')
runner.run(
    topic=topic,
    do_research=True,
    do_generate_outline=True,
    do_generate_article=True,
    do_polish_article=True,
)
runner.post_run()
runner.summary()

(二)参数解释

  • do_research:是否进行网络搜索收集信息。如果是 False,会加载之前的结果。
  • do_generate_outline:是否生成文章大纲。
  • do_generate_article:是否根据大纲和资料生成完整文章。
  • do_polish_article:是否润色文章,比如添加总结部分、去除重复内容。

六、如何使用 Co-STORM?

(一)基本使用示例

from knowledge_storm.collaborative_storm.engine import CollaborativeStormLMConfigs, RunnerArgument, CoStormRunner
from knowledge_storm.lm import LitellmModel
from knowledge_storm.logging_wrapper import LoggingWrapper
from knowledge_storm.rm import BingSearch

# 配置语言模型
lm_config = CollaborativeStormLMConfigs()
openai_kwargs = {
    "api_key": os.getenv("OPENAI_API_KEY"),
    "temperature": 1.0,
    "top_p": 0.9,
}

question_answering_lm = LitellmModel(model='gpt-4o', max_tokens=1000, **openai_kwargs)
discourse_manage_lm = LitellmModel(model='gpt-4o', max_tokens=500, **openai_kwargs)
utterance_polishing_lm = LitellmModel(model='gpt-4o', max_tokens=2000, **openai_kwargs)
warmstart_outline_gen_lm = LitellmModel(model='gpt-4o', max_tokens=500, **openai_kwargs)
question_asking_lm = LitellmModel(model='gpt-4o', max_tokens=300, **openai_kwargs)
knowledge_base_lm = LitellmModel(model='gpt-4o', max_tokens=1000, **openai_kwargs)

lm_config.set_question_answering_lm(question_answering_lm)
lm_config.set_discourse_manage_lm(discourse_manage_lm)
lm_config.set_utterance_polishing_lm(utterance_polishing_lm)
lm_config.set_warmstart_outline_gen_lm(warmstart_outline_gen_lm)
lm_config.set_question_asking_lm(question_asking_lm)
lm_config.set_knowledge_base_lm(knowledge_base_lm)

# 配置检索模块
topic = input('输入主题:')
runner_argument = RunnerArgument(topic=topic, ...)
logging_wrapper = LoggingWrapper(lm_config)
bing_rm = BingSearch(bing_search_api_key=os.environ.get("BING_SEARCH_API_KEY"), k=runner_argument.retrieve_top_k)

# 创建运行器
costorm_runner = CoStormRunner(lm_config=lm_config, runner_argument=runner_argument, logging_wrapper=logging_wrapper, rm=bing_rm)

# 启动并交互
costorm_runner.warm_start()

# 观察对话
conv_turn = costorm_runner.step()

# 主动引导对话
costorm_runner.step(user_utterance="你的回答中关于 X 部分可以更详细吗?")

# 生成报告
costorm_runner.knowledge_base.reorganize()
article = costorm_runner.generate_report()
print(article)

(二)交互方式

  1. 观察模式:运行 costorm_runner.step(),让 AI 专家和主持人先进行对话,你会看到它们如何从不同角度探索主题。
  2. 主动引导:通过 costorm_runner.step(user_utterance="你的问题"),你可以随时插入自己的想法,比如要求更详细地解释某个部分,或者改变讨论方向。

七、如何定制 STORM 和 Co-STORM?

(一)定制 STORM

STORM 的引擎由四个模块组成:

  1. 知识整理模块:负责收集与主题相关的信息。你可以调整它的搜索策略,比如增加搜索关键词的多样性。
  2. 大纲生成模块:把收集到的信息整理成层次化的大纲。你可以修改它的逻辑,让大纲更符合特定领域的需求,比如学术论文的大纲格式。
  3. 文章生成模块:根据大纲填充内容。你可以调整它的写作风格,比如更正式或更口语化。
  4. 文章润色模块:对生成的文章进行优化。你可以加入自己的规则,比如强调某些重点内容。

这些模块的接口定义在 knowledge_storm/interface.py 中,具体实现则在 knowledge_storm/storm_wiki/modules/* 文件夹里。你可以根据自己的需求修改这些文件。

(二)定制 Co-STORM

Co-STORM 的独特之处在于它的协作对话协议:

  1. AI 代理:它有多种 AI 代理类型,比如专家代理和主持人代理。它们的行为定义在 knowledge_storm/collaborative_storm/modules/co_storm_agents.py 中。你可以调整这些代理的策略,比如让主持人提出更具挑战性的问题。
  2. 对话轮次管理:它的对话流程由 DiscourseManager 控制,定义在 knowledge_storm/collaborative_storm/engine.py 中。你可以修改这里的逻辑,调整对话的节奏和方向。

八、STORM 和 Co-STORM 的数据集

为了方便研究,项目提供了两个数据集:

(一)FreshWiki 数据集

这个数据集包含 100 篇高质量的维基百科文章,涵盖了从 2022 年 2 月到 2023 年 9 月期间编辑最频繁的页面。它的作用就像一个基准,帮助研究人员评估 STORM 生成的文章质量。

下载链接:Hugging Face FreshWiki 数据集

为了确保数据的时效性,项目还开源了数据构建流程的代码,方便未来重复实验。

(二)WildSeek 数据集

这个数据集来自 STORM 的网络研究预览,记录了用户在复杂信息搜索任务中的真实问题和目标。它能帮助我们了解用户在不同主题下的信息需求模式。

下载链接:Hugging Face WildSeek 数据集

九、快速上手示例脚本

项目提供了一些示例脚本,方便快速体验功能。

(一)运行 STORM 示例

  1. 创建 secrets.toml 文件,配置 API 密钥:
OPENAI_API_KEY="your_openai_api_key"
BING_SEARCH_API_KEY="your_bing_search_api_key"
  1. 运行以下命令:
python examples/storm_examples/run_storm_wiki_gpt.py \
    --output-dir ./output \
    --retriever bing \
    --do-research \
    --do-generate-outline \
    --do-generate-article \
    --do-polish-article

(二)运行 Co-STORM 示例

  1. 确保 secrets.toml 文件已配置必应搜索和编码器 API 密钥。
  2. 运行以下命令:
python examples/costorm_examples/run_costorm_gpt.py \
    --output-dir ./output \
    --retriever bing

十、未来展望

STORM 和 Co-STORM 的团队正在努力:

  1. 增加人类参与功能:让用户能更深入地参与到知识整理过程中,比如直接编辑大纲或文章。
  2. 开发信息抽象功能:把整理好的信息转化为多种形式的展示,比如思维导图、表格等,而不仅仅是文章。

如果你在使用过程中有任何问题或建议,可以通过项目提供的联系方式反馈。这个工具不仅适合科研人员整理文献,也适合学生写论文、职场人士做行业研究,甚至是自媒体创作者快速生成知识类内容。

希望这篇介绍能帮你更好地理解和使用 STORM 与 Co-STORM,让知识创作变得更高效、更有乐趣!

退出移动版