LangChain 学习
参考资料
LangChain调用大模型
Anaconda Prompt 模式下执行
# 环境准备
(base) C:\Users\summer>conda create -n langchain python=3.11
(base) C:\Users\summer>conda activate langchain
(langchain) C:\Users\summer>pip install langchain langchain-openai langchain_community sentence_transformers google-search-results numexpr
# 执行问答
(langchain) C:\Users\summer>d:
(langchain) D:\>cd D:\code\klc\learn_pytorch\langchain
(langchain) D:\code\klc\learn_pytorch\langchain>python main.py
type: <class 'langchain_openai.chat_models.base.ChatOpenAI'>
北京、上海、广州、深圳、西安
# 修改代码实现循环问答
(langchain) D:\code\klc\learn_pytorch\langchain>python mainInput.py
type: <class 'langchain_openai.chat_models.base.ChatOpenAI'>
请输入一个问题:中国的首都是哪里?
中国的首都是**北京**。北京是中国的政治、文化、国际交往和科技创新中心,也是世界著名的历史文化名城。
请输入一个问题:乔布斯是谁
史蒂夫·乔布斯(Steve Jobs,1955年2月24日-2011年10月5日)是美国企业家、发明家和设计师,苹果公司(Apple Inc.)的联合创始人之一,对个人电脑、智能手机、数字娱乐等行业产生了深远影响。以下是关于他的关键信息:
.....
使用LCEL
LangChain 表达语言 (LCEL)(LangChain Expression Language (LCEL)):用于编排 LangChain 组件的语法。最适合用于较简单的应用程序。
RunnablePassthrough、RunnableParallel、RunnableBranch、RunnableLambda。
- RunnablePassthrough:主要用在链中传递数据。
- RunnablePassthrough:一般用在链的第一个位置,用于接收用户的输入。如果处在中间位置,则用于接收上一步的输出。
- RunnableParallel:可以实现部分组件或所有组件并发执行的需求。
- RunnableBranch:主要用于多分支子链的场景,为链的调用提供了路由功能,这个有点类似于LangChain的路由链。我们可以创建多个子链,然后根据条件选择执行某一个子链。
- RunnableLambda:可以将Python 函数转换为 Runnable对象。这种转换使得任何函数都可以被看作 LCEL 链的一部分,我们把自己需要的功能通过自定义函数 + RunnableLambda的方式包装一下,集成到 LCEL 链中,这样算是可以跟任何外部系统打通了。
RunnableParallel的用法:
(langchain) D:\code\klc\learn_pytorch\langchain>python mainChain.py
type: <class 'langchain_openai.chat_models.base.ChatOpenAI'>
概念
LangChain 是一个基于大型语言模型(LLM)开发应用程序的框架。它可以将 LLM 模型、向量数据库、交互层 Prompt、外部知识、外部工具整合到一起,进而可以自由构建 LLM 应用。
LangChain 包含六部分组成,分别为:Models、Prompts、Indexes、Memory、Chains、Agent。
框架由几个部分组成。
- LangChain 库:Python 和 JavaScript 库。包含了各种组件的接口和集成,一个基本的运行时,用于将这些组件组合成链和代理,以及现成的链和代理的实现。
- langchain-core:基础抽象和 LangChain 表达式语言。
- langchain-community:第三方集成。
- langchain:构成应用程序认知架构的链、代理和检索策略。
- LangChain 模板:一系列易于部署的参考架构,用于各种任务。
- LangServe:一个用于将 LangChain 链部署为 REST API 的库。
- LangSmith:一个开发者平台,让你可以调试、测试、评估和监控基于任何 LLM 框架构建的链,并且与 LangChain 无缝集成。
- LangGraph: 构建复杂、有状态的多步骤工作流(类似 Agent 的强化版)。
Models
- 大语言模型(LLMs): 支持各类大语言模型的调用。
- 聊天模型(Chat models):通过聊天 API 公开的 LLM,将消息序列处理为输入并输出消息。
- 消息(Messages):聊天模型中的通信单位,用于表示模型的输入和输出。
- AIMessage、HumanMessage、SystemMessage:LangChain 的消息类,分别代表 AI 的回复、用户输入和系统指令。
- 聊天记录(Chat history):以一系列消息表示的对话,在用户消息和模型响应之间交替。
- 消息(Messages):聊天模型中的通信单位,用于表示模型的输入和输出。
- 嵌入模型(Embedding models):在向量空间中表示文本或图像等数据的模型
Prompts
- 提示模板(Prompt templates):用于分解模型“提示”的静态部分(通常是一系列消息)的组件。可用于序列化、版本控制和重用这些静态部分。
- 少量提示(Few-shot prompting):通过提供提示中要执行的任务的几个示例来提高模型性能的一项技术。
- 示例选择器(Example selectors):用于根据给定的输入从数据集中选择最相关的示例。示例选择器用于在少样本提示中为提示选择示例。
Indexes
- 文档加载器(Document loaders):将源加载为文档列表。
- 文本分割器(Text splitters):将长文本分割成较小的块,这些块可以单独索引,以实现细粒度的检索。
- 向量存储(Vector stores):向量和相关元数据的存储和有效搜索。
- 检索(Retrieval):信息检索系统可以根据查询从数据源检索结构化或非结构化数据。
Memory
- 内存(Memory):有关对话的信息将被保存,以便在将来的对话中使用。
- ConversationBufferMemory: 将聊天内容记录在内存中
- ConversationSummaryMemory: 存储用户和机器人之间的聊天内容的摘要
- CombinedMemory
- 内存(Memory):有关对话的信息将被保存,以便在将来的对话中使用。
Chains
- 链(Chain):对多个独立组件进行端到端封装的一种方式。
- 索引链 Index-related chains
- LLM链 LLMChain
- 链(Chain):对多个独立组件进行端到端封装的一种方式。
Agents
- 代理(Agents):使用语言模型来选择要采取的一系列动作。代理可以通过工具与外部资源进行交互。
- 工具(Tools):语言模型与其他资源的交互方式。
- 代理(Agents):驱动决策的语言模型。
- 工具包(Toolkits): 一组工具,当它们一起使用时可以完成特定的任务。
- 代理执行器(Agent Executor):负责运行带有工具的代理的逻辑。
- 代理(Agents):使用语言模型来选择要采取的一系列动作。代理可以通过工具与外部资源进行交互。
