1.1 Langchain概述
1.1.1 概述
LangChain是一个强大的框架,帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。LangChain是一个基于语言模型开发应用程序的框架。
-
数据感知:将语言模型连接到其他数据源
-
自主性:允许语言模型与其环境进行交互
主要价值在于:
-
组件化:为使用语言模型提供抽象层,以及每个抽象层的一组实现。组件是模块化且易于使用的,无论您是否使用LangChain框架的其余部分。
-
现成的链:结构化的组件集合,用于完成特定的高级任务
LangChain 为特定用例提供了多种组件,例如个人助理、文档问答、聊天机器人、查询表格数据、与 API 交互、提取、评估和汇总。
LangChain 中的模型分类:
LLM(大型语言模型):这些模型将文本字符串作为输入并返回文本字符串作为输出。它们是许多语言模型应用程序的支柱。
聊天模型( Chat Model):聊天模型由语言模型支持,但具有更结构化的 API。他们将聊天消息列表作为输入并返回聊天消息。这使得管理对话历史记录和维护上下文变得容易。
文本嵌入模型(Text Embedding Models):这些模型将文本作为输入并返回表示文本嵌入的浮点列表。这些嵌入可用于文档检索、聚类和相似性比较等任务。
LangChain 的特点:
LLM 和提示:LangChain 使管理提示、优化它们以及为所有 LLM 创建通用界面变得容易。此外,它还包括一些用于处理 LLM 的便捷实用程序。
链(Chain):这些是对 LLM 或其他实用程序的调用序列。LangChain 为链提供标准接口,与各种工具集成,为流行应用提供端到端的链。
数据增强生成:LangChain 使链能够与外部数据源交互以收集生成步骤的数据。例如,它可以帮助总结长文本或使用特定数据源回答问题。
Agents:Agents 让 LLM 做出有关行动的决定,采取这些行动,检查结果,并继续前进直到工作完成。LangChain 提供了代理的标准接口,多种代理可供选择,以及端到端的代理示例。
内存:LangChain 有一个标准的内存接口,有助于维护链或代理调用之间的状态。它还提供了一系列内存实现和使用内存的链或代理的示例。
评估:很难用传统指标评估生成模型。这就是为什么 LangChain 提供提示和链来帮助开发者自己使用 LLM 评估他们的模型。
LangChain提供了以下主要组件:
- 模型 ( Models )
- 提示词 ( Prompt )
- 代理( Agents )
- 链( Chains )
- 索引 ( Indexes )
- 内存(Memory)
- 模式 ( Schema )
1.1.2应用场景
-
信息检索
-
LangChain可以根据用户的查询意图,通过记忆链中的语义信息,提供准确、全面的搜索结果。
-
无论是文本、图片还是视频等多媒体数据,LangChain都能进行深度理解和检索。
-
-
问答系统
-
LangChain可以根据用户的问题,从记忆链中抽取相关信息,并给出准确的答案。
-
无论是常见问题还是专业领域的知识,LangChain都能提供高质量的回答。
-
-
个性化推荐
-
LangChain可以根据用户的兴趣和偏好,从记忆链中推荐相关的内容。
-
无论是新闻、音乐还是电影等,LangChain都能根据用户的历史行为和喜好进行精准推荐。
-
-
机器翻译
-
LangChain可以利用记忆链中的语义信息,进行更加准确、自然的机器翻译。
-
通过对源语言和目标语言的语义关联进行建模,LangChain可以提供更加流畅、准确的翻译结果。
-
-
聊天机器人
-
LangChain可以用于构建聊天机器人,使其具备更丰富的交互能力和更准确的回答能力。
-
通过与大型语言模型的结合,聊天机器人可以更加智能地理解用户意图,并提供相应的回复。
-
-
生成式问答(GQA)和摘要
-
LangChain允许将语言模型与其他数据源连接在一起,实现数据感知,从而支持生成式问答和摘要等任务。
-
这些任务通常需要处理大量的文本数据,LangChain的模块化设计和对LLM的通用接口实现可以极大地简化开发过程。
-
-
结合大型语言模型、知识库和计算逻辑快速开发AI应用
-
LangChain通过其强大的框架和灵活的表达语言(LCEL),支持并行化、回退、批处理、流式传输和异步操作等功能。
-
这使得开发人员能够结合大型语言模型、知识库和计算逻辑快速开发强大的AI应用。
-
1.2 Prompt
1.2.1Prompt介绍
LangChain 中的 "prompt" 是一个关键概念,它指的是输入给大型语言模型(LLM)的文本指令或提示,用于引导模型生成特定的输出或执行特定的任务。在 LangChain 的框架中,prompt 的设计和使用对于构建高效、准确的链式应用至关重要。
以下是一些 LangChain 中 prompt 的应用场景和重要性:
-
任务定义:通过精心设计的 prompt,可以明确告诉 LLM 要执行什么任务。例如,对于问答系统,prompt 可能包含问题文本和指示模型生成答案的指令。
-
上下文提供:Prompt 可以包含必要的上下文信息,以帮助 LLM 理解当前任务的背景和上下文。这对于处理具有复杂依赖关系或需要跨多个步骤推理的任务尤为重要。
-
示例引导:通过提供示例 prompt(即少样本学习或零次学习中的例子),可以指导 LLM 如何生成符合要求的输出。这种方法特别适用于那些难以用明确规则定义的任务。
-
链式推理:在 LangChain 中,prompt 可以用于构建链式推理流程。通过设计一系列相互关联的 prompt,可以引导 LLM 逐步完成复杂的推理任务,如多步骤问题解答或对话生成。
-
安全和合规性:通过适当的 prompt 设计,可以确保 LLM 的输出符合特定的安全和合规性要求。例如,可以通过在 prompt 中包含适当的过滤器或指导原则来避免生成不适当或冒犯性的内容。
-
性能优化:Prompt 的设计也可以影响 LLM 的性能和效率。通过优化 prompt 的长度、结构和内容,可以提高 LLM 的响应速度和输出质量。
1.2.2案例实现流程
实现流程:
1.导入prompt的类
2.导入通义大模型
3.定义一个模板
4.实例化模板类
5.提醒用户输入
6.生成prompt
7.实例化通义大模型
8.调用invoke问