STORM斯坦福大学革命性的研究工具利用代理和代理工作流程的力量

STORM斯坦福大学革命性的研究工具利用代理和代理工作流程的力量

Barry Lv6

在快速发展的人工智能领域,斯坦福大学推出了一项开创性的项目,承诺将彻底改变我们进行研究、综合信息和创建结构良好的内容的方式。STORM,代表通过检索和多角度提问合成主题大纲,被誉为迄今为止最有效的AI研究和写作工具之一。

什么是 STORM?

STORM 是一个开源 AI 系统,旨在针对任何给定主题创建全面的、类似维基百科的页面。STORM 与其他 AI 工具的不同之处在于,它不仅能够汇编信息,还能引用其使用的来源,从而提供在当今信息环境中至关重要的透明度和可信度。

STORM 是一个代理系统,帮助生成撰写类似维基百科文章的主题大纲。它旨在通过利用大型语言模型(LLMs)和模拟作家与主题专家之间的对话来自动化写作前阶段。这种方法增强了写作前阶段,产生的文章结构良好、内容全面,能够与维基百科上的文章相媲美。

主要特点:

  1. 全面的内容创作:STORM 能够生成详细且结构良好的文章,涵盖广泛的主题。
  2. 本地运行能力:用户可以在本地计算机上运行 STORM,确保研究过程的隐私和控制。
  3. 来源引用:每条信息都链接回其原始来源,便于轻松进行事实核查和进一步探索。
  4. 多智能体研究:STORM 利用一组 AI 智能体对给定主题进行深入研究。
  5. 开源可用性:作为一个开源项目,STORM 向全球的开发者和研究人员开放,促进合作和持续改进。
  6. 自上而下的写作方法:STORM 采用自上而下的方法,在撰写内容之前确定大纲,这对于有效传达信息给读者至关重要。
  7. 多样化视角发现:STORM 在研究给定主题时发现并融入多样化的视角,从而生成更全面和信息丰富的文章。
  8. 多视角提问:该系统模拟对话,拥有不同视角的作者向主题专家提出问题,从而深入探索主题内容。

理解代理系统

要充分理解STORM的能力,了解代理系统的概念是很重要的,这构成了STORM功能的基础。

代理系统与工作流程

代理系统是由人工智能驱动的框架,旨在以类似于人类代理的自主性和智能执行任务。这些系统的特点包括:

  1. 感知环境:它们可以从各种来源收集和处理信息。
  2. 做出决策:基于收集到的信息,它们可以决定最佳行动方案。
  3. 采取行动:它们可以根据决策执行任务或提供输出。
  4. 学习和适应:许多代理系统具备随着时间提高性能的能力。

代理工作流程指的是这些系统为完成任务而遵循的一系列步骤或过程。在STORM的情况下,代理工作流程包括信息检索、多角度提问和内容综合。

AI代理

AI代理是代理系统内执行特定任务的单个组件或实体。在STORM中,多个AI代理协同工作,创建一个全面的研究和写作工具。这些代理可能包括:

  1. 研究代理:负责从互联网的各种来源收集信息。
  2. 提问代理:模拟不同的观点以生成有关主题的深刻问题。
  3. 专家代理:为提问代理提出的问题提供答案。
  4. 综合代理:将收集到的信息编译并组织成一个连贯的文章结构。

使用多个代理使STORM能够从不同角度处理任务,就像一组人类研究人员和作家在复杂项目上协作一样。

STORM作为一个代理系统

STORM利用代理系统的力量来自动化和增强研究与写作过程。通过在协调的工作流程中使用多个AI代理,STORM可以:

  1. 对特定主题进行全面且多方面的研究。
  2. 生成多样化的视角和问题,这些是人类研究者可能会忽视的。
  3. 以结构化和连贯的方式综合信息。
  4. 根据每个主题或任务的具体要求调整其方法。

这种代理方法使STORM能够生成全面、结构良好的内容,其广度和深度可与人类撰写的文章相媲美。

STORM 的工作原理

STORM 过程可以分为三个主要步骤:检索、多角度提问和综合。

  1. 检索:在给定主题时,STORM 立即启动,部署其 AI 代理团队在互联网上搜寻相关信息。此步骤涉及从各种来源收集广泛的数据。
  2. 多角度提问:STORM 模拟对话,具有不同视角的作者向主题专家提出问题。这使得对主题进行更深入的探索,并通过迭代研究形成深入的问题。通过考虑多个观点,STORM 帮助作者全面理解主题内容。
  3. 综合:最后,STORM 将收集到的数据综合成一篇连贯、结构良好的文章。它创建一个逻辑大纲,然后填充内容,确保信息以结构化且易于理解的方式呈现。

例如,当被问及业力瑜伽时,STORM 生成了一篇全面的维基,涵盖了印度精神文本、历史背景、词源、实践和技巧等各个方面。

STORM 方法的好处

STORM 的内容创作方法提供了几个关键好处:

  1. 结构良好的内容:通过自上而下的方法并在写作之前创建大纲,STORM 确保生成的文章逻辑清晰且易于导航。
  2. 全面覆盖:多角度提问功能允许对主题进行深入探索,从而生成与维基百科页面相当的广度和深度的文章。
  3. 多样化观点:通过积极寻求和融入不同的视角,STORM 有助于创建更平衡和信息丰富的内容。
  4. 节省时间:自动化写作前的准备阶段可以显著减少研究和结构复杂主题所需的时间和精力。
  5. 一致性:STORM 的系统化方法确保不同主题和文章之间保持一致的质量水平。

访问 STORM

目前访问的最简单方法是 https://storm.genie.stanford.edu/

只需选择“新会话”并输入主题即可开始。

查看头脑风暴过程

生成的文章、带有目录和浮动引用的内容保存在“我的资料库”中

设置 STORM

选项 1:

对于那些有兴趣部署 STORM 的用户,设置过程包括几个步骤:

  1. 克隆 GitHub 仓库
  2. 创建一个包含 Python 3.11 的 Conda 环境
  3. 激活环境
  4. 安装所需的依赖项
  5. 在 secrets.toml 文件中配置 API 密钥

STORM 需要两个 API 密钥才能正常工作:

  • 一个 OpenAI API 密钥
  • 一个 You.com 搜索 API 密钥(可在 https://api.you.com/ 获得免费试用)

用户可以通过命令行界面或用户友好的基于 Streamlit 的 UI 运行 STORM。

详细说明可在 STORM GitHub 页面找到。

选项 2:使用 Google Colab

这提供了一个机会来检查一些代码并理解 STORM 的工作原理。

使用 OpenAI

  1. 设置环境:首先,我们需要安装所需的包。knowledge-storm 包是使用 STORM 的必要条件:
1
!pip install knowledge-storm
  1. 导入所需库:安装后,我们导入必要的模块:
1
2
3
4
import os
from knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs
from knowledge_storm.lm import OpenAIModel
from knowledge_storm.rm import YouRM
  1. 设置 API 密钥和配置:
1
2
3
4
5
6
7
8
os.environ["OPENAI_API_KEY"]="your_api_key_here"
os.environ["YDC_API_KEY"]="your_YDC_api_key_here"
lm_configs = STORMWikiLMConfigs()
openai_kwargs = {
'api_key': os.getenv("OPENAI_API_KEY"),
'temperature': 1.0,
'top_p': 0.9,
}
  1. 配置语言模型:我们为不同的 STORM 组件设置不同的模型:
1
2
3
4
5
6
7
gpt_35 = OpenAIModel(model='gpt-4o-mini', max_tokens=500, **openai_kwargs)
gpt_4 = OpenAIModel(model='gpt-4o-mini', 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)
  1. 设置 STORM Runner:我们使用我们的配置初始化 STORM 运行器:
1
2
3
engine_args = STORMWikiRunnerArguments(output_dir='output')
rm = YouRM(ydc_api_key=os.getenv('YDC_API_KEY'), k=engine_args.search_top_k)
runner = STORMWikiRunner(engine_args, lm_configs, rm)
  1. 运行 STORM:最后,我们运行 STORM 以生成给定主题的文章:
1
2
3
4
5
6
7
8
9
10
topic = input('Topic: ')
runner.run(
topic=topic,
do_research=True,
do_generate_outline=True,
do_generate_article=True,
do_polish_article=True,
)
runner.post_run()
runner.summary()

使用 Claude AI

  1. 安装所需包:
1
2
!pip install anthropic
!pip install knowledge-storm
  1. 导入所需库:我们导入所需的模块,包括 Claude 特定的模块:
1
2
3
4
5
6
import os
from argparse import ArgumentParser
from knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs
from knowledge_storm.lm import ClaudeModel
from knowledge_storm.rm import YouRM, BingSearch
from knowledge_storm.utils import load_api_key
  1. 设置环境变量:
1
2
os.environ["ANTHROPIC_API_KEY"] = "your_anthropic_key_here"
os.environ["YDC_API_KEY"] = "your_YDC_api_key_here"
  1. 使用 Claude 模型配置 STORM:我们设置 STORM 以使用不同的 Claude 模型来处理不同的组件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
lm_configs = STORMWikiLMConfigs()
claude_kwargs = {
'api_key': os.getenv("ANTHROPIC_API_KEY"),
'temperature': 1.0,
'top_p': 0.9
}
conv_simulator_lm = ClaudeModel(model='claude-3-haiku-20240307', max_tokens=500, **claude_kwargs)
question_asker_lm = ClaudeModel(model='claude-3-sonnet-20240229', max_tokens=500, **claude_kwargs)
outline_gen_lm = ClaudeModel(model='claude-3-opus-20240229', max_tokens=400, **claude_kwargs)
article_gen_lm = ClaudeModel(model='claude-3–5-sonnet-20240620', max_tokens=700, **claude_kwargs)
article_polish_lm = ClaudeModel(model='claude-3–5-sonnet-20240620', max_tokens=4000, **claude_kwargs)
lm_configs.set_conv_simulator_lm(conv_simulator_lm)
lm_configs.set_question_asker_lm(question_asker_lm)
lm_configs.set_outline_gen_lm(outline_gen_lm)
lm_configs.set_article_gen_lm(article_gen_lm)
lm_configs.set_article_polish_lm(article_polish_lm)
  1. 设置 STORM Runner 参数:我们配置 STORM 运行器参数:
1
2
3
4
5
6
7
engine_args = STORMWikiRunnerArguments(
output_dir=args.output_dir,
max_conv_turn=args.max_conv_turn,
max_perspective=args.max_perspective,
search_top_k=args.search_top_k,
max_thread_num=args.max_thread_num,
)
  1. 选择检索模型:我们设置检索模型,可以选择 Bing Search 或 You.com:
1
2
3
4
if args.retriever == 'bing':
rm = BingSearch(bing_search_api=os.getenv('BING_SEARCH_API_KEY'), k=engine_args.search_top_k)
elif args.retriever == 'you':
rm = YouRM(ydc_api_key=os.getenv('YDC_API_KEY'), k=engine_args.search_top_k)
  1. 初始化并运行 STORM:最后,我们初始化 STORM 运行器并执行:
1
2
3
4
5
6
7
8
9
10
11
runner = STORMWikiRunner(engine_args, lm_configs, rm)
topic = input('Topic: ')
runner.run(
topic=topic,
do_research=args.do_research,
do_generate_outline=args.do_generate_outline,
do_generate_article=args.do_generate_article,
do_polish_article=args.do_polish_article,
)
runner.post_run()
runner.summary()

以上展示了设置和运行 STORM 的不同方法,一种使用 OpenAI 的 GPT 模型,另一种使用 Anthropic 的 Claude 模型。两种方法遵循相同的基本结构,但在具体模型和配置上有所不同。

每种方法的输出是一组 9 个文件,如下所示。

1
2
3
4
5
6
7
8
9
conversation_log.json 
direct_gen_outline.txt
llm_call_history.jsonl
raw_search_results.json
run_config.json
storm_gen_article.txt
storm_gen_article_polished.txt
storm_gen_outline.txt
url_to_info.json

注意:‘storm_gen_article_polished.txt’ 可以视为包含所有内容的最终文件,格式为 Markdown,但引用无效。

除了上述内容,STORM 还可以使用 Qdrant 访问个人数据集,但我未能使其正常工作。

这里是我 GitHub 仓库中的两个文件,利用了 STORM GitHub 中的示例构建和一组输出文件。

灵活性与未来发展

STORM 的一个优势是其灵活性。虽然它可以利用 OpenAI 强大的语言模型,但并不依赖于它们。可以使用 VLM 与 Mistral 进行本地设置选项,Ollama 集成本地模型也即将推出。

该项目在开发者社区中获得了显著的关注,在发布不久后便在 GitHub 上积累了近 62,000 个星标。这种受欢迎程度可能会推动 STORM 功能的进一步改进和扩展。

随着 STORM 的不断发展,其开发者正在致力于一些令人兴奋的新功能。其中一个正在开发的功能是“人机协作模式”,这有望进一步增强工具的实用性和用户互动。这可能会使内容创作更加细致和个性化,将 AI 的优势与人类的洞察力和创造力相结合。

结论

STORM 代表了人工智能辅助代理研究、内容创作和写作的重要进步。通过结合多个 AI 代理的强大功能、全面的网络爬取、连贯的内容综合以及多角度提问等创新特性,同时保持来源透明性,STORM 有潜力成为研究人员、作家和各个领域知识探索者的可靠工具。

该系统在自动化写作前期阶段、发现多样化视角和创建结构良好的大纲方面的能力,解决了在制作高质量、全面内容时面临的许多挑战。随着项目的持续发展和改进,它可能会重新定义我们在数字时代的信息收集、综合和内容创作的方式,为人工智能辅助写作和研究工具设定新的标准。

  • 标题: STORM斯坦福大学革命性的研究工具利用代理和代理工作流程的力量
  • 作者: Barry
  • 创建于 : 2024-07-28 20:17:34
  • 更新于 : 2024-08-31 06:59:45
  • 链接: https://wx.role.fun/2024/07/28/48a6693db5a44a7eba98394ed5ccd896/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。