« 主页

探云月刊 2024年11月 使用 AI 工具提升团队生产力

发布于

版权声明:眯眼探云原创,可随意转载,请保留该版权声明及链接:https://tyun.fun/post/102.tanyun-monthly-2024-11/

最近带着团队踏入了一个新领域,在短时间的上手并拿到了成果,并在公司内部做了一次分享:使用 AI 工具提升生产力。

踏入新领域的过程并不容易,需要在极短的时间内吸收大量的新概念,同时还要熟悉一些历史遗留的工程,要去解决以前从未解决过的问题。这不止是能力的挑战,也是心态的挑战,因为需要在完全不知道怎么做的情况下,就接手任务。

在 AI 的帮助下,我们一路磕磕绊绊,但最终顺利的交付了结果。AI 工具不止可以提高效率,还可以帮助我们完成以前做不到的事情,拓宽我们的能力边界。

下面就是我在公司内部分享的主要内容。

PS:本文中提到的 AI 工具,特指大语言模型本身基于大语言模型的相关工具

什么情况下应该掌握一个新工具?

我们都有倾向使用自己熟悉的工具处理问题,毕竟学习掌握新工具是有成本的。我不擅长做 PPT,要么做的很简单,要么做的很丑,很多时候是兼而有之。但我依然不打算花时间深入的学习和使用 PPT 工具,因为我一年最多分享一、两次,并且也不是特别关键的场景。

但 AI 工具不一样,可预见,在未来几十年,我都需要频繁的、深度的使用这个工具来帮助我完成各种各样的任务。因此,我选择充分的拥抱它,很早就开始关注相关的信息、并想尽办法把它用起来。

对于团队来说,同样如此。每位团队成员在未来几十年,都需要频繁、深度的使用 AI 工具来辅助完成各种任务。

因此,在带领团队切入到新领域的时候,我就提出了明确的要求,必须把 AI 好好用起来。我们能够成功跨领域完成任务,这是最关键的一项决策。

怎么看待 AI 这个新工具?

我会经常向身边的人推荐 AI 工具。在这个过程中,我有观察到,实习生可以通过使用 AI 工具,快速上手软件开发相关的工作;20年以上经验的程序员,也能通过使用 AI 工具实现效率的极大提升。再结合我个人的经验,我完全有理由相信,AI 工具带来的提升,对每个人都是普遍有效的。

在我看来 AI 提升生产力,可以简单的概括为两个方面:

  1. 效率的提升 - 比如通过代码补全,或者是让 AI 完成/修改小段代码。这也是大多数人能够想象的场景。
  2. 能力的拓展 - 以前不会的东西,能够很快学习掌握。比如我们团队对 Python 语言并不熟悉,在 AI 的辅助下就可以直接上手完成项目。

这两方面的提升,会带来巨大的改变。因此,我愿意把 AI 工具形容为这个时代的红利。能够尽早用上、用好 AI 工具,就是在享受这个时代的红利。

在向他人推荐 AI 工具的过程中,有的人会接受,有的人会抵触,但真正实际用起来的人,并不多。这也是为什么我会通过提出明确要求的方式,在团队中推进 AI 工具的使用。

为什么这么厉害的一个工具,很多人却不会主动、充分用起来呢?显然不能简单的归因为无知,或者不思进取,而是有着一些不那么明显的因素,阻碍了很多人把 AI 用起来。

接下来,我就希望从 Context选用大模型两个方面,来讲一讲如何更好的把 AI 工具用起来。这两个方面,在我看来,可能是阻碍很多人把 AI 工具用起来的最重要的两个因素。

先来说说 Context,上下文。

什么是 Context

如果你是一名安卓开发,你一定很熟悉 Context,在安卓开发中被称为上帝对象(God Obejct),哪里都会用到它。我们接下来要讲的 Context 与之相关,但不完全相同。

假设有人让你请吃饭:

  1. 路边的乞丐让你请他吃顿饭,他可能是饿了

  2. 你的好朋友让你请吃饭,可能是你打麻将赢了

  3. 单身的帅哥/美女让你请吃饭,那……可能是要发生不可描述的事情了

  4. ……

同样是让你请吃饭,但不一样的情况,含义就完全不同。对于吃饭而言,不同的情况就是不同的 Context。

在互联网公司中,需求评审是一个……令人难忘的环节。在一个活跃的需求评审会上,大家会发表各种意见,针对一些小问题争论不休,不止想要把需求讨论清楚,更想证明自己是正确的,对方是错的。如果你留意这些争论并仔细思考其中的细节,你就会发现,其实大家可能都没错,只是每个人心中预设的场景是不同的。如果将场景对齐,大家其实是比较容易达成一致的。我们在项目中就通过快速原型的方式,模拟场景,在一起体验完模拟场景后,分歧明显少了很多,因为大家有了共同的 Context。

再说一个,稍有些工作经验的人都知道,接手历史项目是一件令人头疼的事。因为历史项目中,总是存在着一些稀奇古怪,令人难以理解的“脑残”问题。要知道,在绝大多数情况下,人与人的智商差距并没有想象中那么大。这些“脑残”问题,通常为了解决在当时的场景下,某个具体的问题。比如我们在一段历史代码中看到一个函数在某个位置返回了 OK,但就在返回 OK 的这行代码上方,有一行注释:TODO 这里不应该返回 OK。代码作者似乎是喜欢解决某个问题,但采用了一个临时方案,因此写下了这个注释,但只是更加令人迷惑,完整的 Context 丢失了。

希望上面三个例子,能够帮助你理解什么是 Context,因为对于用好大语言模型而言,它非常重要。近年来,大语言模型本身在飞速发展,基于大语言模型的应用也在持续进步,而基于大语言模型的最关键的三项技术,都和 Context 紧密相关。

如果你有关注大语言模型,那你对这几项技术应该是耳熟能详,但如果你对大语言模型了解不多,也不用担心,因为重点是 Context。这几项技术分别是:RAG,Prompt,CoT。

RAG 搜索增强生成

RAG 这个名字有点绕口,但如果换个说法你可能比较容易理解:开卷考试

你向 AI 提问,AI 知道很多东西——但它并非无所不知,比如你们公司的内部文档。那怎么办?让它可以查看这些文档就好了。但如果你们公司的文档太多,可能没法一次性给它看完(context window 有限),那就只把你问题相关的内容给它看就行。

从公司的文档中找到和你的问题相关的部分,这个操作就是搜索。

如果对 RAG 略有研究,就会听说过 embedding 这个词,这个词极少出现在我们的日常生活中,在这里它作为术语,迷惑了我挺长时间。我也发现很多人因为这个词产生疑惑。如果你的时间充裕,我建议是可以花些时间来研究和理解 embedding,对理解大语言模型会有些帮助。

但不理解 embedding 也完全没关系,在 RAG 的场景下,把它理解为一种搜索技术即可,和关键字搜索没有本质上的区别。但从效果上而言,embedding 的搜索,会更关注文字的含义,而非文字本身。因为效果的不同,因此 embedding 的搜索并不能完全替代关键字搜索,现在更流行的做法是以这两种方式混合搜索来获得更准确的内容。

好的,答案已经搜索到了,和问题一起给到 AI,然后 AI 就能够根据这些信息,准确的回答问题。

在整个过程中,AI 原本不知道应该如何回答,但通过 RAG 技术,提供了额外的信息(Context),于是 AI 就能够根据这些信息回答问题。

是不是像极了开卷考试

Prompt 提示词

我看到现在已经有公司在招聘提示词工程师了。

提示词工程师可不止是在写提示词,而是在充分理解 AI 的基础上,结合常规的编程技术,根据需求场景,拆分并编排任务,把适合 AI 完成的任务交给 AI。

PS:我之前有篇博客也有提到 Prompt 开发的内容,感兴趣可以翻过去看。

当 AI 作为业务流程中的一环时,我们通常会希望它理解用户讲的内容,并根据当时的情况,输出格式化的结果。要想让 AI 很好的完成工作,最重要的事情就是:告诉它当时的情况,以及相关的信息(Context)。

对于语言交互界面(LUI),用户通过讲话(文字)来提出自己的诉求,而业务是需要通过这样的交互方式提供多种多样的功能。自然需要是开放的,因此第一步通常需要先判断用户的意图,然后选择合适的应对方式。那么你的业务场景支持哪些功能呢?比如我们的健身场景,用户可能是想上某位教练的课,有可能是了解一下健身相关的知识,或者遇到了产品的问题需要咨询。AI 并不了解我们公司的业务,因此我们需要在 Prompt 中提供这些额外信息(Context)。

除了组织要 Prompt 中的语言,认真的设计每个任务所需的 Context 信息,才是提示词开发的关键所在。

CoT 技术

Chain of Thought 是最重要的 Prompt 技术之一。其核心思路就是让 AI 不要急着直接给答案,而是先思考再给出最终答案,这样的方式可以获得质量显著提升的回答。

这里需要稍微涉及到大语言模型实际的工作方式:给定一段文字,推理下一个字/词最可能是什么。所以你会看到 ChatGPT 的回答是一小段文字一小段文字的回复。这并不是为了模拟聊天,而是 AI 实际的工作方式。

我们来看这个例子:

【我】
小明6岁的时候,小红的年龄是小明的一半。那请问小明20岁的时候,小红的年纪是多少。让我们一步一步的思考,考虑年龄增长的方式,再来给出答案。

【ChatGPT 3.5】
好的,让我们一步步来解决这个问题。

首先,我们知道小明6岁的时候,小红的年龄是小明的一半。所以小红的年龄是3岁。

接着,我们考虑年龄增长的方式。假设小明和小红的年龄都按照相同的速度增长,即每年都增长一岁。那么当小明20岁时,小红的年龄增长了14年(20岁-6岁),因此小红的年龄应该比之前增加了14岁。 现在小红原来是3岁,所以在过去的14年里她应该增长了14岁,即她现在
应该是17岁。

所以,当小明20岁时,小红的年龄是17岁。

上面的例子中,GPT3.5(没错,这是我很早以前准备的一个例子)先输出了思考过程,然后再给出了正确答案。如果没有这个思考过程,它给的答案就是错的。

结合上面提到的 AI 的工作方式,我们来看,在 AI 输出最终的结果之前,它所拥有的信息变多了,而这些信息是它自己生成的。

你应该能想到,通过这样的方式,本质是 AI 可以自己给自己提供更丰富的 Conetxt,从而能够回答出更好的答案。

哪些模型比较厉害

要想用好 AI,最重要的就是知道哪些 Context 对于解决问题是最关键的,并把这些信息给到它。或者如果是使用基于 AI 的工具,理解工具如何处理 Context 也能够帮助你更好的使用 AI 工具。

但这还不够,你还得知道如何选用大模型。虽然现在大语言模型的能力看似相同,但实际还是有着显著的区别,模型之间的能力差距还是很明显。

先说国内的大模型。国内的大模型在世界上算的上第一梯队,进步很快,能力很强,许多场景都能用的上。比如我儿子有啥问题,我经常会找豆包来帮忙回答问题。豆包、通义千问、智谱清言、Kimi、文心等等都是比较好用的模型。

但如果需要强大的专业或推理能力,国外的模型目前依然有着显著的优势。比如 Claude 3.5 sonnet 目前被认为是 Coding 的王者,o1 模型则是推理能力最强的模型。这两个模型也是我目前用的最多的模型。

Claude 模型是由 Anthropic 公司开发的,其核心成员是从 OpenAI 出来的。他们的理念是大模型需要更加可控,因此在开发过程中更加注重模型的可控性,这也就让 Claude 模型在能力超强的同时,幻觉也明显更少。

o1 模型推理能力这么厉害,据说背后就是用上了前面的 CoT 技术。o1 模型并不会直接给出推理结果,而是先思考(生成许多中间过程),然后做出判断、比较,最终给出答案。也就是说,o1 会有许多中间推理过程,会消耗额外的算力,这也是为什么 OpenAI 的高级会员需要 $200 的月费。

简单聊一聊 Cursor

Cursor 是我们当前团队主要使用的 AI 工具。

Cursor 是基于 VS Code 开发的,将 AI 作为其基础功能的一部分,和 VS Code + Github Copilot 的功能大体相近,但又有些关键的区别。Cursor 不仅 Context 处理的更好、更全,大模型也可以用 Claude 这个代码领域的王者模型。

另外非常值的一提的小点是,Cursor 支持多行代码补全、修改,用起来非常舒服。

在公司内部的分享有 Cursor 的实际使用演示,但在博客中就不详细介绍了,推荐直接去官网看介绍 The AI Code Editor

AI 工具给团队带来的改变

用上了 AI 工具,就能做的越快越好,这是大多数人能想象的。但另一点则不是那么直观,那就是我最开始提到的对个人能力边界的拓展。

在有了 Cursor 以后,我们团队中每个人都可以快速的上手使用新的编程语言完成工作。在以前,如果成员没有用过一门新的编程语言,我们就会放弃这个选项,即使这是最合适的选项。现在,我们就可以基于项目情况和目标,直接选用最合适的技术。使用新东西依然会有门槛,但门槛已经降低了不少。

这样的决策方式还会进一步带来另一个变化,那就是分工的变化。

想象一下,我们为什么需要分工?有些分工是因为工作量大,多人一起做。有些分工则是因为一个人的知识有限,大家懂的东西不同。第二种情况的分工,通常涉及到大量的沟通,因为彼此不够了解。在有了 AI 以后,第二种分工的情况可以得到显著的改善,很可能就可以由一个人完成。由于沟通成本的降低,整体效率也会得到极大的提升。

研发 Leader 用上 AI,那更是如虎添翼。当一名研发被提拔为研发 Leader 后,通常会因为需要处理团队、沟通的事情,无法有大块的时间专注于写代码,很容易快速的丢掉手感,难以做出正确的技术决策。我自己以前是通过个人小项目的方式,尽可能保持代码的手感。在有了 AI 以后,研发 Leader 可以充分发挥自己的技术视野的优势,使用 AI 快速的验证想法,保持手感,做出更好的技术决策。

人驾驭 AI

有句话是这么说的:人无法赚到认知以外的钱

我也照着来一句:人无法使用自己不理解的工具

AI 非常厉害,但如果你不懂设计,你就无法让 AI 辅助你产生专业的设计图。如果你不懂编程,AI 生成了代码你也无法使用。因此,我并不担心 AI 替代程序员,总得有懂编程的人去使用 AI。

尽早驾驭 AI,这是时代给我们的红利。

如果一定给一个建议,那就是:把 AI 用起来,在可负担的范围内用最好的