当前位置: 首页 > article >正文

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

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.kler.cn/a/527776.html

相关文章:

  • JSP 标准标签库(JSTL)
  • 剑指offer 数组 持续更新中...
  • SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇
  • C++,STL 六大组件:容器、迭代器、算法、函数对象、适配器、分配器
  • 996引擎 - NPC-添加NPC引擎自带形象
  • 留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB
  • 芯片AI深度实战:给vim装上AI
  • Vue 3 30天精进之旅:Day 10 - Vue Router
  • 计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习
  • LeetCode--84. 柱状图中最大的矩形【单调栈】
  • OpenCV:闭运算
  • C++11(中)
  • 5 长度和距离计算模块(length.rs)
  • 《苍穹外卖》项目学习记录-Day7导入地址簿模块功能代码
  • SSM开发(十) SSM框架协同工作原理
  • 菜鸟之路Day13一一方法引用
  • Flutter Candies 一桶天下
  • Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
  • python中字典用法
  • eBay管理工具:提升运营效率的利器
  • UE学习日志#16 C++笔记#2 基础复习2
  • 【股票数据API接口44】如何获取股票指历史分时MA数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • sublime_text的快捷键
  • C++11新特性之tuple元组
  • Day49:添加字典元素
  • CSS 背景与边框:从基础到高级应用