Langchain-chatchat: Langchain基本概念

一、Langchain的chain是指的是什么?

langchain字面意思是长长的链子,那么chains 链子具体指的是什么呢?

智普AI助手的回答如下:

LangChain 中的 “chain” 是指链式操作或者序列化操作,它是一种将多个任务或操作按照一定的顺序组合起来,以实现特定目标的方法。在 LangChain 框架中,这个概念主要用于描述一系列基于大型语言模型(LLM)的应用程序。

链式操作通常包括以下几个步骤:

  1. 用户向语言模型提出问题。
  2. 将问题转换为向量表示,并在向量数据库中进行相似性搜索。
  3. 从向量数据库中获取相关信息。
  4. 将相关信息馈送到语言模型以生成答案或采取行动。

通过将这些操作组合成链式结构,LangChain 允许开发人员灵活地构建各种由 LLM 驱动的应用程序。这种链式结构使得开发者可以轻松地定制和扩展应用程序的功能,同时保持代码的可读性和可维护性。

简单来说,Langchain就是将LLM串联起来进行的一系列链式操作, 对于简单的应用来说,孤立地使用LLM是没有问题的,但更复杂的应用需要将LLM串联起来–要么相互串联,要么与其他组件串联。

LangChain为这种 "链式 "应用提供了Chain接口。我们非常笼统地将链定义为对组件的调用序列,其中可以包括其他链。基本接口很简单:

class Chain(BaseModel, ABC):
    """Base interface that all chains should implement."""
​
    memory: BaseMemory
    callbacks: Callbacks
​
    def __call__(
        self,
        inputs: Any,
        return_only_outputs: bool = False,
        callbacks: Callbacks = None,
    ) -> Dict[str, Any]:
        ...

为什么我们需要链

链允许我们将多个组件结合在一起,创建一个单一的、连贯的应用程序。例如,我们可以创建一个链,接受用户输入,用PromptTemplate格式化,然后将格式化的响应传递给LLM。我们可以通过将多个链组合在一起,或将链与其他组件组合在一起,建立更复杂的链。

看一个简单使用的例子:

LLMChain是最基本的构建块链。它接受一个提示模板,用用户输入的格式化它,并从LLM返回响应。

要使用LLMChain,首先要创建一个提示模板。

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
​
llm = OpenAI(temperature=0.9)
prompt = PromptTemplate(
    input_variables=["product"],
    template="What is a good name for a company that makes {product}?",
)

我们现在可以创建一个非常简单的链,它将接受用户的输入,用它来格式化提示,然后将其发送到LLM。

from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
​
# Run the chain only specifying the input variable.
print(chain.run("colorful socks"))
​
    Colorful Toes Co.

如果有多个变量,你可以用一个字典一次输入它们。

prompt = PromptTemplate(
    input_variables=["company", "product"],
    template="What is a good name for {company} that makes {product}?",
)
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run({
    'company': "ABC Startup",
    'product': "colorful socks"
    }))
​
    Socktopia Colourful Creations.

你也可以在LLMChain中使用一个聊天模型:

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
)
human_message_prompt = HumanMessagePromptTemplate(
        prompt=PromptTemplate(
            template="What is a good name for a company that makes {product}?",
            input_variables=["product"],
        )
    )
chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt])
chat = ChatOpenAI(temperature=0.9)
chain = LLMChain(llm=chat, prompt=chat_prompt_template)
print(chain.run("colorful socks"))
​
    Rainbow Socks Co.

chain的分类:

主要分为LLMChain,Sequential Chains,Router Chain,其中LLMChain是最基本的chain它简单的组合了LLM和promt, Sequential Chains主要包含SimpleSequentialChain和SequentialChain,对于SimpleSequentialChain来说它只是简单的将多个LLMChain串联在一起,前一个chain的输出是后一个chain的输入,所以总体上来说SimpleSequentialChain只有一个输入和一个输出,而SequentialChain则具体多个输入或输出。而Router Chain则是具有路由功能的chain ,它可以将用户的问题进行分类,从而将问题传递给特定的chain。

个人理解总结:

理解了chains的作用和意义,才能真正理解Langchain的作用和意义,个人理解,Langchain就像高达玩具一样,可以融合市场上主流的大模型,并且提供了组合调用链路以供使用者快速上手使用,也支持使用者自己定义组装自己的调用链路,以此来满足各种各种的场景需求,因此与其说Langchain是个框架和工具,倒不如说Langchain是一个设计模式或者理念,使用者不应该拘泥于某一种的使用方式,而是探索在不同的场景中如何让chains更加高效的工作,甚至是自定义自己的chains。

最后,来看看Langchain中文社区怎么介绍chains的。

链是由链接组成的,它可以是原语或其他链。原语可以是提示、模型、任意函数或其他链。这里的示例分为三个部分:

通用功能

涵盖了通用链(在各种应用程序中都有用的链)以及与这些链相关的通用功能。

二、Langchain框架的工作原理

工作流程:加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答。

  1. 加载文件:将需要处理的文本文件加载到系统中。这些文本可以是百科全书、知识图谱或其他类型的知识源。
  2. 读取文本:从文件中读取文本内容,并将其转换为字符串格式。
  3. 文本分割:将输入的文本分割成单独的句子或段落。这可以通过正则表达式、分词器或其他文本处理方法实现。
  4. 文本向量化:将分割后的文本转换为数值向量。这可以通过词嵌入方法(如 Word2Vec、GloVe 等)或将文本转换为独热编码(one-hot encoding)来实现。
  5. 问句向量化:将用户输入的问句转换为数值向量。与文本向量化类似,可以使用词嵌入方法或独热编码来实现。
  6. 匹配查询:使用相似度计算方法(如余弦相似度、Jaccard 相似度等)在文本向量中找到与问句向量最相似的 top k 个文本片段。这些相似的文本片段可以作为上下文和问题的一部分,添加到 prompt 中。
  7. 构建 prompt:将匹配到的文本片段和原始问题组合成一个完整的 prompt。例如,“您的问题关于 […],以下是与您问题相关的上下文: […],请回答 […]”。
  8. 提交给 LLM 生成回答:将构建好的 prompt 提交给大型语言模型(如 GPT-3、ChatGPT 等)进行回答生成。模型根据 prompt 中的上下文和问题生成相应的回答。
  9. 输出回答:将模型生成的回答输出给用户,完成问答过程。

从文档处理角度来看,实现流程如下:

Langchain 应用领域:

1,文本总结(Summarization): 对文本/聊天内容的重点内容总结。

2,文档问答(Question and Answering Over Documents): 使用文档作为上下文信息,基于文档内容进行问答。

3,信息抽取(Extraction): 从文本内容中抽取结构化的内容。

4,结果评估(Evaluation): 分析并评估LLM输出的结果的好坏。

5,数据库问答(Querying Tabular Data): 从数据库/类数据库内容中抽取数据信息。

6,代码理解(Code Understanding): 分析代码,并从代码中获取逻辑,同时也支持QA。

7,API交互(Interacting with APIs): 通过对API文档的阅读,理解API文档并向真实世界调用API获取真实数据。

8,聊天机器人(Chatbots): 具备记忆能力的聊天机器人框架(有UI交互能力)。

9,智能体(Agents): 使用LLMs进行任务分析和决策,并调用工具执行决策。

三、代码结构

  • configs/ 配置文件路径
  • server/ api服务、大模型服务等服务程序等核心代码
  • webui_pages/ webui服务
  • startup.py 启动脚本

img

│ .gitignore
│ CONTRIBUTING.md
│ init_database.py 用于初始化知识库
│ LICENSE
│ README.md
│ release.py
│ requirements.txt
│ requirements_api.txt
│ requirements_webui.txt
│ shutdown_all.sh 一键停止脚本,kill掉启动的服务
│ startup.py 一键启动
│ webui.py ui界面启动
├─chains
│ llmchain_with_history.py

├─common
init.py

├─configs
│ model_config.py.example 模型配置文件,配置使用的LLM和Emebdding模型;
│ server_config.py.example
init.py
├─embeddings
init.py
├─knowledge_base
│ └─samples 知识库
│ ├─content
│ │ test.txt 知识库上传的文档
│ └─vector_store 向量化后的知识
│ index.faiss
│ index.pkl

├─nltk_data
├─server
│ │ api.py 用于启动API服务
│ │ api_allinone_stale.py
│ │ llm_api.py 用于启动LLM
│ │ llm_api_shutdown.py
│ │ llm_api_stale.py
│ │ utils.py
│ │ webui_allinone_stale.py
│ │
│ ├─chat
│ │ chat.py 用于与LLM模型对话
│ │ knowledge_base_chat.py 用于与知识库对话
│ │ openai_chat.py
│ │ search_engine_chat.py 用于搜索引擎对话
│ │ utils.py
│ │ init.py
│ │
│ ├─db 知识库的数据库
│ │ │ base.py
│ │ │ session.py
│ │ │ init.py
│ │ │
│ │ ├─models
│ │ │ base.py 数据库表的基础属性
│ │ │ knowledge_base_model.py 知识库模型的表字段
│ │ │ knowledge_file_model.py 知识库文件的表字段
│ │ │ init.py
│ │ │
│ │ └─repository
│ │ knowledge_base_repository.py
│ │ knowledge_file_repository.py
│ │ init.py
│ │
│ ├─knowledge_base
│ │ │ kb_api.py 知识库API,创建、删除知识库;
│ │ │ kb_doc_api.py 知识库文件API,搜索、删除、更新、上传文档,重建向量库;
│ │ │ migrate.py 初始化 or 迁移重建知识库;
│ │ │ utils.py 提供了加载Embedding、获取文件加载器、文件转text的函数,可设置文本分割器;
│ │ │ init.py
│ │ │
│ │ └─kb_service
│ │ base.py 向量库的抽象类
│ │ default_kb_service.py
│ │ faiss_kb_service.py faiss向量库子类
│ │ milvus_kb_service.py
│ │ pg_kb_service.py
│ │ init.py
│ │
│ └─static

├─tests
│ └─api
│ test_kb_api.py 测试知识库API
│ test_stream_chat_api.py 测试对话API

├─text_splitter 各种文本分割器
│ ali_text_splitter.py 达摩院的文档分割
│ chinese_text_splitter.py 中文文本分割
│ zh_title_enhance.py 中文标题增强:判断是否是标题,然后在下一段文字的开头加入提示语与标题建立关联。
init.py

└─webui_pages UI界面构建
│ utils.py 简化api调用
init.py

├─dialogue
│ dialogue.py 问答功能,LLM问答和知识库问答,还有搜索引擎问答;
init.py

├─knowledge_base
│ knowledge_base.py 知识库管理界面构建
init.py

└─model_config
model_config.py 模型配置页面,TODO。应该是可以在界面上手动选择采用哪个LLM和Embedding模型。
init.py

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

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

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段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.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/718406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Aeron:Aeron Agent

Aeron Agent 是一个 Java 代理,用于提供 Aeron、Aeron Archive 和 Aeron Cluster 中发生的运行时低级日志信息。这些日志语句包括从高级管理员事件到大容量数据帧事件。 在调试 Archive 和 Cluster 问题时,Aeron Agent 的日志数据尤其有用。 一、Availab…

Excel VLOOKUP 使用记录

Excel VLOOKUP 使用记录 VLOOKUP简单使用 VLOOKUP(lookup_value,table_array,col_index_num,[range-lookup]) 下面是excel对VLOOKUP 的解释 lookup_value(查找值):要匹配查找的值 table_array(数据表)&#xff1…

基于(C++)VTK9.3.0+Microsoft Visual Studio2017的DICOM影像VR体绘制完整实现代码

开发基于(C)VTK9.3.0Microsoft Visual Studio2017的DICOM影像VR体绘制程序的前提是: 1、已编译完成VTK9.3.0,可在VTK官网下载VTK9.3.0源码,官网下载地址:Download | VTK 选择所需的VTK版本进行下载 具体编…

图片的大小如何改变?有效率改图片大小的方法

图片怎么将改变图片大小呢?现在经常在使用图片的时候需要先按照上传平台的要求来修改尺寸和大小,将图片调整到满足使用的大小之后然后上传使用。那么如何在线改变图片大小呢,有一个很简单的方法能够快速在线改图片大小,今天小编将…

c++ 编译过程杂记等

开篇一张图。 编译器 把我们的代码翻译成机器语言 ​ gcc编译程序的过程 gcc编译程序主要经过四个过程: 四个过程说明: ​ 预处理实际上是将头文件、宏进行展开。 编译阶段,gcc调用不同语言的编译器,例如c语言调用编译器ccl…

示例:WPF中绑定枚举到ComboBox的方式

一、目的:在开发过程中,经常会需要把枚举绑定到ComboxBox下拉列表中,其实方法有很多,这里面通过MarkupExtension扩展GetEnumSourceExtension去绑定到列表 二、实现 定义GetEnumSourceExtension类 public class GetEnumSourceExte…

FLAN-T5模型的文本摘要任务

Text Summarization with FLAN-T5 — ROCm Blogs (amd.com) 在这篇博客中,我们展示了如何使用HuggingFace在AMD GPU ROCm系统上对语言模型FLAN-T5进行微调,以执行文本摘要任务。 介绍 FLAN-T5是谷歌发布的一个开源大型语言模型,相较于之前的…

一文彻底理解机器学习 ROC-AUC 指标

在机器学习和数据科学的江湖中,评估模型的好坏是非常关键的一环。而 ROC(Receiver Operating Characteristic)曲线和 AUC(Area Under Curve)正是评估分类模型性能的重要工具。 这个知识点在面试中也很频繁的出现。尽管…

springboot+vue+mybatis酒店房间管理系统+PPT+论文+讲解+售后

随着现在网络的快速发展,网络的应用在各行各业当中它很快融入到了许多商家的眼球之中,他们利用网络来做这个电商的服务,随之就产生了“酒店房间管理系统”,这样就让人们酒店房间管理系统更加方便简单。 对于本酒店房间管理系统的…

深浅拷贝以及正则表达式(python)

浅拷贝和深拷贝: 浅拷贝: copy函数是浅拷贝,支队可变类型的第一层对象进行拷贝,对拷贝的对象开辟显得内存空间进行存储,不会拷贝对象内部的子对象 不可变类型的浅拷贝示例: 浅拷贝不会对不可变类型进行…

飞天茅台酒的惊魂五日

“电商百亿补贴修改发货规则”导致黄牛资金压力剧增,资金压力之下部分黄牛择低价甩卖,其他求货的酒行、大酒商则选择观望,价格下行压力最终扩散,造成整个回收市场踩踏,价格急速下跌。 不到半年时间,飞天茅台…

FreeRtos-09事件组的使用

1. 事件组的理论讲解 事件组:就是通过一个整数的bit位来代表一个事件,几个事件的or和and的结果是输出 #define configUSE_16_BIT_TICKS 0 //configUSE_16_BIT_TICKS用1表示16位,用0表示32位 1.1 事件组适用于哪些场景 某个事件若干个事件中的某个事件若干个事件中的所有事…

MySQL常见的命令

MySQL常见的命令 查看数据库(注意添加分号) show databases;进入到某个库 use 库; 例如:进入test use test;显示表格 show tables;直接展示某个库里面的表 show tables from 库; 例如:展示mysql中的表格 show tabl…

免费无版权可商用资源|自媒体创业者、设计师、电商商家必备

1.前言 小伙伴们大家好,欢迎来到天夏Ai,这里专注于分享人工智能精品资源:Ai副业项目、Ai效率神器!和你一起共享Ai信息,分享Ai副业项目资源,开启智能副业赚钱新时代! 今天为大家分享免费无版权可…

【UE5.1】制作自己的载具

目录 前言 效果 步骤 一、制作载具模型 二、载具设置 三、控制载具 前言 在前面我们通过UE4完成了载具的制作,下面我们介绍一下如何通过UE5制作载具。 效果 步骤 一、制作载具模型 制作方法同【UE4 制作自己的载具】1-使用3dsmax制作载具 二、载具设置 …

SpringBootWeb 篇-入门了解 Apache POI 使用方法

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Apache POI 概述 2.0 使用 Apache POI 读写 Excel 文件 2.1 写入 Excel 文件 2.2 写入 Excel 文件代码演示 2.3 读取 Excel 文件 2.4 读取 Excel 文件代码演示 1.…

List, Set, Map, Queue介绍

Java集合框架是一组接口和实现这些接口的类的集合,它提供了对数据集合的高效率存储和操作。以下是Java集合框架中一些核心接口的介绍: 1.List: List是一个有序的集合,允许包含重复的元素。它提供了按插入顺序访问元素的方法&…

openGauss 6.0高可用测试,系统上线前很关键

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

安卓网络通信(多线程、HTTP访问、图片加载、即时通信)

本章介绍App开发常用的以下网络通信技术,主要包括:如何以官方推荐的方式使用多线程技术,如何通过okhttp实现常见的HTTP接口访问操作,如何使用Dlide框架加载网络图片,如何分别运用SocketIO和WebSocket实现及时通信功能等…

全平台无水印下载软件【电脑版】

支持抖音,快手,小红书,电脑PC端使用。 链接:https://pan.baidu.com/s/1969HwHNyqYL_GJtB0n0G_w?pwd2sjn 提取码:2sjn