在过去几个月的大部分时间里,我一直在使用大型语言模型 (LLM) 来处理三个主要用例:数据分析、编写代码和网络搜索1 。
这是我观察到的:
首先,增量编码比一次描述一个完整的任务更有效。其次,编码法学硕士努力解决自己创造的问题,转圈和调试可能需要大量工作。第三,如果 LLM 的索引包含用于摘要搜索但不用于详尽搜索的更新或常绿数据,则 LLM 可以取代搜索引擎。
让我分享一些例子:
这个周末,我想清理旧博客文章中的一些 HTML 图像链接,并将它们现代化为降价格式。这需要将图像上传到 Cloudinary 的图像托管服务并使用新链接。我将此描述输入到 ChatGPT 中。在此处查看成绩单:
创建一个 ruby 脚本来遍历文件夹中的每个降价文件并找到 html 图像标签并将它们重写为降价图像标签。但用来自 cloudinary 的 url 替换 url。要获取 cloudinary url,请创建一个函数来访问 cloudinary api 以将图像发送到那里,然后解析响应以检索降价更新的 url。
脚本无法更新文件。随后的迭代不能解决问题。引擎变得对错误“视而不见”,并在每次重新生成时用类似的基本错误重新制定解决方案。
但是,如果我引导计算机完成程序中的每个步骤,就像我在最近的 Nvidia 分析中所做的那样,引擎会成功地准确地格式化数据并编写一个函数来复制其他指标的分析。 2个
对于网络搜索,我创建了一个小脚本来打开 chatGPT 进行搜索,而不是在每次输入查询时打开 Google。输入查询的感觉非常像第一次在高中图书馆的计算机上使用 Google:我正在遍历不同的查询语法以产生最佳结果。
摘要技术通常会产生公式化的内容。在最近的一个下雨天,我问到在旧金山、帕洛阿尔托和圣何塞可以做什么。每个回复都包含当地博物馆、购物和水疗推荐。搜索结果 MadLibs!
挑战在于这些“搜索结果页面”没有显示搜索的范围:TripAdvisor 前 20 条推荐中有多少被参考?攀岩之类的罕见室内活动可能会引起人们的兴趣吗?解决该问题需要用户体验——甚至是新产品机会。
新近度很重要:ChatGPT 在 2021 年之前接受网络数据训练,结果证明这是一个重要问题,因为我经常搜索较新的页面。在许多 LLM 的脑海中还不存在整整一代的 web3 公司。所以,我改为查询 Google Bard。
这些早期的粗糙边缘是可以预料的。早期的搜索引擎,包括谷歌,也需要专门的输入/提示,并且在不同类别中的结果质量较低。有这么多才华横溢的人在这个领域工作,新的解决方案肯定会解决这些早期的挑战。
1我在一篇名为Rabbits on Firetrucks 的文章中写过关于使用 LLM 生成图像的文章。 &我对那里的印象保持不变:它非常适合消费者用例,但很难驱动 B2B 应用程序所需的精度。
2为了分析 NVDA 数据集,我使用注释 – 以#开头 – 告诉计算机如何在绘制之前清理数据框。一旦实现,我告诉计算机创建一个函数来执行相同的操作,称为 make_long() 1 。
# read in the tsv file nvda nvda = read_tsv("nvda.tsv") # pull out the third row & call it revenue revenue = nvda[2,]; head(revenue) # set colnames equal to sequence of 2004 to 2023 by 1 colnames(revenue) = c("field", seq(2004, 2023, 1)) # make revenue long revenue_long = gather(revenue, year, value) # set colnames to year and revenue colnames(revenue_long) = c("year", "revenue") ... # plot revenue by year on a line chart with the caption tomtunguz.com and the the line color red with a size of 2 ggplot(revenue_long, aes(x = year, y = revenue/1e3, group = 1)) + geom_line(color = "red", size = 2) + labs(title = "Nvidia Revenue Grew 2.5x in 2 Years", subtitle = "Revenue Has Been Flat in the Last Year but AI Growing Fast", x = "", y = "Revenue, $b", caption = "tomtunguz.com") + scale_y_continuous(limits = c(0,30), breaks = seq(0, 30, by=5)) # create a function to take a row from the nvda data set, make it long, convert both columns to numeric # and delete where there is na make_long = function(row) { colnames(row) = c("field", seq(2004, 2023, 1)) row = gather(row, year, value) colnames(row) = c("year", "value") row$value = as.numeric(row$value) row$year = as.numeric(row$year) row = row[!is.na(row$value),] row = row[!is.na(row$year),] return(row) }