LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略

news2025/1/31 10:01:27

LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略

目录

STORM系统简介

1、Co-STORM

2、更新新闻

STORM系统安装和使用方法

1、安装

pip安装

直接克隆GitHub仓库

2、模型和数据集

两个数据集

FreshWiki数据集

WildSeek数据集

支持的模型

3、使用方法

STORM (STORMWikiRunner)

Co-STORM (CoStormRunner)

4、管道定制

STORM

Co-STORM

案例应用

1、STORM示例

2、Co-STORM示例


STORM系统简介

2024年4月发布,STORM是一个基于大型语言模型(LLM)的知识整理系统,能够根据互联网搜索结果从零开始撰写类似维基百科的文章,并包含参考文献。它将长文章的生成过程分解为两个阶段
>> 预写阶段:系统进行基于互联网的调研,收集参考资料并生成提纲
>> 写作阶段:系统利用提纲和参考资料生成包含引文的完整文章

STORM的核心在于自动提出高质量问题的机制。它采用两种策略来提高问题的深度和广度:
>> 视角引导式提问:根据输入主题,STORM通过调查类似主题的现有文章来发现不同的视角,并利用这些视角来控制提问过程。
>> 模拟对话:STORM模拟维基百科撰写者和主题专家之间的对话,这些对话以互联网资源为基础,使语言模型能够更新对主题的理解并提出后续问题。

STORM无法生成可以直接发表的文章(这通常需要大量编辑),但经验丰富的维基百科编辑发现它在写作前的准备阶段非常有用。超过70,000人体验过它的在线研究预览版。

GitHub地址:https://github.com/stanford-oval/storm

1、Co-STORM

Co-STORM是STORM的增强版,它允许人机协作,以支持更一致和更符合用户偏好的信息查找和知识整理。Co-STORM引入了协作式话语协议,通过轮次管理策略支持人机之间的流畅协作,包含以下几个角色:
>> Co-STORM LLM专家:基于外部知识源生成答案,或根据对话历史提出后续问题。
>> 主持人:根据检索器发现但未在之前的轮次中直接使用到的信息,生成发人深省的问题。问题生成也可以基于外部信息!
>> 人类用户:人类用户可以(1)观察对话以更深入地理解主题,或(2)主动参与对话,通过插入话语来引导讨论重点。

Co-STORM还维护一个动态更新的思维导图,它将收集到的信息组织成层次化的概念结构,旨在构建人类用户和系统之间的共享概念空间。思维导图已被证明有助于减少长时间深入讨论时的认知负担。

STORM和Co-STORM都以高度模块化的方式使用dspy实现。总而言之,STORM和Co-STORM提供了一个强大的框架,用于构建基于LLM的知识整理系统,并支持高度的自定义和扩展。

2、更新新闻

[2025/01] 在知识风暴 v1.1.0 版本中,我们为语言模型和嵌入模型添加了 litellm 集成

[2024/09] Co-STORM 代码库现已发布,并集成到 knowledge-storm Python 包 v1.0.0 中。运行 pip install knowledge-storm --upgrade 进行查看。

[2024 年 9 月] 我们推出协作式 STORM(Co-STORM)以支持人类与 AI 协同进行知识整理!Co-STORM 论文已被 EMNLP 2024 主会议录用。

[2024/07] 您现在可以使用“pip install knowledge-storm”来安装我们的软件包!

[2024/07] 我们新增了 VectorRM 以支持基于用户提供的文档进行知识关联,这补充了现有的搜索引擎支持(YouRM、BingSearch)。(详情请见 #58)

[2024/07] 我们为开发者发布了演示版的轻量级界面,这是一个使用 Python 中的 Streamlit 框架构建的极简用户界面,非常适合本地开发和演示托管(查看 #54)

[2024 年 6 月] 我们将在 2024 年北美计算语言学协会年会(NAACL 2024)上展示 STORM!6 月 17 日请在海报展示会 2 找到我们,或者查看我们的展示材料。

[2024/05] 我们在 rm.py 中添加了必应搜索支持。使用 GPT-4o 测试 STORM - 我们现在在演示中使用 GPT-4o 模型配置文章生成部分。

[2024/04] 我们发布了 STORM 代码库的重构版本!我们为 STORM 管道定义了接口,并重新实现了 STORM-wiki(请查看 src/storm_wiki),以展示如何实例化该管道。我们提供了 API 以支持不同语言模型的定制以及检索/搜索集成。

STORM系统安装和使用方法

1、安装

pip安装

pip install knowledge-storm

直接克隆GitHub仓库

安装源码,以便直接修改STORM引擎的行为:

git clone https://github.com/stanford-oval/storm.git

cd storm
conda create -n storm python=3.11
conda activate storm

pip install -r requirements.txt

2、模型和数据集

两个数据集

FreshWiki和WildSeek,分别用于研究自动知识整理和复杂信息检索。

FreshWiki数据集

包含 100 篇高质量的维基百科文章,这些文章聚焦于 2022 年 2 月至 2023 年 9 月期间编辑次数最多的页面。更多详情请参阅 STORM 论文的 2.1 节。可以直接从 Huggingface 下载数据集。为缓解数据污染问题,我们存档了数据构建流程的源代码,以便日后重复使用。

WildSeek数据集

为了研究用户在复杂信息搜索任务中的兴趣,我们在野外利用从网络研究预览中收集的数据创建了 WildSeek 数据集。我们对数据进行了下采样,以确保主题的多样性和数据的质量。每个数据点都是一对,包括一个主题和用户针对该主题进行深度搜索的目标。更多详情,请参阅 Co-STORM 论文的第 2.2 节和附录 A。

支持的模型

>> 语言模型组件:litellm 支持的所有语言模型,https://docs.litellm.ai/docs/providers。
>> 嵌入模型组件:litellm 支持的所有嵌入模型,https://docs.litellm.ai/docs/embedding/supported_embedding。
>> 检索模块组件:YouRM、BingSearch、VectorRM、SerperRM、BraveRM、SearXNG、DuckDuckGoSearchRM、TavilySearchRM、GoogleSearch 和 AzureAISearch

无论是 STORM 还是 Co-STORM,它们都在信息整理层工作,您需要分别设置信息检索模块和语言模型模块,以创建它们各自的运行器类。

3、使用方法

STORM和Co-STORM都提供了Python接口。

STORM (STORMWikiRunner)

STORM的知识整理引擎定义为一个简单的Python STORMWikiRunner 类。以下是一个使用You.com搜索引擎和OpenAI模型的例子:

# 导入所需的模块
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 API密钥,并设置模型参数
openai_kwargs = {
    'api_key': os.getenv("OPENAI_API_KEY"),  # 从环境变量中获取API密钥
    'temperature': 1.0,  # 控制生成文本的随机性
    'top_p': 0.9,  # 控制生成文本的多样性
}

# STORM是一个语言模型系统,不同的组件可以使用不同的模型以达到成本和质量之间的平衡
# 实践中,选择一个更便宜/更快的模型用于`conv_simulator_lm`,用于拆分查询和在对话中合成答案
# 选择一个更强大的模型用于`article_gen_lm`,以生成带有引用的可验证文本
gpt_35 = LitellmModel(model='gpt-3.5-turbo', max_tokens=500, **openai_kwargs)  # 创建一个GPT-3.5模型实例
gpt_4 = LitellmModel(model='gpt-4o', max_tokens=3000, **openai_kwargs)  # 创建一个GPT-4模型实例

# 设置不同的语言模型用于不同的任务
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)  # 文章润色器

# 查看STORMWikiRunnerArguments类以获取更多配置选项
engine_args = STORMWikiRunnerArguments(...)  # 初始化运行参数

# 初始化资源管理器
rm = YouRM(ydc_api_key=os.getenv('YDC_API_KEY'), k=engine_args.search_top_k)  # 使用环境变量中的API密钥和搜索参数

# 创建STORMWikiRunner实例
runner = STORMWikiRunner(engine_args, lm_configs, rm)

# 使用简单的run方法调用STORMWikiRunner实例
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()  # 输出摘要

# 参数说明:
# do_research: 如果为True,模拟不同观点的对话以收集关于主题的信息;否则,加载结果。
# do_generate_outline: 如果为True,为该主题生成大纲;否则,加载结果。
# do_generate_article: 如果为True,基于大纲和收集的信息生成文章;否则,加载结果。
# do_polish_article: 如果为True,通过添加摘要部分和(可选)删除重复内容来润色文章;否则,加载结果。

Co-STORM (CoStormRunner)

Co-STORM的知识整理引擎定义为一个简单的Python CoStormRunner 类。以下是一个使用Bing搜索引擎和OpenAI模型的例子:

# 导入协同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

# Co-STORM采用了与STORM相同的多个LM系统范式
lm_config = CollaborativeStormLMConfigs()  # 初始化协同STORM的语言模型配置

# 设置OpenAI API的参数
openai_kwargs = {
    "api_key": os.getenv("OPENAI_API_KEY"),  # 从环境变量中获取API密钥
    "api_provider": "openai",  # API提供商
    "temperature": 1.0,  # 控制生成文本的随机性
    "top_p": 0.9,  # 控制生成文本的多样性
    "api_base": None,  # API基础URL
}

# 创建不同用途的语言模型实例
question_answering_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=1000, **openai_kwargs)  # 问题回答模型
discourse_manage_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=500, **openai_kwargs)  # 话语管理模型
utterance_polishing_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=2000, **openai_kwargs)  # 话语润色模型
warmstart_outline_gen_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=500, **openai_kwargs)  # 大纲生成模型
question_asking_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=300, **openai_kwargs)  # 问题提问模型
knowledge_base_lm = LitellmModel(model=gpt_4o_model_name, 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)

# 查看Co-STORM的RunnerArguments类以获取更多配置选项
topic = input('Topic: ')  # 获取用户输入的主题
runner_argument = RunnerArgument(topic=topic, ...)  # 初始化运行参数

# 初始化日志包装器
logging_wrapper = LoggingWrapper(lm_config)

# 初始化Bing搜索资源管理器
bing_rm = BingSearch(bing_search_api_key=os.environ.get("BING_SEARCH_API_KEY"),
                     k=runner_argument.retrieve_top_k)  # 使用环境变量中的API密钥和检索参数

# 创建CoStormRunner实例
costorm_runner = CoStormRunner(lm_config=lm_config,
                               runner_argument=runner_argument,
                               logging_wrapper=logging_wrapper,
                               rm=bing_rm)

# 使用warmstart()和step(...)方法调用CoStormRunner实例

# 热启动系统,建立Co-STORM与用户之间的共享概念空间
costorm_runner.warm_start()

# 通过协作话语逐步进行
# 可以按任意顺序运行以下任一代码片段,次数不限
# 观察对话:
conv_turn = costorm_runner.step()
# 主动引导对话,注入用户话语:
costorm_runner.step(user_utterance="YOUR UTTERANCE HERE")

# 根据协作话语生成报告
costorm_runner.knowledge_base.reorganize()  # 重新组织知识库
article = costorm_runner.generate_report()  # 生成报告
print(article)  # 打印报告

4、管道定制

STORM

如果您已安装源代码,可以根据自己的使用场景对 STORM 进行定制。STORM 引擎由 4 个模块组成:
>> 知识整理模块:收集给定主题的广泛信息。
>> 大纲生成模块:通过生成分层大纲来组织收集到的信息。
>> 文章生成模块:用收集到的信息填充生成的大纲。
>> 文章润色模块:优化和改进所写的文章,使其呈现效果更佳。

每个模块的接口在 knowledge_storm/interface.py 中定义,而它们的实现则在 knowledge_storm/storm_wiki/modules/ 中实例化。这些模块可以根据您的具体需求进行定制(例如,以项目符号格式生成章节,而非完整段落)。

Co-STORM

如果您已安装源代码,可以根据自己的使用场景对 Co-STORM 进行自定义。

Co-STORM 引入了多种 LLM 代理类型(即 Co-STORM 专家和调解员)。LLM 代理接口在 knowledge_storm/interface.py 中定义,而其实现则在 knowledge_storm/collaborative_storm/modules/co_storm_agents.py 中实例化。不同的 LLM 代理策略可以进行自定义。

Co-STORM 引入了一种协作式对话协议,其核心功能集中在回合策略管理上。我们通过 knowledge_storm/collaborative_storm/engine.py 中的 DiscourseManager 提供了回合策略管理的一个示例实现。它可以进行自定义和进一步改进。

5、在线测试

Write a hot news article about the DeepSeek-R1 model based on the latest authoritative sources

案例应用

GitHub项目提供了示例脚本(位于examples文件夹),用于快速启动STORM和Co-STORM,并配置不同的参数。建议使用secrets.toml文件设置API密钥。

项目还提供了自定义流水线的方法,允许用户根据自身需求修改知识整理模块、提纲生成模块、文章生成模块和文章润色模块。 Co-STORM的自定义则更加灵活,允许自定义LLM代理策略和协作式话语协议。

1、STORM示例

运行以下命令可以使用GPT系列模型和默认配置运行STORM:

python examples/storm_examples/run_storm_wiki_gpt.py \
    --output-dir $OUTPUT_DIR \
    --retriever bing \
    --do-research \
    --do-generate-outline \
    --do-generate-article \
    --do-polish-article

更多自定义语言模型或自定义语料库的例子,请参考examples/storm_examples/README.md。

2、Co-STORM示例

运行以下命令可以使用GPT系列模型和默认配置运行Co-STORM (需要在secrets.toml中设置BING_SEARCH_API_KEY和ENCODER_API_TYPE):

python examples/costorm_examples/run_costorm_gpt.py \
    --output-dir $OUTPUT_DIR \
    --retriever bing

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2286867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

buu-rip-好久不见26

简单的栈溢出,找到后面函数和输入的个数即可

2025一区新风口:小波变换+KAN!速占!

今天给大家分享一个能让审稿人眼前一亮,好发一区的idea:小波变换KAN! 一方面:KAN刚中稿ICLR25,正是风口上,与小波变换的结合还处于起步阶段,正是红利期,创新空间广阔。 另一方面&a…

无公网IP 外网访问 本地部署夫人 hello-algo

hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…

系统思考—蝴蝶效应

“个体行为的微小差异,可能在系统中引发巨大且不可预测的结果。” — 诺贝尔经济学得主托马斯谢林 我们常说,小变动带来大影响,这种现象,在复杂系统理论中被称为“蝴蝶效应”:即使极小的变化,也能在动态系…

钉钉群机器人设置——python版本

钉钉群机器人设置——python版本 应用场景钉钉界面操作程序开发效果展示 应用场景 由于工作需要,很多项目执行程序后出现报错信息无法第一时间收到,因此实时预警对于监控程序还是有必要。(仅个人观点) 参考文档及博客&#xff1a…

【Rust自学】15.0. 智能指针(序):什么是智能指针及Rust智能指针的特性

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址,指向另一个数据。 Rust 中最常见的指针是引用&#xff0c…

Spring AI 在微服务中的应用:支持分布式 AI 推理

1. 引言 在现代企业中,微服务架构 已成为开发复杂系统的主流方式,而 AI 模型推理 也越来越多地被集成到业务流程中。如何在分布式微服务架构下高效地集成 Spring AI,使多个服务可以协同完成 AI 任务,并支持分布式 AI 推理&#x…

QT串口通信,实现单个温湿度传感器数据的采集

1、硬件设备 RS485中继器(一进二出),usb转485模块、电源等等 => 累计115元左右。 2、核心代码 #include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::

DeepSeek R1:中国AI黑马的崛起与挑战

文章目录 技术突破:从零开始的推理能力进化DeepSeek R1-Zero:纯RL训练的“自我觉醒”DeepSeek R1:冷启动与多阶段训练的平衡之道 实验验证:推理能力的全方位跃升基准测试:超越顶尖闭源模型蒸馏技术:小模型的…

MFC开发,给对话框添加垂直滚动条并解决鼠标滚动响应的问题

无论在使用QT或者MFC进行界面开发时,都会出现在一个对话框里面存在好多的选项,导致对话框变得非常长或者非常大,就会显现的不美观,在这种情况下通常是添加一个页面的滚动条来解决这个问题,下面我们就来介绍给MFC的对话…

php接口连接数据库

框架:https://www.thinkphp.cn/doc 创建网站 域名自己写 创建文件夹,“test”拉取框架,地址栏输入 composer create-project topthink/think5.1.* tp5 会自动创建一个tp5文件夹 根目录选择刚刚创建拉框架的文件夹 以test为示例 “D:\test\…

【卫星通信】链路预算方法

本文介绍卫星通信中的链路预算方法,应该也适用于地面通信场景。 更多内容请关注gzh【通信Online】 文章目录 下行链路预算卫星侧参数信道参数用户侧参数 上行链路预算链路预算计算示例 下行链路预算 卫星侧参数 令卫星侧天线数为 M t M_t Mt​,每根天线…

解析静态链接

文章目录 静态链接空间与地址分配相似段合并虚拟地址分配符号地址确定符号解析与重定位链接器优化重复代码消除函数链接级别静态库静态链接优缺点静态链接 一组目标文件经过链接器链接后形成的文件即可执行文件,如果没有动态库的加入,那么这个可执行文件被加载后无需再进行重…

【C语言】函数递归

目录 1. 什么是递归 1.1 递归的思想: 1.2 递归的限制条件 2. 递归的限制条件 2.1 举例1:求n的阶乘 2.1.1 分析和代码实现 2.1.2 画图推演 2.2 举例2:顺序打印⼀个整数的每⼀位 2.2.1 分析和代码实现 2.2.2 画图推演 3. 递归与迭代…

从0到1:C++ 开启游戏开发奇幻之旅(二)

目录 游戏开发核心组件设计 游戏循环 游戏对象管理 碰撞检测 人工智能(AI) 与物理引擎 人工智能 物理引擎 性能优化技巧 内存管理优化 多线程处理 实战案例:开发一个简单的 2D 射击游戏 项目结构设计 代码实现 总结与展望 游戏…

线性调整器——耗能型调整器

线性调整器又称线性电压调节器,以下是关于它的介绍: 基本工作原理 线性调整器的基本电路如图1.1(a)所示,晶体管Q1(工作于线性状态,或非开关状态)构成一个连接直流源V和输出端V。的可调电气电阻,直流源V由60Hz隔离变压器(电气隔离和整流&#…

C语言编译过程全面解析

今天是2025年1月26日,农历腊月二十七,一个距离新春佳节仅一步之遥的日子。城市的喧嚣中,年味已悄然弥漫——能在这个时候坚持上班的人,真可称为“牛人”了吧,哈哈。。。。 此刻,我在重新审视那些曾被遗忘的…

谈谈出国留学文书PS写作中的注意事项

在上期,小编介绍出国留学文书PS正文写作的几个可以采用的技巧。总之在正文的写作中,要避免将PS写成个人简历的repetition。也就是说不要将你目前所做的事情再次在PS中重述一遍,留学PS不是对你的工作经历或者学习经历的重复,而是需…

汇编基础语法及其示例

1.汇编指令 1.1汇编指令的基本格式 <opcode>{<cond>}{s} <Rd> , <Rn> , <shifter_operand> <功能码>{<条件码>}{cpsr影响位} <目标寄存器> , <第一操作寄存器> , <第二操作数> 注&#xff1a;第一操作寄存器…