Appearance
提示工程
提示工程(Prompt Engineering)就是探讨如何设计出最佳提示,用于指导语言模型帮助我们高效完成某项任务。
如何构建好的提示
- 任务模块:从动作动词开始,无论简单还是复杂,都要明确说明目标,来有效指导输出。
- 上下文模块:为大模型提供足够的背景信息,描述清楚用户环境,来缩小可能性,同时可以定义生成任务需要的步骤。
- 示例模块:利用示例或框架可以显著提高简历、面试问题或职位描述等各种任务的输出质量。
- 角色模块:定义大模型应该效仿的人,例如技术专家、营养师、专业运动员等。
- 格式模块:无论是表格、电子邮件、项目符号、代码块、段落,还是期望的输出长度,我们都可以把所需的输出格式可视化,来有效地适应任务。
- 语气模块:指定所需的语气,比如休闲、正式、热情或者具体感受,指导大模型匹配写作风格。
生成提示的提示
在 ChatGPT 中输入以下内容: 我想让你成为我的提示工程师。你的目标是帮助我为我的需求制作尽可能好的提示。提示将由你使用。你需要遵循以下流程:
- 你的第一反应是问我提示应该是什么。我会提供我的答案,但我们需要通过下一步不断地迭代来改进它。
- 根据我的输入,你将生成 2 个部分:
- 修改后的提示(提供你重写的提示,它应该要清晰、简洁、易于理解);
- 问题(向我提出任何相关问题以改进提示)。
- 我们将继续这一迭代过程,我将向你提供更多信息,你也将更新修改后的提示部分中的提示,直到我说我们完成为止。
LangChain
LangChain 发展到今天,已经不再是一个纯粹的 AI 应用开发框架,而是成为了一个 AI 应用程序开发平台,它包含 4 大组件。
- LangChain:大模型应用开发框架。
- LangSmith:统一的 DevOps 平台,用于开发、协作、测试、部署和监控大模型应用程序,同时,LangSmith 是一套 Agent DevOps 规范,不仅可以用于 LangChain 应用程序,还可以用在其他框架下的应用程序中。
- LangServe:部署 LangChain 应用程序,并提供 API 管理能力,包含版本回退、升级、数据处理等。
- LangGraph:一个用于使用大模型构建有状态、多参与者应用程序的库,是 2024 年 1 月份推出的。放到我们传统软件开发场景中,我认为 LangChain 就类似于 SpringCloud;LangSmith 类似于 Jenkins + Docker + K8s + Prometheus;LangServe 类似于 API 网关;LangGraph 类似于 Nacos;当然只是简单比拟。
LangChain 技术架构
- 模型 I/O(Model I/O) 模型 I/O 模块主要由三部分组成:格式化(Format)、预测(Predict)、解析(Parse)。顾名思议,模型 I/O 主要是和大模型打交道,前面我们提到过,大模型其实可以理解为只接受文本输入和文本输出的模型。
- Retrieval 可以翻译成检索、抽取,就是从各种数据源中将数据抓取过来,进行词向量化 Embedding(Word Embedding)、向量数据存储、向量数据检索的过程。你可以结合图片来理解整个过程。
- Agents Agents(代理)就是指实现具体任务的模块,比如从某个第三方接口获取数据,用来作为大模型的输入,那么获取数据这个模块就可以称为 XXX 代理,LangChain 本身支持多个类型的代理,当然也可以根据实际需要进行自定义
- Chains 链条就是各种各样的顺序调用,类似于 Linux 命令里的管道。可以是文件处理链条、SQL 查询链条、搜索链条等等。LangChain 技术体系里链条主要通过 LCEL(LangChain 表达式)实现。既然是主要使用 LCEL 实现,那说明还有一部分不是使用 LCEL 实现的链条,也就是 LegacyChain,一些底层的链条,没有通过 LCEL 实现。
- Memory 内存是指模型的一些输入和输出,包含历史对话信息,可以放入缓存,提升性能,使用流程和我们软件开发里缓存的使用一样,在执行核心逻辑之前先查询缓存,如果查询到就可以直接使用,在执行完核心逻辑,返回给用户前,将内容写入缓存,方便后面使用。
- Callbacks LangChain 针对各个组件提供回调机制,包括链、模型、代理、工具等。回调的原理和普通开发语言里的回调差不多,就是在某些事件执行后唤起提前设定好的调用。LangChain 回调有两种:构造函数回调和请求回调。构造函数回调只适用于对象本身,而请求回调适用于对象本身及其所有子对象。
- LCELLang Chain 表达式,前面我们介绍 Chains(链)的时候讲过,LCEL 是用来构建 Chains 的,我们看官方的一个例子。
LangChain 技术体系里比较重要的几个核心概念,整个设计思想还是比较简单的,你只要记住两个核心思想。
- 大模型是核心控制器,所有的操作都是围绕大模型的输入和输出在进行。
- 链的概念,可以将一系列组件串起来进行功能叠加,这对于逻辑的抽象和组件复用是非常关键的。
Agent 使用案例——RAG
微调
大模型领域所谓的性能,英文原词是 Performance,指推理效果,并非我们软件开发里所说的接口性能,比如响应时间、吞吐量等
如果业务场景需要一定的逻辑能力,不是纯文本检索,需要微调,通过在一定量的数据集上的训练,增加大模型相关的常识及思维