【AI 斯坦福 STORM】基于互联网搜索,帮你从零开始撰写文章

news2024/12/26 0:05:24

今天介绍斯坦福出品的系统,STORM。

STORM是一个基于互联网搜索的LLM系统,可以从零开始撰写类似维基百科的文章。

技术栈:

  • dspy 一个用于算法优化LM提示和权重的框架
  • You.com搜索API YOU APIs利用实时网络数据使LLMs和搜索体验更加真实和及时。

我们试用下。打开网站
在这里插入图片描述
登录
在这里插入图片描述
好像还不错,已经有几篇文章了。点击苹果取消电动车项目
在这里插入图片描述
文章不长,看着还可以。我们考虑自己创建一篇试试
在这里插入图片描述
显示现在服务已关闭。。。

看官方的文档,我们还是能学到点不少东西:

  • 分解步骤
  • 模拟角色对话
  • 调用一些现有的api,例如api.you.com

和之前文章介绍的吴恩达的四种设计模式,其实也非常匹配

  • Reflection
  • Tool use
  • Planning
  • Multi-agent collaboration

如有兴趣,请继续往下看官方readme


STORM: 通过检索和多角度提问合成主题概要

该存储库包含我们的NAACL 2024论文《使用大型语言模型协助从零开始撰写类似维基百科的文章》的代码,作者是Yijia Shao、Yucheng Jiang、Theodore A. Kanell、Peter Xu、Omar Khattab和Monica S. Lam。

概述 (立即尝试STORM!)

在这里插入图片描述
STORM是一个基于互联网搜索的LLM系统,可以从零开始撰写类似维基百科的文章。

虽然该系统无法生成出版就绪的文章,因为通常需要大量编辑,但经验丰富的维基百科编辑发现在他们的写作前阶段使用它非常有帮助。

请尝试我们的在线演示,看看STORM如何帮助您的知识探索之旅,并提供反馈帮助我们改进系统 🙏!

写作前的研究

STORM将生成带有引用的长篇文章分解为两个步骤:

  1. 写作前阶段:系统进行基于互联网的研究,收集参考资料并生成大纲。
  2. 写作阶段:系统利用大纲和参考资料生成带有引用的完整文章。
    在这里插入图片描述
    STORM确定自动化研究过程的核心是自动生成良好的问题。直接提示语言模型提问并不奏效。为了提高问题的深度和广度,STORM采用了两种策略:
  3. 透视指导下的提问:给定输入主题,STORM通过调查类似主题的现有文章发现不同的视角,并用它们来控制提问过程。
  4. 模拟对话:STORM模拟了一场基于互联网来源的维基百科作者与主题专家之间的对话,以使语言模型能够更新其对主题的理解并提出跟进问题。

基于两个阶段的分离,STORM以高度模块化的方式实现(参见src/engine.py),使用了dspy。

设置

我们将STORM视为自动化知识整理的一个示例。我们正在努力增强我们的代码库以增加其可扩展性。敬请关注!

下面,我们提供一个快速开始指南,以在本地运行STORM以重现我们的实验。

  1. 安装所需的包。
    conda create -n storm python=3.11
    conda activate storm
    pip install -r requirements.txt
    
  2. 设置OpenAI API密钥和You.com搜索API密钥。在根目录下创建一个名为secrets.toml的文件,并添加以下内容:
    # 设置OpenAI API密钥。
    OPENAI_API_KEY=<your_openai_api_key>
    # 如果您使用OpenAI提供的API服务,请包括以下行:
    OPENAI_API_TYPE="openai"
    # 如果您使用Microsoft Azure提供的API服务,请包括以下行:
    OPENAI_API_TYPE="azure"
    AZURE_API_BASE=<your_azure_api_base_url>
    AZURE_API_VERSION=<your_azure_api_version>
    # 设置You.com搜索API密钥。
    YDC_API_KEY=<your_youcom_api_key>
    

论文实验

我们实验中使用的FreshWiki数据集可以在FreshWiki中找到。

在src目录下运行以下命令。

写作前阶段

针对FreshWiki数据集的批量实验:

python -m scripts.run_prewriting --input-source file --input-path ../FreshWiki/topic_list.csv  --engine gpt-4 --do-research --max-conv-turn 5 --max-perspective 5
  • --engine (choices=[gpt-4, gpt-35-turbo]):用于生成大纲的LLM引擎
  • --do-research:如果为True,则模拟对话以研究主题;否则,加载结果。
  • --max-conv-turn:每个信息寻求对话的最大问题数量
  • --max-perspective:要考虑的最大透视数量,每个透视对应一个信息寻求对话。
    • STORM还使用一般对话收集有关主题的基本信息。因此,QA对的最大数量为max_turn * (max_perspective + 1)。 💡 减少max_turnmax_perspective可以加快过程速度并降低成本,但可能导致大纲不够全面。
    • 如果设置了--disable-perspective(禁用透视驱动的问题提问),则该参数将不会起作用。

要在单个主题上运行实验:

python -m scripts.run_prewriting --input-source console --engine gpt-4 --max-conv-turn 5 --max-perspective 5 --do-research
  • 该脚本会要求您输入Topic和要排除的Ground truth url。如果您没有要排除的URL,请将该字段留空。

生成的大纲将保存在{output_dir}/{topic}/storm_gen_outline.txt中,收集的参考资料将保存在{output_dir}/{topic}/raw_search_results.json中。

写作阶段

针对FreshWiki数据集的批量实验:

python -m scripts.run_writing --input-source file --input-path ../FreshWiki/topic_list.csv --engine gpt-4 --do-polish-article --remove-duplicate
  • --do-polish-article:如果为True,则通过添加摘要部分并在--remove-duplicate设置为True时删除重复内容来润色文章。

要在单个主题上运行实验:

python -m scripts.run_writing --input-source console --engine gpt-4 --do-polish-article --remove-duplicate
  • 该脚本会要求您输入Topic。请输入与写作前阶段使用的主题相同的主题。

生成的文章将保存在{output_dir}/{topic}/storm_gen_article.txt中,与引用索引对应的参考资料将保存在{output_dir}/{topic}/url_to_info.json中。如果设置了--do-polish-article,则润色后的文章将保存在{output_dir}/{topic}/storm_gen_article_polished.txt中。

自定义STORM配置

我们在src/modules/utils.py的LLMConfigs中设置了默认的LLM配置。您可以使用set_conv_simulator_lm()set_question_asker_lm()set_outline_gen_lm()set_article_gen_lm()set_article_polish_lm()来覆盖默认配置。这些函数接受来自dspy.dsp.LMdspy.dsp.HFModel的实例。

💡 良好的实践建议,

  • conv_simulator_lm选择一个更便宜/更快的模型,用于在对话中拆分查询、合成答案。
  • 如果您需要进行实际的写作步骤,请为article_gen_lm选择一个更强大的模型。根据我们的实验,性能较差的模型在生成带有引用的文本方面表现不佳。

自动评估

在我们的论文中,我们将评估分为两个部分:大纲质量和完整文章质量。

大纲质量

我们引入了标题软回溯标题实体回溯来评估大纲质量。这使得原型化写作前方法变得更加容易。

在./eval目录下运行以下命令,对FreshWiki数据集计算指标:

python eval_outline_quality.py --input-path ../FreshWiki/topic_list.csv --gt-dir ../FreshWiki --pred-dir ../results --pred-file-name storm_gen_outline.txt --result-output-path ../results/storm_outline_quality.csv

完整文章质量

eval/eval_article_quality.py 提供了评估完整文章质量的入口点,使用ROUGE、实体回溯和评分标准来评估。在eval目录下运行以下命令计算指标:

python eval_article_quality.py --input-path ../FreshWiki/topic_list.csv --gt-dir ../FreshWiki --pred-dir ../results --gt-dir ../FreshWiki --output-dir ../results/storm_article_eval_results --pred-file-name storm_gen_article_polished.txt

自行使用指标

基于相似度的指标(例如ROUGE、实体回溯和标题实体回溯)的实现在eval/metrics.py中。

对于评分标准,我们使用了这篇论文中介绍的prometheus-13b-v1.0。eval/evaluation_prometheus.py 提供了使用该指标的入口点。

贡献

如果您有任何问题或建议,请随时提出问题或提交请求。我们欢迎贡献以改进系统和代码库!

联系人:Yijia Shao 和 Yucheng Jiang

引用

如果您在工作中使用了这段代码或其中的一部分,请引用我们的论文:

@inproceedings{shao2024assisting,
      title={{Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models}}, 
      author={Yijia Shao and Yucheng Jiang and Theodore A. Kanell and Peter Xu and Omar Khattab and Monica S. Lam},
      year={2024},
      booktitle={Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers)}
}

  • 官网
  • 本文
    • 博客 - 从零开始学AI
    • 微信 - 从零开始学AI
    • CSDN - 从零开始学AI

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

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

相关文章

力扣 | 148. 排序链表

和数组里面的归并排序思想一致 class Solution {public ListNode sortList(ListNode head) {//过滤条件if(head null || head.next null)return head;ListNode slow head;ListNode fast head.next;while (fast ! null && fast.next ! null){slow slow.next;fast …

【Maven工具】

maven Maven是一个主要用于Java项目的构建自动化工具。它有助于管理构建过程&#xff0c;包括编译源代码、运行测试、将编译后的代码打包成JAR文件以及管理依赖项。Maven使用项目对象模型&#xff08;POM&#xff09;文件来描述项目配置和依赖关系。 Maven通过提供标准的项目…

酷开系统让用户在方方面面享受科技进步带来的美好体验

电视本身的特性&#xff0c;再有人工智能和全时AI的加持&#xff0c;让搭载了酷开系统的电视有能力成为一个“家庭智慧管控中心”。互联网的存在让大家能更懒地完成事情&#xff0c;满足宅家的愿望&#xff0c;有话说&#xff0c;科技因懒人而进步。打个简单的比方&#xff0c;…

手机照片删除了怎么恢复?恢复iPhone照片,试试这4招

当手机上的珍贵照片意外被删除时&#xff0c;让人心急如焚。幸运的是&#xff0c;对于使用iPhone的用户来说&#xff0c;恢复被删除的照片并不是一件难事。即使你不小心删除了照片&#xff0c;仍然有一些方法可以尝试将它们找回。手机照片删除了怎么恢复&#xff1f;在本文中&a…

计算机网络—传输层UDP协议:原理、应用

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;2月のセプテンバー 1:21━━━━━━️&#x1f49f;──────── 5:21 &#x1f504; ◀️ ⏸ ▶️ ☰ &am…

交叉熵损失函数介绍

交叉熵是信息论中的一个重要概念&#xff0c;它的大小表示两个概率分布之间的差异&#xff0c;可以通过最小化交叉熵来得到目标概率分布的近似分布。 为了理解交叉熵&#xff0c;首先要了解下面这几个概念。 自信息 信息论的基本想法是&#xff0c;一个不太可能的事件发生了…

【leetcode面试经典150题】51. 用最少数量的箭引爆气球(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

【学习笔记十六】EWM常见下架策略介绍

一、FIFO(First in ,First out)先进先出下架策略 1.后台配置 ①定义出库规则 字段: WDATU:收货日期和时间 或者WDATU_DATE收货日期无时间 QUAN:可用数量 排序: 不勾选升序,勾选降序 ②指定仓库类型搜索顺序 ③确定出库的存储类型搜索顺序 ②和③的配置详情见…

Android MVVM架构学习——ViewModel DataBinding

关于MVVM架构&#xff0c;我并不想花篇幅去做重复性的描述&#xff0c;网上一搜都是一堆讲解&#xff0c;大家可以自行了解&#xff0c;我所做的只是以最简单的例子&#xff0c;最有效的步骤&#xff0c;从零开始&#xff0c;去实现一个相对有点学习参考价值的项目。 先来看本…

无人机GB42590接收端 +接收端,同时支持2.4G与5.8G双频WIFI模组

严格按照GB42590的协议开发的发射端&#xff0c;通过串口和模块通讯&#xff0c;默认波特率 921600。 http://www.doit.am/首页-深圳四博智联科技有限公司-淘宝网https://shop144145132.taobao.com/?spma230r.7195193.1997079397.2.71f6771dJHT2r0 二、接口文档 单片机和模…

【web3技术】什么是 WEB3?

Web3 简介 中心化网络已经帮助数十亿人融入了互联网,并在其上创建了稳定、可靠的基础设施。 与此同时,少数中心化巨头几乎垄断了互联网,甚至可以为所欲为。 Web3 是摆脱这一困境的方案。 不同于科技巨头垄断的传统互联网,Web3 采用去中心化,由所有用户构建、运营和拥有。…

探索数据结构:顺序串与链式串的深入理解

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 串的定义 串是一种特殊的顺序表&#xff0c;即每一个元素都是单独一…

Matlab 2024安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到MatlabR2024a“。 2.打开解压后的文件夹&#xff0c;鼠标右击“MATHWORKS_R2024A“选择装载。 鼠标右击“setup“选择”以管理员身份运行“。点击“是“&#xff0c;然后点击”下一步“。复制一下密钥粘贴至输入栏&#xff0c;然后…

移动开发避坑指南——内存泄漏

在日常编写代码时难免会遇到各种各样的问题和坑&#xff0c;这些问题可能会影响我们的开发效率和代码质量&#xff0c;因此我们需要不断总结和学习&#xff0c;以避免这些问题的出现。接下来我们将围绕移动开发中常见问题做出总结&#xff0c;以提高大家的开发质量。本系列文章…

爬虫的目的是做什么

通过网站域名获取HTML数据解析数据&#xff0c;获取想要的信息存储爬取的信息如果有必要&#xff0c;移动到另一个网页重复过程 这本书上的代码的网址是 &#xff1a; GitHub - REMitchell/python-scraping: Code samples from the book Web Scraping with Python http://shop.…

低代码集成Java系列:高效构建自定义插件

前言 随着软件开发的快速发展和需求的不断增长&#xff0c;开发人员面临着更多的压力和挑战。传统的开发方法需要花费大量的时间和精力&#xff0c;而低代码开发平台的出现为开发人员提供了一种更加高效、快速的开发方式。今天小编就以构建命令插件为例&#xff0c;展示如何使…

不要顺从胃的指示进食

没有人喜欢一直胖着&#xff0c;但想瘦&#xff0c;运动力、运动量、毅力、耐力、坚持、饮食管控方面等都不可缺&#xff0c;道理懂得都懂&#xff0c;但大多数超重胖子却都是有心而无力的。原因&#xff0c;除了生理体积影响了行动外&#xff0c;更重要的一点是&#xff1a;由…

汽车抗疲劳驾驶测试铸铁试验底座技术要求有哪些

铸铁平台试验台底座的主要技术参数要求 1、 试验台底座设计制造符合JB/T794-1999《铸铁平板》标准。 2、 试验铁底板及所有附件的计量单位全部采用 单位&#xff08;SI&#xff09;标准。 3、铸铁平台平板材质&#xff1a;用细密的灰口铸铁HT250或HT200&#xff0c;强度符…

Mysql的事务隔离级别以及事务的四大特性。

MySQL 的事务隔离级别是数据库管理系统中的一个重要概念&#xff0c;它决定了事务如何隔离和影响其他并发事务。MySQL 支持四种事务隔离级别&#xff0c;分别是&#xff1a;读未提交&#xff08;READ UNCOMMITTED&#xff09;、读已提交&#xff08;READ COMMITTED&#xff09;…

Collection与数据结构 二叉树(二):二叉树精选OJ例题(上)

1. 判断是否为相同的二叉树 OJ链接 public boolean isSameTree(Node p, Node q) {if (p null && q ! null || p ! null && q null){//结构不同return false;}if (p null && q null){//结构相同,都是空树return true;}if (p.value ! q.value){//…