上节课,我以传统应用编程设计模式和思维为入口和对比对象,介绍了LangChain中的Chain、Agent、Callback三大核心概念,并整理了LangChain为众多开发者内置的能力与工具。没有看过的小伙伴可以点击链接查看: AI课程合集
今天我将为大家介绍LangChain基于AI大模型衍生的新能力,Model I/O、Retrieval、和Memory。
组件总览
大家看完今天的文章后,可以回头再来看下LangChain的组件与架构图,就能从全局的角度基本理清LangChain的组件与抽象层以及它们之间的相关联系。
本篇文章主要介绍LangChain基于AI大模型衍生的新能力,本次课程整体提纲如下:
Model I/O -交互而非IO
传统的应用开发通常需要定义好输入输出(IO)的格式和规范,例如文本、图像、音频、视频等。这样做的好处是可以保证数据的一致性和可解释性,但也带来了一些限制和不便,例如需要对数据进行预处理和后处理,需要适配不同的设备和平台,需要考虑用户的习惯和偏好等。
LangChain则提供了一种新的方式:Model I/O,即直接与模型进行交互,而不需要关心IO的细节。你可以把它想象成我们日常交流时使用的嘴巴和耳朵。如上图所示,Model I/O有三种类型:
类型 | 作用 |
---|---|
Prompts | 用于向语言模型提供输入的模板,它们可以定义输入变量,输出格式,部分变量等,以便生成符合用户需求的文本 |
Language models | 用于人工智能模型的参数自定义,它们可以根据不同的参数(如温度,最大长度,前缀等)产生不同风格和内容的文本 |
Output parsers | 用于将语言模型的输出解析为更结构化的信息的类如JSON、XML |
Model I/O的核心思想是利用AI大模型强大的自然语言理解和生成能力,将任何形式的输入转换为自然语言,然后将自然语言输入到模型中,得到自然语言的输出,再将自然语言转换为任何形式的输出。这样做的好处是可以简化应用开发流程,提高用户体验,增加应用场景和功能。
如下是一个提供了多个角色对话内容的Model I/O交互示例:
ini复制代码from langchain.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_messages([
("system", "You are a helpful AI bot. Your name is {name}."),
("human", "Hello, how are you doing?"),
("ai", "I'm doing well, thanks!"),
("human", "{user_input}"),
])
messages = template.format_messages(
name="Bob",
user_input="What is your name?"
)
Retrieval -检索而非查询
传统的应用开发通常需要定义好查询(Query)的格式和规范,例如关键词、标签、分类等。这样做的好处是可以保证查询的准确性和有效性,但也带来了一些限制和不便,例如需要对查询进行规范化和优化,需要适配不同的数据源和接口,需要考虑用户的意图和需求等。
LangChain则提供了一种新的方式:Retrieval,即定义好数据源以及加载方式后,直接从模型中检索(Retrieve)所需的信息,而不需要关心查询的细节。你可以把它想象成语言模型使用搜索引擎来查找相关内容。如上图所示,我们可以将Retrieval的能力划分为以下几个部分:
能力 | 作用 |
---|---|
Document loaders | 从不同的来源加载文档,支持多种文档类型和位置 |
Document transformers | 对文档进行变换,提取相关的部分,分割成小块 |
Text embedding models | 为文档创建语义嵌入,实现快速有效的相似度搜索 |
Vector stores | 存储和检索嵌入向量,支持多种数据库类型和接口 |
Retrievers | 从数据库中检索数据,支持多种检索算法和优化方法 |
Retrieval是LangChain中最重要的组件之一,它可以让语言模型拥有更丰富和更准确的上下文。Retrieval通过利用AI大模型强大的知识库和语义理解能力,能够将任何形式的查询转换为自然语言,然后将自然语言输入到模型中,得到自然语言的答案,再将自然语言转换为任何形式的输出。
如下是一个MultiQueryRetriever的使用示例:
ini复制代码# Build a sample vectorDB
from langchain.vectorstores import Chroma
from langchain.document_loaders import WebBaseLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
# Load blog post
loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
data = loader.load()
# Split
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
splits = text_splitter.split_documents(data)
# VectorDB
embedding = OpenAIEmbeddings()
vectordb = Chroma.from_documents(documents=splits, embedding=embedding)
Memory -记忆而非存储
传统的应用开发通常需要定义好存储(Storage)的格式和规范,例如数据库、文件、缓存等。这样做的好处是可以保证数据的安全性和可靠性,但也带来了一些限制和不便,例如需要对数据进行备份和恢复,需要适配不同的存储系统和协议,需要考虑用户的隐私和权限等。
LangChain则提供了一种新的方式:Memory,即直接利用模型的记忆(Memory)能力。Memory是LangChain中用于存储和更新上下文的组件,它可以让语言模型记住之前的信息和状态。你可以把它想象成语言模型的大脑,它可以存储短期记忆和长期记忆。根据不同的使用场景,LangChain内部定义的Memory有以下类型:
类型 | 作用 |
---|---|
Conversation Buffer | 用于存储对话中的所有消息和元数据的内存,它可以返回一个列表,包含对话中的每个消息和其相关的信息,如发送者,接收者,时间戳等 |
Conversation Buffer Window Entity | 用于从对话缓冲区中提取特定窗口大小内的实体的内存,它可以返回一个字典,包含窗口内出现的实体及其频率,类型和位置 |
Conversation Knowledge Graph | 用于构建和更新对话中涉及的实体和关系的知识图谱的内存,它可以返回一个图结构,包含节点(实体)和边(关系),以及一些统计信息,如图的大小,密度,聚类系数等 |
Conversation Summary | 用于生成对话的摘要的内存,它可以返回一个字符串,包含对话的主要内容和目标 |
Conversation Summary Buffer | 用于存储对话摘要的内存,它可以返回一个列表,包含对话摘要的每个句子和其相关的信息,如生成时间,置信度等 |
Conversation Token Buffer | 用于存储对话中的所有单词和标点符号的内存,它可以返回一个列表,包含对话中的每个单词或标点符号及其相关的信息,如词性,命名实体类型等 |
Vector Store | 用于将对话中的文本或实体转换为向量表示,并进行相似度计算或聚类分析的内存,它可以返回一个矩阵,包含对话中每个文本或实体的向量表示,以及一些度量值,如余弦相似度,欧氏距离等 |
Memory的核心思想是利用AI大模型强大的参数和数据容量,将任何形式的数据转换为自然语言,并将其作为模型的输入或输出。这样做的好处是可以简化应用开发流程,提高数据处理速度,增加数据来源和质量。
如下是在链中中使用memory的示例:
ini复制代码from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
llm = OpenAI(temperature=0)
# Notice that "chat_history" is present in the prompt template
template = """You are a nice chatbot having a conversation with a human.
Previous conversation:
{chat_history}
New human question: {question}
Response:"""
prompt = PromptTemplate.from_template(template)
# Notice that we need to align the `memory_key`
memory = ConversationBufferMemory(memory_key="chat_history")
conversation = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=memory
)
总结
本文以传统应用编程设计模式和思维为对比对象,介绍了LangChain基于AI大模型衍生出的三种新的能力:Model I/O、Retrieval和Memory,它们分别解决了传统AI应用开发中遇到的IO、Query和Storage方面的问题和挑战。通过利用这些能力,应用开发者可以开发出更简单、更高效、更创新的AI应用。
通过本文的指导,读者可以迭代在传统应用编程中累积的思维方式和经验,充分利用了AI大模型衍生的新能力的创新应用。
那么,我们该如何学习大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、大模型全套的学习路线
学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。
L1级别:AI大模型时代的华丽登场
L2级别:AI大模型API应用开发工程
L3级别:大模型应用架构进阶实践
L4级别:大模型微调与私有化部署
一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。
以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。