大模型工具:LangChain原理与案例
Data connection是许多LLM应用程序所需的一部分,它涉及用户特定的数据,这些数据不是模型的训练集的一部分。在简单的应用程序中,单独使用LLM是可以的,但更复杂的应用程序需要将LLM进行链接,无论是与其他LLM还是其他组件进行链接。大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。观看零基础学习书籍和视频,看书籍和视频学
LangChain 是什么?
LangChain
是一个用于开发由语言模型驱动的应用程序的框架。它使得可以构建以下类型的应用程序:
-
数据感知:将语言模型与其他数据源连接起来
-
智能:允许语言模型与其环境进行交互
LangChain
的主要价值在于:
-
组件:提供了处理语言模型的抽象,以及每个抽象的多个实现。组件是模块化且易于使用的,无论您是否使用
LangChain
的其他部分。 -
现成的链:结构化组件的组合,用于完成特定的高层任务。
LangChain 安装
要安装LangChain
,请运行以下命令:
-
使用Pip
-
使用Conda
pip install langchain
这是安装LangChain的最基本要求。LangChain
的真正价值在于将其与各种模型提供者、数据存储等进行集成时产生。默认情况下,安装LangChain
不会安装这些依赖项。不过,有两种其他方法可以安装带有这些依赖项的LangChain
。
要安装与常见的LLM提供者相关的模块,请运行:
pip install langchain[llms]
要安装所有集成所需的模块,请运行:
pip install langchain[all]
请注意,如果您使用的是zsh
,在将方括号作为命令参数传递时,需要使用引号括起来,例如:
pip install 'langchain[all]'
LangChain 基础案例
OpenAI Key设置
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="...")
使用LLMs进行预测,并通过设置温度参数来调整生成的文本的随机性。
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.9)
llm.predict("What would be a good company name for a company that makes colorful socks?")
# >> Feetful of Fun
使用聊天模型进行对话的方法,包括使用不同类型的消息对象进行输入和输出。
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
chat = ChatOpenAI(temperature=0)
chat.predict_messages([HumanMessage(content="Translate this sentence from English to French. I love programming.")])
# >> AIMessage(content="J'aime programmer.", additional_kwargs={})
使用提示模板将用户输入和指令结合起来,以提供更多上下文信息。
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")
prompt.format(product="colorful socks")
使用链将模型和提示模板连接起来,实现更复杂的工作流程。
from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
chat = ChatOpenAI(temperature=0)
template = "You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(llm=chat, prompt=chat_prompt)
chain.run(input_language="English", output_language="French", text="I love programming.")
代理可以根据输入动态选择不同的操作。
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?")
使用存储器来保持应用程序的状态,并在下一次运行时使用存储的状态。
from langchain.prompts import (
ChatPromptTemplate,
MessagesPlaceholder,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate
)
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
prompt = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate.from_template(
"The following is a friendly conversation between a human and an AI. The AI is talkative and "
"provides lots of specific details from its context. If the AI does not know the answer to a "
"question, it truthfully says it does not know."
),
MessagesPlaceholder(variable_name="history"),
HumanMessagePromptTemplate.from_template("{input}")
])
llm = ChatOpenAI(temperature=0)
memory = ConversationBufferMemory(return_messages=True)
conversation = ConversationChain(memory=memory, prompt=prompt, llm=llm)
conversation.predict(input="Hi there!")
LangChain 组成结构
LangChain提供了标准、可扩展的接口和外部集成,用于以下模块,按照从简单到复杂的顺序排列。
Model I/O
Model I/O是任何语言模型应用程序的核心元素。LangChain提供了与任何语言模型进行交互的构建模块。
-
Prompts(提示):将模型输入进行模板化、动态选择和管理。
-
Language models(语言模型):通过通用接口调用语言模型。
-
Output parsers(输出解析器):从模型输出中提取信息。
使用这些模块,可以有效地管理和处理与语言模型的交互。模板化输入、调用模型和解析输出是构建语言模型应用程序的关键步骤。
Data connection
Data connection是许多LLM应用程序所需的一部分,它涉及用户特定的数据,这些数据不是模型的训练集的一部分。LangChain提供了构建模块,通过以下方式加载、转换、存储和查询数据:
-
Document loaders(文档加载器):从多种不同的来源加载文档。
-
Document transformers(文档转换器):对文档进行分割、去除冗余文档等操作。
-
Text embedding models(文本嵌入模型):将非结构化文本转换为浮点数列表。
-
Vector stores(向量存储):存储和检索嵌入数据。
-
Retrievers(检索器):对数据进行查询。
使用这些构建模块,可以有效地加载、转换、存储和查询用户特定的数据,为LLM应用程序提供必要的数据连接。
Chains
Chains是LangChain提供的用于构建“链式”应用程序的接口。在简单的应用程序中,单独使用LLM是可以的,但更复杂的应用程序需要将LLM进行链接,无论是与其他LLM还是其他组件进行链接。
LangChain为这种“链式”应用程序提供了Chain接口。我们将Chain定义为对组件的一系列调用,可以包括其他链。
Agents
Agents在一些应用程序中需要根据用户输入灵活地调用LLMs和其他工具。Agent接口提供了这种应用程序的灵活性。Agent可以访问一系列工具,并根据用户输入决定使用哪些工具。Agent可以使用多个工具,并将一个工具的输出作为下一个工具的输入。
Agent主要分为两种类型:
-
Action agents(行动型Agent):在每个时间步骤中,根据之前所有行动的输出决定下一步的行动。
-
Plan-and-execute agents(规划执行型Agent):在前期决定完整的行动序列,然后按计划依次执行,而无需更新计划。
Action agents适用于小任务,而plan-and-execute agents更适用于复杂或长时间运行的任务,这些任务需要维持长期目标和焦点。通常最佳方法是将action agent的动态性与plan-and-execute agent的规划能力相结合,让plan-and-execute agent使用action agents来执行计划。
Memory
Memory模块旨在处理应用程序中的状态,并在链式应用程序或代理的运行之间保留和持久化应用程序数据。它允许您记住和引用先前的交互,并在诸如聊天机器人等应用程序中保持上下文。
Callbacks
LangChain提供了一个回调系统,允许您在LLM应用程序的各个阶段进行钩子操作。这对于日志记录、监控、流式处理和其他任务非常有用。
可以根据需要实现这些方法来执行自定义的回调逻辑,例如记录日志、发送通知、保存输出等。这使您能够在应用程序执行过程中进行观察和干预,并根据需要采取相应的操作。
LangChain 优缺点
优点
-
LangChain采用组件化的设计,提供了一系列模块和接口,使得开发语言模型应用程序变得简单和灵活。开发人员可以选择和组合各个组件,以构建符合自己需求的应用。
-
LangChain支持外部集成和扩展,可以与各种语言模型提供商、数据存储和其他工具集成。这使得开发人员能够根据自己的需求选择最适合的组件和工具,提高应用的灵活性和功能性。
-
LangChain提供了各种模块和工具,适用于不同的应用场景,包括问题回答、聊天机器人、智能代理等。无论是简单的应用还是复杂的应用,LangChain都提供了相应的组件和示例,帮助开发人员快速构建应用。
-
LangChain提供了内存模块,可以在应用程序的不同运行周期中持久化应用状态。这对于需要记住之前交互的应用程序非常有用,如聊天机器人。内存模块使得开发人员可以方便地管理和访问之前的交互数据。
缺点
由于LangChain是一个功能强大且灵活的框架,对于新手开发人员来说,可能需要一定的学习曲线才能熟悉其各个组件和工作原理。对于没有经验的开发人员来说,可能需要花费一些时间来理解和掌握LangChain的使用方法。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)