LangChain Expression Language 既LCEL,是langchain核心中的核心,可以让我们方便的使用最基本的组件构建复杂的chains,并且支持一些开箱即用的功能包括流式输出、并行、以及日志输出。 我们从两个最常用的langchain例子,来了解LCEL的使用。
基本示例1:prompt + model + output parser
这是最最基础且常见的langChain使用场景,将prompt template和一个llm连接到一起。 这里语言模型我们使用的是openAI chatgpt(如果你没法访问留言),同时你需要安装langchain的一些基本库。
pip install –upgrade –quiet langchain-core langchain-community langchain-openai
我们让llm根据我们给出的topic讲一个笑话。
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")
model = ChatOpenAI()
output_parser = StrOutputParser()
# 这里就是LCEL
chain = prompt | model | output_parser
chain.invoke({"topic": "ice cream"})
可以看到我们得到了一个笑话(虽然这并不可笑:)。
"Why don't ice creams ever get invited to parties?\n\nBecause they always drip when things heat up!"
让我们注意这行代码,我们使用LCEL将不同的组件编排到一起。
chain = prompt | model | output_parser
这个|运算符非常类似unix的管道操作符,一个组件的输出作为另一个组件的输入。
在这个chain中,用户的输入传递给prompt template,组成了完整的template ,然后传递给模型,然后模型输出传递给输出解释器。
让我们看看每个组件实际发生了什么,以便更好的理解。
prompt
prompt是BasePromptTemplate的子类,在这个过程中输入了一个字典类型变量并产出一个PromptValue。
prompt_value = prompt.invoke({"topic": "ice cream"})
prompt_value
PromptValue是一个包裹好的prompt,可以传递给语言模型。
ChatPromptValue(messages=[HumanMessage(content='tell me a short joke about ice cream')])
prompt_value可以转为message形式(结构化)。
prompt_value.to_messages()
[HumanMessage(content='tell me a short joke about ice cream')]
也可以转为string
prompt_value.to_string()
'Human: tell me a short joke about ice cream'
Model
PromptValue 传递给model,在这个例子中model是一个ChatModel,输出一个BaseMessage。补充一个知识点,在langChain中,大语言模型分为LLM和ChatModel,LLM输入输出都是string,而ChatModel的输入输出都是BaseMessage的子类,分为AIMessage(模型输出)、HumanMessage(用户输入)、SystemMessage(系统输入)。
message = model.invoke(prompt_value)
message
model的输出是AIMessage类型。
AIMessage(content="Why don't ice creams ever get invited to parties?\n\nBecause they always bring a melt down!")
Output parser
最后我们的模型输出结果传递给输出解释器,StrOutputParser会将Message转为String。
output_parser.invoke(message)
"Why did the ice cream go to therapy? \n\nBecause it had too many toppings and couldn't find its cone-fidence!"
回顾整个流程
flowchart LR
A[Input: topic=ice cream] --Dict--> B[PromptTemplate] --PromptValue-->C[ChatModel]--ChatMessage-->D[StrOutputParser]--String-->E[Result]
基本示例2:RAG search
首先我们解释一下什么是RAG,RAG(retrieval augmented generation ) 是检索增强式生成的意思,具体点来说就是通过检索一些相关信息,来组成prompt的上下文,llm会根据上下文内容生成,而不是根据自己学习过的知识生成,可以有效降低幻觉问题。
下面我们造一个demo,首先定义好一些知识,然后在输入大模型之前,我们先查询这些知识,根据这些知识,大模型再组织语言输出。
# Requires:
# pip install langchain docarray tiktoken
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_openai.chat_models import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddings
vectorstore = DocArrayInMemorySearch.from_texts(
["harrison worked at kensho", "bears like to eat honey"],
embedding=OpenAIEmbeddings(),
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 1})
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()
output_parser = StrOutputParser()
setup_and_retrieval = RunnableParallel(
{"context": retriever, "question": RunnablePassthrough()}
)
chain = setup_and_retrieval | prompt | model | output_parser
chain.invoke("where did harrison work?")
可以看到 大模型回答对了我们这个它不了解的问题。
'Harrison worked at Kensho.'
在这个示例中,编排的chain是:
chain = setup_and_retrieval | prompt | model | output_parser
vectorStore
我首先看看vectorstore,这里使用了词向量技术,将两段内容使用OpenAIEmbeddings转为向量存储到了内存中。(如果不了解词向量,可以简单把它看成把一段文字的意思提取出来,存在一个多维数组中,在查询时,会把问题也矢量化,然后找到之前存入的与之比较匹配的数据,是一种相似性搜索技术。)
vectorstore = DocArrayInMemorySearch.from_texts(
["harrison worked at kensho", "bears like to eat honey"],
embedding=OpenAIEmbeddings(),
)
retriever
retriever是对vectorstore的一种封装,支持LCEL,我们也可以像调用其他组件一样,直接调用retriever。注意这里search_kwargs={"k": 1}意思是只返回相似度最高的那条数据。
retriever = vectorstore.as_retriever(search_kwargs={"k": 1})
retriever.invoke("where did harrison work?")
>>> [Document(page_content='harrison worked at kensho')]
RunnableParallel
我们使用RunnableParallel对输入prompt template的数据进行预处理。RunnableParallel可以并行的处理其中的多个组件,最终将结果统一输出。将retriever的结果作为context,用户输入则原封不动作为question(使用RunnablePassthrough()保留原始输入)。最终组成一个dict传递给prompt template。
setup_and_retrieval = RunnableParallel(
{"context": retriever, "question": RunnablePassthrough()}
)
后续的步骤和上方的基本示例1相似,这里不再赘述。让我们回顾一下整个流程。
flowchart TD
Question --> B[RunnableParallel]
B--Question-->C[Retriever]
B--Question-->D[RunnablePassThrough]
C--context=retreved docs-->E
D--question=Quesstion-->E[PromptTemplate]
E--PromptValue-->ChatModel--ChatMessage-->StrOutputParser--str-->Result
如何系统的去学习大模型LLM ?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑……
不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、LLM大模型经典书籍
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套LLM大模型报告合集
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

三、LLM大模型系列视频教程

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

LLM大模型学习路线 ↓
阶段1:AI大模型时代的基础理解
-
目标:了解AI大模型的基本概念、发展历程和核心原理。
-
内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
-
目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
-
内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.3 流水线工程
- L2.4 总结与展望
阶段3:AI大模型应用架构实践
-
目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
-
内容:
- L3.1 Agent模型框架
- L3.2 MetaGPT
- L3.3 ChatGLM
- L3.4 LLAMA
- L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
-
目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
-
内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓


被折叠的 条评论
为什么被折叠?



