STORM与Co - STORM:基于大语言模型的知识策展系统

STORM与Co - STORM:基于大语言模型的知识策展系统

技术背景

在信息爆炸的时代,高效地收集、整理和生成知识变得至关重要。STORM是一个基于大语言模型(LLM)的知识策展系统,它能通过互联网搜索从零开始撰写类似维基百科的文章。而Co - STORM在此基础上,引入了人机协作机制,支持人类与AI共同进行知识策展,进一步提升了信息获取和整理的效率与质量。

实现步骤

安装

使用pip安装knowledge - storm库:

1
pip install knowledge-storm

也可以克隆代码仓库并安装依赖:

1
2
3
4
5
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

配置API密钥

在项目根目录创建secrets.toml文件,添加API密钥信息,例如:

1
2
3
4
5
6
7
# ============ language model configurations ============ 
OPENAI_API_KEY="your_openai_api_key"
OPENAI_API_TYPE="openai"
# ============ retriever configurations ============
BING_SEARCH_API_KEY="your_bing_search_api_key"
# ============ encoder configurations ============
ENCODER_API_TYPE="openai"

运行示例

STORM

使用GPT系列模型以默认配置运行STORM:

1
2
3
4
5
6
7
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

Co - STORM

BING_SEARCH_API_KEYENCODER_API_TYPE添加到secrets.toml文件,然后运行:

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

核心代码

STORM示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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('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()

Co - STORM示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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 = CollaborativeStormLMConfigs()
openai_kwargs = {
"api_key": os.getenv("OPENAI_API_KEY"),
"api_provider": "openai",
"temperature": 1.0,
"top_p": 0.9,
"api_base": None,
}
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)

topic = input('Topic: ')
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="YOUR UTTERANCE HERE")
costorm_runner.knowledge_base.reorganize()
article = costorm_runner.generate_report()
print(article)

最佳实践

  • 在选择语言模型时,对于用于拆分查询和合成答案的conv_simulator_lm,选择更便宜、更快的模型;对于生成带引用的可验证文本的article_gen_lm,选择更强大的模型。
  • 利用secrets.toml文件管理API密钥,确保代码的安全性和可维护性。

常见问题

  • 安装问题:如果在安装knowledge - storm库或依赖时遇到问题,检查网络连接和Python环境是否正确配置。
  • API密钥问题:确保secrets.toml文件中的API密钥信息正确,并且具有相应的访问权限。
  • 运行问题:如果运行示例脚本时出现错误,检查命令行参数是否正确,以及相关的API是否正常工作。

STORM与Co - STORM:基于大语言模型的知识策展系统
https://119291.xyz/posts/storm-and-co-storm-knowledge-curation-system/
作者
ww
发布于
2025年7月25日
许可协议