简介
本文提供了构建大型语言模型原生应用的全面指南,强调了标准化流程的重要性。文章介绍了LLM工程师所需的多领域技能,以及自下而上和自上而下两种开发方法。重点阐述了实验思维、提示工程、模型选择等优化策略,以及如何通过健全性测试确保质量。最后讨论了从实验到产品化的关键步骤,包括反馈循环、成本控制和可调试性等生产环境注意事项,为开发者提供了构建高质量LLM应用的实用框架。
大型语言模型 (LLM) 正迅速成为现代人工智能的基石。然而,目前还没有既定的最佳实践,而且通常情况下,先驱者们缺乏明确的路线图,需要重新发明轮子或陷入困境。
在过去的两年中,我帮助了许多组织利用大型语言模型构建创新应用。通过这些经验,我开发了一种用于创建创新解决方案的经过实战检验的方法(参考了 LLM.org.il 社区的见解),我将在本文中分享这种方法。
本指南提供了一个“清晰的路线图”,用于在大型语言模型原生开发的复杂环境中导航。你将学习如何从构思到实验、评估和产品化,从而释放你创造突破性应用的潜力。
(使用 Dall-E3 创建)
为什么标准化流程至关重要
大型语言模型领域发展迅速,有时我们每天都会听到新的突破性创新。这既令人兴奋,也让人感到混乱——你可能会在过程中迷失方向,不知道该做什么或如何将你的新奇想法变为现实。
长话短说,如果你是一位想要有效构建大型语言模型原生应用的人工智能创新者(经理或从业者),那么本文就是为你准备的。
实施标准化流程有助于启动新项目,并提供以下几个关键优势:
- 标准化流程——标准化流程有助于团队成员保持一致,并确保新成员顺利入职(尤其是在这种混乱的情况下)。
- 定义明确的里程碑——以一种直接的方式跟踪你的工作、衡量进度并确保你走在正确的道路上
- 确定决策点——大型语言模型原生开发充满了未知数和“小型实验” [见下文]。明确的决策点可以让我们轻松降低风险,并始终保持精益的开发工作。
大型语言模型工程师的必备技能
与软件研发中任何其他既定角色不同,大型语言模型原生开发绝对需要一个新角色:大型语言模型工程师或人工智能工程师。
大型语言模型工程师是一个独特的混合型人才,需要具备来自不同(既定)角色的技能:
- 软件工程技能——与大多数软件工程师一样,大部分工作都涉及将乐高积木拼凑在一起并粘合在一起。
- 研究技能——正确理解大型语言模型原生的实验性质至关重要**。虽然构建“炫酷的演示应用”很容易,但从“炫酷的演示”到实用解决方案的距离需要实验和敏捷性。
- 深入的业务/产品理解——由于模型的脆弱性,了解业务目标和流程至关重要,而不能局限于我们定义的架构。对大型语言模型工程师来说,对人工流程进行建模的能力是一项黄金技能。
在撰写本文时,大型语言模型工程仍然是一个全新的领域,招聘可能非常具有挑战性。寻找具有后端/数据工程或数据科学背景的候选人可能是个好主意。
软件工程师可能会期待更平稳的转型,因为与传统的数据科学工作相比,实验过程更具“工程性”,而不是那么“科学”。话虽如此,我也见过很多数据科学家成功转型。只要你接受你需要学习新的软技能,你就走在正确的道路上!
大型语言模型原生开发的关键要素
与经典的后端应用(例如 CRUD)不同,这里没有循序渐进的秘诀。与“人工智能”中的所有其他事物一样,大型语言模型原生应用需要研究和实验思维方式。
要驯服这头野兽,你必须分而治之,将你的工作分解成更小的实验,尝试其中的一些实验,然后选择最有希望的实验。
我怎样强调研究思维方式的重要性都不过分。这意味着你可能需要投入时间来探索一个研究方向,然后发现它“不可行”、“不够好”或“不值得”。这完全没问题——这意味着你走在正确的道路上。
拥抱实验:流程的核心
有时,你的“实验”会失败,然后你稍微调整一下工作方向,另一个实验就取得了更大的成功。
这就是为什么在设计最终解决方案之前,我们必须从简单的事情开始,并对冲风险。
- 定义“预算”或时间表。让我们看看在 X 周内我们可以做什么,然后再决定是否以及如何继续。通常情况下,2-4 周的时间足以了解基本的 PoC。如果看起来很有希望,就继续投入资源改进它。
- 实验——无论你选择自下而上还是自上而下的实验方法,你的目标都是最大限度地提高结果成功率。到第一次实验迭代结束时,你应该有一些 PoC(利益相关者可以使用的)和你实现的基线。
- 回顾——在我们研究阶段结束时,我们可以了解构建此类应用的可行性、局限性和成本。这有助于我们决定是否将其产品化,以及如何设计最终产品及其用户体验。
- 产品化——遵循标准的软件工程最佳实践,并实施反馈和数据收集机制,开发项目的生产就绪版本,并将其与解决方案的其余部分集成。
基于 LLM 的应用程序开发生命周期(图片由作者提供)
为了更好地实施以实验为导向的流程,我们必须在处理和构建这些实验时做出明智的决定:
从零开始使用大型语言模型: 自下而上的方法
虽然许多早期使用者很快就投入到使用 Langchain 或类似工具构建的“最先进的”多链代理系统中,但我发现“自下而上的方法”通常会产生更好的结果。
从精简开始,非常精简,拥抱“一个提示掌控一切”的理念。虽然这种策略可能看起来非传统,并且一开始可能会产生糟糕的结果,但它为你的系统建立了一个“基线”。
从那里开始,不断迭代和完善你的提示,采用提示工程技术来优化结果。当你发现精简解决方案中的弱点时,通过添加分支来解决这些缺点,从而拆分流程。
在设计我的大型语言模型工作流程图或大型语言模型原生架构的每个“叶子”时,我遵循_魔法三角形_³ 来确定在何处以及何时剪断分支、拆分分支或加粗根部(通过使用提示工程技术)并更充分地利用资源。
自下而上方法的图示(图片由作者提供)
例如,要使用自下而上的方法实现“自然语言 SQL 查询”,我们将首先简单地将模式发送到大型语言模型,并要求它生成一个查询。
自下而上方法的示例(图片由作者提供)
通常,这与“自上而下的方法”并不矛盾,而是作为它之前的另一个步骤。这使我们能够展示快速获胜并吸引更多项目投资。
预先了解全局:自上而下的策略
“我们知道大型语言模型工作流程并不容易,为了实现我们的目标,我们最终可能会得到一些工作流程或大型语言模型原生架构。”
自上而下的方法认识到了这一点,并从一开始就设计大型语言模型原生架构,并从一开始就实现其不同的步骤/链。
这样,你可以将工作流架构作为一个整体进行测试,并充分利用所有资源,而不是单独优化每个叶子。
自上而下的方法流程:一次性设计架构、实施、测试和度量(图片由作者提供)
例如,要使用自上而下的方法实现“自然语言 SQL 查询”,我们将在开始编码之前就开始设计架构,然后直接进行完整的实现:
自上而下方法的示例(图片由作者提供)
找到合适的平衡点
当你开始尝试大型语言模型时,你可能会从一个极端开始(过于复杂的自上而下或超级简单的一次性)。实际上,没有绝对的赢家。
理想情况下,你将在编码和试验模型之前定义一个好的 SoP¹ 并模拟一个专家。实际上,建模非常困难;有时,你可能无法接触到这样的专家。
我发现很难一开始就确定一个好的架构/SoP¹,所以值得在投入大量资源之前进行一些轻量级的实验。然而,这并不意味着所有东西都必须过于精简。如果你已经事先了解到某些东西必须分解成更小的部分——那就去做吧。
在任何情况下,在设计解决方案时,你都应该利用魔法三角形³ 范式并正确地模拟手动流程。
优化你的解决方案:充分利用资源
在实验阶段,我们不断地优化并添加更多“复杂性层级”:
- 提示工程技术– 如 Few Shots、角色分配,甚至是动态 Few-shot
- 扩展上下文窗口从简单的变量信息到复杂的 RAG 流程,可以帮助改进结果。
- 试验不同的模型– 不同的模型在不同的任务上表现不同。此外,大型语言模型通常成本效益不高,值得尝试更针对特定任务的模型。
- 提示精简– 我了解到,对 SoP¹(特别是提示和请求的输出)进行“精简”通常可以改善延迟。通过减少提示大小和模型需要经历的步骤,我们可以减少模型需要生成和输出的内容。你会感到惊讶,但提示精简有时甚至可以提高质量!
请注意,精简也可能导致质量下降,因此在这样做之前设置健全性测试非常重要。
- 将流程拆分成更小的步骤也非常有益,并且可以更容易、更可行地优化 SoP¹ 的子流程。
请注意,这可能会增加解决方案的复杂性或损害性能(例如,增加处理的标记数量)。为了减轻这种情况,目标是使用简洁的提示和更小的模型。
根据经验,当系统提示的巨大变化对 SoP¹ 流程的这一部分产生更好的结果时,通常最好进行拆分。
榨取 AI 的潜力 (使用 Dall-E3 创建)
大型语言模型实验的剖析
就我个人而言,我更喜欢使用 Python、Pydantic 和 Jinja2,从一个简单的 Jupyter Notebook 开始_精简_:
- 使用 Pydantic从模型中定义输出的模式。
- 使用Jinja2编写提示模板。
- 定义结构化的输出格式(使用YAML²)。这将确保模型遵循“思考步骤”并以我的 SoP 为指导。
- 使用你的 Pydantic 验证来确保此输出;如果需要,请重试。
- 稳定你的工作– 使用 Python 文件和包将你的代码构建成功能单元。
在更广泛的范围内,你可以使用不同的工具,例如 openai-streaming 来轻松利用流式传输(和工具),LiteLLM 来拥有跨不同提供商的标准化大型语言模型 SDK,或 vLLM 来服务开源大型语言模型。
使用健全性测试和评估来确保质量
健全性测试评估项目的质量,并确保您没有降低您定义的特定成功率基准。
将您的解决方案/提示视为一条短毯子——如果您拉伸过度,它可能会突然无法涵盖以前涵盖的某些用例。
为此,请定义一组您已经成功涵盖的案例,并确保保持这种状态(或者至少值得这样做)。将其视为表格驱动测试可能会有所帮助。
评估“生成性”解决方案(例如,编写文本)的成功比将 LLM 用于其他任务(例如分类、实体提取等)要复杂得多。对于这些类型的任务,您可能希望让更智能的模型(例如 GPT4、Claude Opus 或 LLAMA3–70B)充当“评判者”。尝试使输出在“生成性”输出之前包含“确定性部分”也可能是一个好主意,因为这些类型的输出更容易测试:
cities: - New York - Tel Aviv vibes: - vibrant - energetic - youthful target_audience: age_min:18 age_max:30 gender: both attributes: - adventurous - outgoing - culturally curious text: Both New York and Tel Aviv buzz with energy, offering endless activities, nightlife, and cultural experiences perfect for young, adventurous tourists.有一些前沿的、🤩🤩有希望的解决方案值得研究。我发现它们在评估基于 RAG 的解决方案时特别相关:请查看 DeepChecks、Ragas 或 ArizeAI。
做出明智的决定:回顾的重要性
在每个主要/时间框架的实验或里程碑之后,我们都应该停下来就如何以及是否继续采用这种方法做出明智的决定。
此时,您的实验将有一个明确的成功率基线,并且您将了解需要改进的地方。
这也是开始讨论此解决方案的产品化含义并开始“产品工作”的好时机:
- 这在产品中会是什么样子?
- 有哪些限制/挑战?您将如何减轻它们?
- 您当前的延迟是多少?够好吗?
- 用户体验应该是什么?您可以使用哪些 UI 小技巧?流式传输有帮助吗?
- 代币的估计支出是多少?我们可以使用较小的模型来减少支出吗?
- 什么是优先事项?是否有任何挑战是不可逾越的?
假设我们实现的_基线_“足够好”,并且我们相信我们可以缓解我们提出的问题。在这种情况下,我们将继续投资和改进该项目,同时确保它永远不会退化并使用健全性测试。
从实验到产品:将您的解决方案变为现实
最后但并非最不重要的一点是,我们必须将我们的工作产品化。与任何其他生产级解决方案一样,我们必须实施生产工程概念,例如日志记录、监控、依赖项管理、容器化、缓存等。
这是一个巨大的世界,但幸运的是,我们可以借鉴经典生产工程中的许多机制,甚至采用许多现有工具。
话虽如此,重要的是要格外注意涉及 LLM 原生应用程序的细微差别:
- 反馈循环——我们如何衡量成功?是简单的“竖起大拇指/向下”机制,还是更复杂地考虑采用我们解决方案的机制?收集这些数据也很重要;将来,这可以帮助我们重新定义我们的健全性“基线”,或者使用 动态少样本 或微调模型来微调我们的结果。
- 缓存——与传统的 SWE 不同,当我们在解决方案中加入生成方面时,缓存可能非常具有挑战性。为了缓解这种情况,请探索缓存类似结果(例如,使用 RAG)和/或减少生成输出(通过使用严格的输出模式)的选项
- 成本跟踪——许多公司认为从“强大模型”(例如 GPT-4 或 Opus)开始非常诱人,但是在生产中,成本可能会迅速上升。避免对最终账单感到惊讶,并确保测量输入/输出标记并跟踪您的工作流程影响(如果没有这些做法——祝您以后分析它好运)
- 可调试性和跟踪——确保您已设置正确的工具来跟踪“错误”输入并在整个过程中对其进行跟踪。这通常涉及保留用户输入以供以后调查和设置跟踪系统。请记住:“与传统软件不同,人工智能会在静默中失败!”
结束语:您在推进 LLM 原生技术中的作用
这可能是本文的结尾,但肯定不是我们工作的结尾。LLM 原生开发是一个迭代过程,涵盖更多用例、挑战和功能,并不断改进我们的 LLM 原生产品。
在您继续人工智能开发之旅时,请保持敏捷,大胆实验,并牢记最终用户。与社区分享您的经验和见解,我们将共同推动 LLM 原生应用程序的可能性界限。不断探索、学习和构建——可能性是无限的。
希望本指南成为您 LLM 原生开发之旅中的宝贵伴侣!我很想听听您的故事——在下面的评论中分享您的胜利和挑战。💬
¹SoP——标准操作程序,借鉴自神奇三角形³的概念
²YAML——我发现使用 YAML 来构建输出在 LLM 中效果更好。为什么?我的理论是它减少了不相关的标记,并且行为更像是母语。本文深入探讨了这个主题。
³神奇三角形——LLM 原生开发的蓝图;请继续关注,并在发布蓝图时关注我以阅读。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
第一阶段:从大模型系统设计入手,讲解大模型的主要方法;
第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓