如果你查看使用大型语言模型,如ChatGPT的发展过程,通常可以发现它具有以下结构。
通常,在大型语言模型(LLM)中,使用经过提示工程设计的提示作为输入,并接收并使用返回的输出。
在稍微更高级的形式下,该模型通过微调进行开发,或者在非常高级的形式下,使用外部文档存储系统。
图。基本LLM应用程序的架构图。
换句话说,它的结构至少会调用一次或多次LLM。
然而,基于LLM的应用程序在操作环境中的结构比这复杂得多。它具有复杂的结构,例如安全性、同时调用多个模型的功能,并且与外部API和搜索引擎的链接。
下图是一个示例架构,展示了一个LLM应用。
图:LLM 应用架构.
与其简单地写一个提示并调用一次LLM,你可以创建多个示例,并根据问题的类型动态选择合适的示例依据问题类型,或者将同一个查询提交给几个不同的LLM模型,然后在它们之间找到最合适的答案。这可以实现为通过选择最终答案的结构,或者从外部数据源(如谷歌搜索引擎)搜索LLM未见过的数据,并将其提供给LLM使用。
这被称为LLM应用架构。
在这本书中,你将理解开发此类LLM应用程序的架构是怎样的,如何使用Langchain开发一个商业级LLM应用程序,以及通过理解Langchain的结构,LLM应用程序的架构实际上是如何详细构建的。目的是理解。
以下列出了构成LLM应用程序的组件。
1.1 安全滤镜特别是对于聊天机器人而言,必须确定通过LLM接收的问题和回应是否不适当。例如,必须在输入阶段过滤掉性内容、暴力或相互诋毁的内容,并且同样地,也必须过滤LLM的输出,以防止不适当的内容被输入或输出。
除了不适当的内容外,输入和输出还需要根据用户的特征(如年龄或宗教信仰)进行调整,并且在某些情况下,还必须检查响应是否侵犯了知识产权。例如,在一个创建营销标语的LLM应用程序的情况下,它不能与现有的营销口号重复,以避免知识产权冲突。
简单的实现可以通过提示工程进行指导,但通过知识产权搜索或模式构建不适当的内容可以通过稍后解释的(RAG结构),如下所述,来完成,该结构通过在文档数据库中存储特定模式并查找相似模式来完成。通过使用过滤结构。
过滤也必须能够根据情况调整筛选强度。根据客户的偏好或具体应用场景,调整筛选,使其更强或更弱。
特别是对于直接与用户互动的聊天机器人来说,这些安全过滤机制非常重要,但许多简单的应用程序往往省略了这些功能的实现。
1.2 提示模板(Prompt Template)在LLM中,提示常常根据场景进行重用。例如,当旅行指南聊天机器人被用来询问某个特定旅行地点的解释时,你只需要更改地点的名称,例如“告诉我关于景福宫的旅行信息。”或“告诉我关于明洞的旅行信息。”这种方法将提示中需要更改的部分转换为变量,从而可以灵活使用,这种做法被称为提示模板。
下面的图片展示了使用模板通过将形容词、主题和城市名称处理成变量来创建提示的概念。将这些值分别输入为“著名的形容词”、“主题”和“首尔”。
图片提示模板概念
1.3 示例选择组件当编写大型语言模型(LLM)提示时,附上问题和答案示例可以提高LLM响应的准确性。
这被称为N-Shot提示法。与其机械地附加同一个示例,不如根据问题的具体情况选择能给出最佳答案的示例,提示的长度取决于问题的具体情况。由于LLM的输入令牌长度受到影响,如果示例过长,可能需要对其进行总结或截断以适应提示。示例选择器是为此问题设计的,并且能够根据问题选择合适的提示。
例如,假设有一个示例提示,要求你总结如下:输入文本。
{"input":"请总结天气新闻。\n"
,"summary":"今日天气:晴朗的天空,温和的气温,"\
"和轻柔的微风。全天都将是宜人的天气,请尽情享受!"},
{"input":"请总结经济新闻。\n","summary":"全球股市因积极的经济数据而上涨;"\
"但通胀担忧依然存在。科技行业表现突出;央行密切监控。"},
{"input":"请总结零售新闻。\n","summary":"主要零售商宣布在假期购物季创下销售纪录。"},
{"input":"股市趋势是什么?\n","summary":"随着全球贸易紧张局势的缓解,投资者的乐观情绪正在增强"},
如果你的问题是关于LLM应用程序的,想了解这周的经济动态和天气,
这周的经济趋势和天气,我想了解一下。
示例选择器功能从提供的示例中选择经济和天气的摘要,并将其插入提示中,如下所示。
输入:请总结天气新闻。
概要:今日天气:晴朗、气温温和、微风。全天天气宜人。
输入:股市趋势是什么?
概要:随着全球贸易紧张局势的缓解,投资者的信心正在增强。
输入:我想知道本周的经济趋势和天气。
概要:
<图:用选定示例插入的提示>
1.4 大规模语言模型(LLM,Large Language Model)一旦提示语经过安全过滤器、提示模板和示例选择器的处理后,就可以调用LLM。
存在诸如ChatGPT、Mistral、Gemini和Antropic的Claude模型等各种模型,但这些模型的准确性和响应时间各不相同,输入和输出的令牌数量尤其是价格差异尤其显著。
所以,只能使用单一的LLM,但在某些情况下,可以共同使用多个LLM。
1.4 管弦乐编排在调用这些大型语言模型(LLM)时,可以将LLM的输出重新输入到LLM中作为新的查询。根据输出内容,可以通过诸如路由等技术改变问题并再次提出,或者同时提出。实际上,在操作环境级别实现LLM应用,例如并行处理两个问题的方式,以调用各种LLM多次并采用不同结构的方式呈现工作流。处理此类复杂工作流的功能被称为编排。
以下是一个示例,用于帮助解释,在获得“关于韩国最著名的旅游景点的信息”之后,“该旅游景点附近的著名餐厅的信息”,“该餐厅著名菜单的信息”,以及平行地“到达该旅游景点的公共信息(如交通指南等)”。在获得“交通方式”的信息之后,这是一个最终收集三个信息点的工作流程结构。
图。编排(Orchestration)管道示例
当然,你可以将所有内容一次性查询,但由于输入/输出令牌数量有限,你可以通过分别查询每个内容,可以获得更具体的问题和答案。
1.5 代理人因为LLM仅拥有在训练期间获得的知识,它并不具备最新的信息。因此,你可以与外部系统连接,例如使用外部的搜索引擎进行搜索和利用外部数据,或者从公司的内部数据库中搜索和使用信息。执行这些功能的组件称为Agent-Tool。Tool是一个连接外部系统的工具,而Agent则根据问题决定使用哪个外部工具并调用该工具。
1.6 向量数据库与外部系统连接的一种方式是搜索与问题相关的文档,并将这些文档作为提示的上下文信息。这种方法被称为检索与生成(RAG)技术。
此方法将文档存储在文档数据库中,搜索文档中与问题相关的段落或页面,将找到的相关内容添加到提示中,并基于添加的内容生成答案。
例如,如果所有的维基百科文档都被存储在一个文档数据库里,并且发出查询,“请解释朝鲜战争”,LLM将仅从存储在数据库中的文档中提取与朝鲜战争相关的文档页面,并返回提取的文档内容。然后将提取的内容插入提示中,您必须仅根据文档内容来回答。
RAG的确将在后面详尽说明。
1.7 缓存在向LLM提问时,有时会多次提出相同或相似的问题。例如,在调试过程中,您可能会多次使用相同的提示来调用LLM。会得到相同的结果,但由于每次调用都会被计费,因此即使问题相同,调用成本也会重复计算。
在类似场景中,如果类似的问题被类似的用户提出,可能无需再次调用LLM模型。例如,“首尔有哪些著名的旅游景点?”。“首尔有哪些必游的地方?”由于这些问题需要相同类型的答案,可以通过缓存机制减少LLM调用次数。
这称为缓存策略,缓存可以存储在LLM应用程序的内存中,或者存储在外部数据库如Redis或关系型数据库管理系统如MySQL中。
1.9 记忆对于聊天机器人而言,它必须记住之前对话的内容,并根据之前的对话内容继续对话。为此,可以将之前的对话内容插入到提示中,并将其作为上下文来继续对话。
然而,LLM模型无法存储所有对话内容,因为输入令牌的数量有限,存在几种技术来解决这个问题。例如,这是一种分别存储旧对话内容和最近对话内容的方法。旧对话内容会被总结后存储在LTM(长期记忆)中,而最近的对话内容则会无损地存储在STM(短期记忆)中。
用于存储现有对话内容的功能称为记忆模块。
图1:短期记忆和长期记忆的概念
开发这样一个LLM应用不仅需要LLM模型,还需要各种附加功能。虽然你可以自己开发这些功能,但Langchain是一个将这些常用模式转化为组件的框架。
从下一章起,让我们逐一了解Langchain的功能。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章