LangChain基础知识框架

2023-12-20 18:07:20

1、LangChain是什么?? ? ?

LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序,它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。

? ? ?因为 LLM 不管是 GPT 还是 BERT,有且只有一个核心功能,就是预测你给定的语句的下一个词最有可能是什么,除此之外的工作,比如解析 PDF、比如对话式搜索、甚至拿过来一个大任务分解、创建子任务,最终完成,都需要有一整套的工具来把核心功能包装,便于开发人员搭积木,这个工具就是 LangChain。

? ? ? ? LangChain?的官方文档写的清楚易懂,结构上分为 7 个模块,常用的场景有 8 个,搞清楚这个 7 和 8,在这一轮的大潮里面,你准备的也就七七八八了,接下来我们详细介绍下这个 7 和 8 (大部分内容都是基于官方文档,所以强烈建议直接去阅读文档):

  • 8 个场景

  • 7 个模块(这一部分的名字就不画蛇添足的翻译了,保留英文单词比较好)

2、8 个场景:

  1. 个人助理

  2. 聊天机器人

  3. 基于文档的 QA 问答

  4. 基于表格格式的数据 QA 问答

  5. 通过 API 控制外部服务

  6. 从无结构数据中提取结构化数据

  7. 长文本中心思想总结

  8. 大模型效果在业务场景下的效果评估

3、7 个模块:

  1. Schema:主要描述输入、输出用到的各种数据结构

  2. Models:包括 ChatGPT 等各种可以接入的模型

  3. Prompts:机器学习从线性回归、逻辑回归、SVM等一直发展到预训练模型+微调 finetune,终于到了现在可以直接通过定制话术界定上下文的方式来应用机器学习的成果,Prompts 是此次机器学习大潮能力的集中展现,也是 LangChain 包封装能力的集中展现,LangChain 的主要作用是给大家展现一下 LLM 到底可以怎么用,学习、消化、自己发挥。#敲黑板 #考点。

  4. Indexes: 对自然语言处理来讲,一段文字过来之后要起到作用,肯定要经过分词、向量化(有必要的话要存储持久化)、按条件召回三步,Indexes 部分就是 LangChain 针对这三个步骤做出的答案。

  5. Memory:想象一个经典的闲聊场景,两个人聊着聊着不能说其中一个突然聊断片了,那就没法愉快的聊下去,机器学习是如何解决这个记住上下文的问题的?大模型的解决方式其实简单粗暴,直接把之前说过的对话在新的对话中再说一遍不就得了,但带来的问题也很直观,所有 LLM 每次输入都是有上限的,比如 ChatGPT 一开始是 4k,也就是只能接受 4096 个 token,超过这个限制的「记忆」该怎么办?LangChain 封装了集中方案,比如刚说的方式在 LangChain 中被称为 Stuff 方式;把长文本直接按照长度或者 token 的长度强行分割,把每一部分分别总结,最后把总结过的内容串在一起作为「记忆」上传给 LLM ,这种方式叫 mapreduce;指定一段长度,比如每说 200 个 token 就做一下总结,最终形成一个「记忆」,这种从 RNN 里面学来的方式在 LangChain 里面叫 Refine;除此之外还有 map-rerank,顾名思义,就是 map-reduce 的改良版,针对每一小段的内容做完总结之后,然后类似搜索引擎的 rank 机制,把每一小段的内容根据重要程度打个分,分数高的排前面,分数低的直接末位淘汰,最终形成一个「记忆」。这几种方式的目的都是为了解决 LLM 的输入窗口太低的问题,按照当前解决问题的“惯例”,能直接上算力粗暴解决的就上算力粗暴解决,所以主流的 LLM 玩家在解决「记忆」这个问题上的主流思路也是简单粗暴,直接玩儿命加大 LLM 的输入窗口,只要窗口足够大,上面提到的 Stuff 方式就可以完全覆盖后面提到的三种”取巧“的方式。

  6. Chains:学过编程尤其是 javascript 等函数式编程语言的同学对链式调用这个概念都不会陌生,针对一个稍微大点或者说复杂一点的任务,拆解成多个小的任务,然后把各个小任务串起来最终解决大任务,这就是 Chain 这个名字的由来和解决问题的意义。拿 LangChain 中的 LLMChain 来讲,它本身就包含了用来提示 LLM 如何干活的 Prompt 提示,并且针对一些通用场景提供了模板(PromptTemplate)用户可以直接拿来用,除此之外,跟如何让 LLM 做正确的事比,教会 LLM 如何不做错误的事,是更为重要的事。

  7. Agents:最后一个组件是 Agent,如果说 Prompt 组件是让用户了解如何调教 LLM 做事,Chain 用来拆解大任务;Indexes 和 Memory 负责把用户的内容和 LLM 可以理解的内容之间做转化,并记住上下文。那么 Agent 就是比 Chains 更高一层的针对任务的抽象,与 Chains 相反,Chains 负责把任务往细的方向拆解LangChain 里面的 Agent 负责向上描述一个任务,比如查询一个指定话题的当天的新闻查询 Agent;比如针对某一个领域,结合用户提供的领域知识提炼总结出更适合用户需要的输出,类似这样的任务都需要调用外部的 API 或者外部的知识库、向量存储、甚至是传统数据库,Agent 的概念提出来就提供了一个把这些细节包起来,着眼全局的方式,大问题确定了,如何拆解、如何汇总结果,就变成了一个相对简单的执行问题。

? ? ? ? ?以上简单介绍了 LangChain 目前着眼的 8 个场景和它自身根据作者对 LLM 应用的理解拆分的 7 个模块,有了这个「七七八八」的认识,接下来就可以按图索骥,深入了解 LangChain 是如何包装 LLM 的能力解决问题的思路。而理解完了这个思路,再结合自己所在领域的知识,设计出来一套适合自己业务的、独特的 LangChain,才应该是这一波开发者和创业者最大的机会!

文章来源:https://blog.csdn.net/gyshun/article/details/135112729
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。