@Lenciel

LLM 调研(4)- 开发实践

本系列是,LLM 调研…说一下它能做什么不能做什么,能做的部分怎么做比较好。

上一篇讲完历史,本来应该接着讲 LLM 到底取得了什么进展。但因为:

  • 在我心里 LLM 并没有取得「范式转换」级别的进展,更谈不上任何真正的「智能」1
  • 比较好的中文综述已经有几篇了(比如 Mike 船长的这篇,或者张俊林的一些专栏文章),英文材料就更不用说了,论文都摆在那里;
  • 我们主要是结合自己的数据和需求做应用,既不会训练自己的 Base Model 也不会搭建相关的基础设施;

所以迟迟没有动笔。几周下来,能感觉身边聊 ChatGPT 的人明显少了。但行业里仍然热闹,每天都有新模型,新产品,新消息。我自己各种小规模的折腾还保持着,还去参加了老白的 AGIA ,获得了更大规模炼丹的资源。

FITURE 内部对 AIGC 的探索也在稳步推进:周博他们用 ChatGPT + Stable-Diffusion 做了一些设计方面的工作;Edward 他们借鉴微软 semantic kernel sdk 里一些 Prompt Engineering 的思路,实现了基于对话选课的场景…

这篇就讲讲,在使用 LLM 搭建应用的过程中一些感受和遇到的问题,可能对大部分人来说,这比讲 LLM 的一些技术细节更有用。

目录

做什么

2011 年,Andreessen Horowitz 说「软件在吞噬整个世界」。2023 年,没有 AI 的软件都不好意思出来见人了2

但只要是软件,它就会有结构,有抽象,有分层。比如数据怎么获取、处理和存储,比如模块之间怎么通信,比如怎么保障安全。LLM 相关的软件系统也不例外,并且因为还在相对早期,前面说的每个部分都有待解决的问题,也都是机会。

不过,有些机会是普通公司特别是创业公司根本没法追逐的,比如提供芯片和算力,比如训练基底模型。有些机会则是适合创业公司去搞的,比如解决存储或者数据管道等基础设施(做矢量数据库的 Pinecone 就属于这类)。

更多的公司,应该跟我们一样,只是「利用」这项技术,来给自己的用户创造更多的价值。要达到这个目的,我觉得应该拆成下面几个部分:

  1. 寻找合适的 LLM 作为基底模型;
  2. 以较小的成本(包括时间成本)将自己业务相关的领域知识和数据作为输入,扩充 #1 选择的基础模型的能力;
  3. 从工程角度结构化地提高这个过程的安全性和可控性;

从而最终迭代出在垂直领域商业化的 LLM 应用。

那么具体怎么做呢?

怎么做

基底模型与扩展

选择什么样的基底模型,很大程度上决定了你能如何扩展它。

比如,如果直接用 OpenAI 的闭源模型——无论是 GPT-3.5 还是 GPT-4——你就只能使用它提供的 API 做 Fine-tuning 或者 Embedding 或者是直接 Prompt Engineering

相对应的,如果你是用 LLaMA, Falcon, StableLM 或者 ChatGLM-6B 这样的开源模型,那扩展它们的方式就大不一样了。

我自己的建议是,你得花些时间好好试用 OpenAI 的各种服务(ChatGPT 的各个版本)和接口,同时也花些时间手搓一些开源模型,具备手感后,结合下面说的可控性和安全性相关的考量,结合自己的用户需求,最终做出决策

可控性与安全性

可控性

我们在前面讲连接主义与神经网络时说过,它有可解释性不足的问题。

这造成一系列和传统意义上的软件开发不同的特点,特别在可控性方面。

首先是输入的可控性差。自然语言编写 prompt 可能对于终端用户的感受不错,但是在开发过程中,是很痛苦的:不要说基于它「写代码」,连提炼出可以培训员工的最佳实践都很困难。

然后是输出的可控性差。一方面,LLM 究竟以什么样的格式响应一个 prompt 是非常不固定的;一方面,LLM 究竟以什么内容响应一个 prompt 也是不固定的3

最后是调试的可控性差。在构建其他软件的时候,如果对于给定的输入,输出是预期外的,你可以通过断点调试甚至单步调试来搞明白究竟发生了什么,但使用 LLM 基本上只能靠猜。

因此,整个研发过程如何变得更可控,是一个系统工程,涉及如何对 prompt 做版本化管理,更高效的 evaluation ,更及时的 optimization 等等问题,并且至今应该没有特别好的解法。

安全性

LLM 相关的业务是数据密集的,因此它的安全性至少包含:

  • 数据如何安全地「获取」、「处理」和「存储」;
  • 如何防止包括 Prompt Injection 在内的各种攻击;

同时,也包括你自己团队的「安全」:比如基于 OpenAI 开发如何合规,基于开源模型它们的 license 是否有坑等等。有一些问题看起来是创业阶段不用考虑的,其实你的服务上线第一天就有可能面临包括注入在内的各种挑战。

架构与核心决策

当你从原理到工程化有了足够多的手感,仍然考虑围绕 LLM 开发一个自己的应用(放弃说不定才是正确的选择),核心的决策因素有哪些?我自己觉得包括下面这些。

C 端还是 B 端

LLM 生成的不是「答案」,而是「答案应该大概长成啥样」。所以不太能够用来作为交付物直接向 B 端提供服务。

同理,对 C 端提供服务,应该也不能直接用在真正「严肃」的场景:比如看病、心理咨询等等。顶天了,作为某个人类的辅助和参考,提供一点建议。

是否「全生成式模型」

「全生成式模型」指用户所有的请求都用 LLM 进行响应。与之对应的是,通过意图识别对用户的请求进行分类和分流,让生成式模型和判别式模型一起来响应请求。

全生成式模型,首先成本是比较高的。背后如果调用 OpenAI,还有时延、QPS 和合规等一系列问题。而我们提供的大部分服务都是有限场景下的,因此,结合传统的 NLP 解决方案,比如知识库,解决用户大部分真实请求,对不在上下文的请求判定并拒绝响应,仅仅对少量有用户价值且知识库解决不了的场景通过生成式模型来响应可能是最现实的做法。

当然这样做其实也考验系统架构的能力。

具体选择哪种扩展方案

排名靠前的模型,都做了强化学习。但是成本高,而且方法还不稳定。

大部分公司的数据量,可能搞个百亿参数的 base model,结合精标数据做 SFT,效果就差不多了,还更容易控制结果。

排除掉自己做模型,你仍然有很多条路可以选。

比如 FITURE 的应用场景是搜索和推荐。它很适合用 「Embeddings+矢量数据库」的方案来做。

总结

除开模型本身和相关基础设施,目前LLM 「周边产品」,主要是两个大类:某个领域的智能助手,或者某种风格的聊天机器人。

前者,如果没有某个领域长期的 NLP 的积累4,并且找到了客户愿意支付溢价的场景,就没有必要做。而有这些数据,往往需要行业地位,所以,基本上不是初创公司的机会。

后者,它更偏娱乐化而不是功能性,目前最好的示例应该是 character.ai。不过,这种项目的商业化成功与否,可能主要看金主们聊擦边球话题时,接得怎么样吧。

  1. 一个观察,好像愿意认真写综述的,都认为 LLM 具备「智能」,这可能也是他们洋洋洒洒几万字综述的核心动力吧。大家观点虽然不同,还是很感谢他们。 

  2. 也难怪 Sam Altman 提出了所谓的「新摩尔定律」:宇宙中的「智能」每 18 个月翻一番。 

  3. 虽然你可以通过调整参数,比如设置 temperature = 0 来对输出做一定的控制。 

  4. 这里的积累不仅仅是技术,更主要的是结构化的数据和模型。 

你问我答(3) - 聊聊中年人的「工作」

不知道小报童怎么打开用户评论的通知,所以大家给我发的评论大部分我都是偶然看到的。比如 33 在前面那篇关于工作的文章下面问的:

那么另外一个问题来了,这是对于刚毕业的朋友,对于我们大龄年过四十怎么办?不知道有没有额外的建议?

今天就来回复一下,毕竟这个问题不太有时效性,想必今天答也不太晚。同时,为了回馈提问者,我会把回答分成两部分,一个是更加通用性的,一个是针对 33 同学的。

那么首先,通常意义上,人到中年,你的工作或者说职业生涯是否成功,主要取决于你如何定义成功。

我经常会用「棉花糖实验」作为起点来聊职业生涯。对于刚刚毕业不久的学生,他们的问题是能不能通过这个测验:和实验里的孩子们一样,他们如果表现出延迟满足的能力(这很大程度上不仅仅取决于个人的能力和意志力,还包括了家庭背景、社会经济环境和其他因素),往往就会过得更加幸福并且取得更大成就。

但是,对于中年人来说,问题不是他们能否通过测试,而是,你的「棉花糖」到底是什么?你知道你为了什么在牺牲和受苦吗?你是否有一个职业目标值得继续努力拼搏,延迟满足?

如果你不知道自己的「棉花糖」是什么,我有一些建议。

1)你的工作不能只是手段

现在我们经常看到工作者和「资本家」的对立情绪。当然,可能其实没有那么大的对立,互联网总是把情绪放大。

但我一直觉得,人在「工作」这件事情上能犯的最大错误,就是只把工作当手段:无论目的是金钱、权力还是声望,都会让工作作为手段充满了痛苦

发明「中年危机」这个词的心理学家 Elliott Jaques 这么感叹:「到今天之前,生活似乎是一个永无休止的上升斜坡,眼前除了遥远的坡顶之外什么也没有。而突然一天,我仿佛来到了山顶,前方是下坡,路的尽头就在眼前」。这就是他所谓的「中年危机」:在生活中努力工作了多年,以获得一些回报,然后意识到前面根本没有太多回报,只有衰老和死亡。

而且,把工作作为手段,还不仅是目的没有达成时让你失望。我身边有不少这样的同学,获得了想要的回报,也不那么开心。

所以,首先不要犯这样的错误。你的工作当然不会每天给你带来快乐和成就感,有些日子其实还挺糟糕,但把工作——主要是努力成就里面的人和事——也当做目的,会给你带来丰厚的回报。

2)也不要给「内心」加太多戏

不把工作当成手段,是不是就应该遵循自己的内心所爱?就像梅丽莎在毕业演讲里说的:「Find work you love and you’ll never work a day in your life.」

我一直比较反对这种思路,因为工作这件事情上,flow matters more than passion。passion 带来很多偏见,不计成本的渴求和坚持,甚至会暴露我们内心最可怕的一面。

我自己的处理方式比较偏感性:如果工作的激情让我成为一个更快乐、更好的人,我觉得尺度就比较好。如果在追求工作目标的过程中,我忽略了生活里其他重要的人和事物,我就会主动调整。

后来我发现,2017 一群研究者专门研究了这个话题:究竟人工作应该是寻求 values,还是 feelings。我觉得这只是人们对到底应该追求 hedonia 还是 eudaimonia 的长久争论的一个变种。其实我们肯定两部分都需要:没有意义的痴迷,在得到后会变成空虚;缺乏乐趣的意义,在过程中会变成煎熬。

3)有趣是最重要的

前面说的两点,好的工作不应该只是手段,但又不要像谈恋爱一样充满痴迷与激情,可能看完之后会有「你说的很对但没有卵用」的感觉。

好的工作或者说好的工作状态究竟是什么样的?我觉得,感觉有趣就行。

我们是在崇尚创业创富神话的社会环境中长大的,那些成功者的回报就是社会公认的「终极棉花糖」。

但创业的成功率很低,很明显,我们看看身边,就知道还有很多没有大富大贵,但同样快乐充实有成就感的人。他们的「棉花糖」是什么样的呢?

南加州大学曾经对职业生涯做过模式识别:他们提出了四种模式:

  • linear careers
  • steady-state careers
  • transitory careers
  • spiral careers

我不确定,你是不是按照这些研究,找到适合自己品味的模式,然后遵循它,最终就可以吃到自己的棉花糖,你可以试试。但我同意很多神经科学家的观点:在所有的情绪中,兴趣是一种最积极的情绪。真正让你感兴趣的事情,通常融合了愉快和意义感。因此,这可能是一个有用的试金石,来检验当前的工作是否会给你带来「棉花糖」。

4)找一个 mentor

如果让我给任何阶段的任何人一条最重要的职业建议,那就是:在你的工作中找到一个在某些方面让你认可的人,并让自己和他们建立深刻的联结。比如,定期吃个饭或喝咖啡,并从他们的大脑中获取大量的技能和知识。这样做,你的事业,甚至你的生活,最终都会变得更好。

以上。