自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (1)
  • 收藏
  • 关注

原创 一起学习大模型 - 从底层了解Token Embeddings的原理(2)

上一篇文章了解了Token Embeddings的原理,这一篇,我们一起来综合运用学到的知识来深入了解Token Embeddings。

2024-05-26 09:00:00 792

原创 一起学习大模型 - 从底层了解Token Embeddings的原理(1)

大家在使用离线或在线的Token Embeddings的时候,有没有想过它是怎么实现的呢,出来的一系列有各种数值的矩阵,又有什么含义呢?它们的作用是什么?Token Embeddings 是一种将文本中的词语转化为向量表示的方法。在自然语言处理中,我们通常将文本表示为一个向量矩阵,其中每个词语对应一个向量。这些向量被称为词向量或者词嵌入。Token Embeddings 是一种词向量的扩展,它可以将不同类型的词语(如单词、字符、子词)都转化为向量表示。

2024-05-25 09:00:00 706

原创 一起来聊聊大模型的token

学习大模型的朋友肯定听说过大模型接口按token,自己编写代码的时候也经常看到token这个词,那它究竟是什么呢,我们一起来探究一下在大模型中,token不一定是一个完整的词。它可以是一个词、一部分词、字符甚至是标点符号。这取决于所使用的分词方法。子词分词方法(如 BPE 和 WordPiece)在现代 NLP 模型中非常常见,因为它们能够高效地处理各种语言现象,同时保持词汇表的紧凑性。

2024-05-24 09:00:00 1293

原创 异步编程函数用法 - starlette.concurrency里的run_in_threadpool

看langchain-chatchat代码的时候看到这一段,本来打算一眼过,忽然发现这个名字上看起来是线程池的地方居然可以用 await。可以把协程的编程方法用在这里,很神奇。看了下引入的包,追踪进去 实际上是这样那么我们就学习一下这个的用法实现了多线程和协程的融合,通过将阻塞的同步任务委托给线程池执行,并使用await等待任务完成,使得在异步编程环境中能够有效处理同步操作。这样既能利用线程池的并发能力,又能保持事件循环的高效运行,从而提高整体应用程序的性能和响应能力。

2024-05-23 09:00:00 904

原创 如何让大模型更聪明?

提示词通常是用户在对话开始前提供的背景信息或指导性信息,通过将这些提示词隐藏在对话框中,可以使模型在生成响应时更具上下文感知能力,从而生成更相关和连贯的回答。例如,在回答复杂的技术问题时,模型可以先检索相关的技术文档或论文,然后基于这些检索到的信息生成详细且准确的回答。这不仅提升了输出的可读性,还确保了信息的准确性和相关性,从而提高了用户对大模型的信任度和满意度。RAG通过在生成答案之前,从一个大型知识库中检索相关信息,并将这些信息作为生成输入的一部分,从而使得生成的内容更加准确和丰富。

2024-05-22 14:38:19 360

原创 一起看langchain-chatchat代码 - python的线程安全和缓存池

我们经常遇见各种池的概念,数据库连接池、消息队列池等。我们今天一起来看下缓存池的运用。线程安全是指多个线程同时访问一个对象时,不会产生任何不正确的结果或不一致的状态。在Python中,可以通过使用锁或其他同步机制来实现线程安全。Python中的有序字典是一种数据结构,它是字典(无序的键值对集合)的一个子类。与普通字典不同的是,有序字典会记住元素添加的顺序,并且可以按照这个顺序进行遍历。元素的插入顺序会被记住,不论之后是否进行了删除或修改操作。可以通过键来访问元素,与普通字典相同。

2024-05-22 14:15:28 882

原创 吊打面试官 - python如何实现工厂模式

工厂模式可以提供一个统一的接口来封装对象的创建过程,降低客户端代码与具体对象之间的耦合性,并隐藏对象的创建细节,提高了系统的灵活性、可维护性、安全性和稳定性。

2024-05-22 09:00:00 1374

原创 跟着langchain-chatchat学python - python类的装饰器@staticmethod和@classmethod,以及方法参数cls和self

上一篇文章讲抽象类的时候,我们看的langchain-chatchat 代码里,往下翻还有两个很有意思的装饰器@staticmethod和@classmethod,那么他们分别有什么作用呢在Python中,@classmethod是一个装饰器,它用于定义一个类方法。类方法是属于整个类而不是实例的方法。类方法可以通过类本身被调用,也可以通过实例被调用。@classmethod装饰器的作用是将一个普通方法转换为类方法,并且将类本身作为第一个参数传递给该方法。

2024-05-21 09:00:00 1391

原创 跟着langchain-chatchat学python - python的抽象类

大家在看到langchain-chatchat这里的时候可能会有些疑惑,这个ABC感觉很神奇,追踪进去的时候可能感觉更疑惑了。其实这是python实现抽象类的一种方式。我们今天就来学习python的一个重要知识点 - 抽象类抽象类是一种特殊的类,它无法被实例化,只能被用作其他类的基类。抽象类主要用于定义接口和规范子类的行为。Python中的抽象类通过abc模块提供的ABC类和装饰器定义。抽象类可以包含抽象方法和普通方法。抽象方法是在抽象类中定义的方法,只有声明,没有实现。

2024-05-20 10:37:35 846

原创 通过langchain-chatchat来学习 - python的pydantic库

今天来看下下面代码画红框的三个地方。先看第16行,这块很简单,就是规范下包引入的范围。all是 Python 中的一个特殊变量,用于定义模块、类或包的公共接口。它在执行通配符导入(例如 from module import *)时只有 ApiModelWorker、ApiChatParams、ApiCompletionParams 和 ApiEmbeddingsParams 将被导入。未列在all中的任何内容都不会被导入。这对于控制模块或包的公共接口非常有用。

2024-05-19 10:04:17 1266 1

原创 通过langchain-chatchat来学习 - python如何规范传参

如何规范传参呢?我们经常会遇到给函数传参,因为顺序不对,导致参数传错位置的情况。python提供了新的传参方法,即在传参的时候,可以指定要传给哪个参数。那么显然这种方法更可靠和高效。那怎么才能规范开发人员严格按照这种方式传参呢?我们可以参考langchain-chatchat的方法规范之后,我们可以看到这种方式传参有很多好处,除了上面说的不会传错位置以外,我们还可以在不查看函数定义的情况下,清楚的知道传的参数都是做什么的

2024-05-18 09:45:00 452

原创 一起看langchain-chatchat代码 - 不同模型类的引入方法

了解了langchain-chatchat代码的必备知识之后,我们看代码轻松了许多,从这一期开始,我们正式开始看langchain-chatchat的代码。这一篇我们要讲的是langchain-chatchat是如何找到并实例化模型类的现在我们就能看懂这段代码了。我们看代码的时候可以更细节一些,遇到不明白的函数和流程最好不要囫囵吞枣的绕过去了。可以查查资料,弄明白。对了还要补一小段。下面这种写法会在 pop之后,键"a"就被删掉了。langchain-chatchat特别喜欢用这个写法。

2024-05-17 09:00:00 944 1

原创 吊打面试官之 - python多进程信号接收与处理

面试的时候经常会被问到process信号处理的一些细节,还有process启动的一些细节,如何吊打面试官,让他不敢还嘴呢?我们可以通过langchain-chatchat 的代码来详细解信号处理。

2024-05-16 11:09:33 1342

原创 看langchain代码之前必备知识之 - with、yield和@contextmanager

先来看下面的代码:acquire方法如下withyield下面,我们一起来学习这三个知识点yield是 Python 中一个关键字,用于构造一个生成器函数。生成器函数是一种特殊的函数,它可以在执行过程中多次返回一个值,每次返回后会暂停执行,然后再次调用时继续执行。生成器函数一般使用yield语句来实现这种功能。yield语句在生成器函数中的用法类似于return语句。不同之处在于,yield会将值返回给调用者,但不会终止函数的执行。

2024-05-15 09:00:00 1142

原创 看langchain代码之前必备知识之 - Python 多线程: threading

在之前的文章中,我们分别学习了python的多进程,协程。在langchain-chatchat里同时还运用了python的多线程模块。例如:如上图代码所示,在Python中,使用threading模块可以实现多线程。通过创建线程对象,我们可以在不同的线程中执行不同的任务,并且这些线程可以同时运行,而不是按照顺序执行。Python的多线程功能使得我们能够同时执行多个任务,从而提高程序的效率和响应性。使用threading模块可以方便地创建和管理线程,使得编写多线程程序变得简单。

2024-05-14 09:00:00 566 1

原创 看langchain代码之前必备知识之 - Python 多进程: multiprocessing (3)

上一篇文章介绍了如何启动和关闭多进程,其中使用了 multiprocessing的event来传递关闭信号,我们今天继续使用举例的方式,介绍它的使用。没有看过上一篇文章的朋友请查看上一篇文章。看langchain代码之前必备知识之 - Python 多进程: multiprocessing (2)我们这篇文章的代码是基于上一篇文章来修改的由此,我们就实现了进程的有序启动。代码如下,需要的朋友可以参考else:return ""

2024-05-13 11:10:09 584 2

原创 看langchain代码之前必备知识之 - Python 多进程: multiprocessing (2)

上一篇文章,我们了解到Python多进程是一种并行处理数据的方法,说到多进程,那肯定绕不开的话题就是如何进程间通信和事件传递来实现不同进程之间的数据交互和任务调度,不同语言有不同的实现方法在Python中,multiprocessing库也提供了一些用于进程间通信和事件传递的工具,如Queue和Event。下面的例子是直接仿造langchain-chatchat的setup.py里创建子进程的方式写的,目的是帮大家学完本文之后能很快看明白相关的代码。

2024-05-12 09:00:00 748 1

原创 看langchain代码之前必备知识之 - Python 多进程: multiprocessing (1)

之前,我们讲了python的协程,在langchain的代码里面,同时运用了python的多进程(如下面两张图)。我们一块来学习一下python的协程,同时,对比下多进程和协程的区别,以及他们的运用场景。multiprocessing 是 Python 的一个模块,用于实现进程间通信和并发执行。它提供了一个类似于 threading 模块的接口,但是使用进程而不是线程。通过 multiprocessing,可以并行执行多个任务,提高程序的性能。

2024-05-11 09:00:00 1452 1

原创 看langchain代码之前必备知识之 - Python的FastAPI:构建Web应用的利器

在看langchain的代码的时候,经常看见如下的代码里面的uvicorn app 其实就是我们今天要讲的Python的FastAPIFastAPI是一个快速(Fast)、现代(Modern)的Web框架,用于构建基于Python的API。它由Tiangolo开发,借鉴了其他流行框架(如Flask和Django)的优点,并引入了一些新的特性。FastAPI基于Starlette和Pydantic构建,利用了Python 3.6+中的异步功能,以及类型提示和注解,从而实现了卓越的性能和效率。

2024-05-10 15:33:36 943 1

原创 看langchain代码之前必备知识之 - Python 协程:异步编程的利器

langchain的源码中有很多异步操作,如下图,如果对python异步机制不了解,我们就无法看明白langchain的源码。Python 中的协程(coroutine)是异步编程的一种强大工具,可以用于编写高效的并发代码。在本文中,我们将以一个简单的示例代码为例,介绍 Python 中的协程及其使用方法。协程是一种轻量级的线程,可以在程序中实现并发执行的任务。与线程不同的是,协程是由程序员自行控制的,并且可以在运行时挂起和恢复,而不需要操作系统的干预。

2024-05-08 16:05:50 1426 1

原创 【图解】langchain-chatchat启动流程以及qwen-api模型调用原理

之前我们写了一篇文章在低性能机器上启动langchain-chatchat,我们通过debug看看在这种模式下是如何调用qwen-pai模型的,顺便一起来了解下langchain-chatchat的启动流程。

2024-05-08 10:50:36 858 1

原创 【debug图解】langchain-chatchat如何调用在线Embedding

上一篇文章介绍了怎么通过使用在线llm和在线Embedding这篇文章想给大家debug的方式演示langchain-chatchat是如何使用在线Embedding的langchain-chatchat包的层级非常多,看代码的时候需要耐心。看熟悉了,后面再想查找问题,就会简单的多。

2024-04-28 18:22:43 827 1

原创 电脑性能不足,如何体验langchain-chatchat呢?如何在低配云服务器里运行ai应用呢?

我的电脑性能不足,cpu和内存都比较落后,而且没有显卡。所以langchain-chatchat使用本地化模型和EMBEDDING启动之后电脑非常卡顿,经常宕机。此时如果还想二次开发langchain-chatchat,或者开发完成后,我们想部署在配置很低的云服务器里就很困难了。那如何解决这个问题呢如果我们没有很好的电脑也可以按上面的方法。轻松学习langchain-chatchat。同时我们可以在cpu、内存都很低的云服务器里运行我们写好的服务了。

2024-04-26 15:16:38 538 2

原创 Langchain-Chatchat windows上 运行init_database.py 报错 ModuleNotFoundError: No module named ‘pwd‘

Langchain-Chatchat 在windows上运行python init_database.py --recreate-vs 这一段的时候报错 ModuleNotFoundError: No module named ‘pwd‘。这里我们来说下是怎么解决的

2024-04-18 10:40:25 453 1

原创 langchain-chatchat在window上使用cpu运行Qwen-1_8B-Chat时遇到ERROR: object of type ‘NoneType‘ has no len()

langchain-chatchat在window上使用cpu运行Qwen-1_8B-Chat时遇到ERROR: object of type ‘NoneType‘ has no len(),这个问题其实是因为"addmm_impl_cpu_" not implemented for 'Half’这个根本原因导致的,也就是cpu不支持half精度。网络上大部分文章都让换gpu跑模型。但是有些同学使用的是没有显卡的机器在跑。所以写了这篇文章,帮助大家彻底解决这个问题。

2024-04-17 17:09:24 1170 1

langchain-chatchat在window上使用cpu运行Qwen-1-8B-Chat时遇到ERROR: object

langchain-chatchat在window上使用cpu运行Qwen-1_8B-Chat时遇到ERROR: object of type ‘NoneType‘ has no len(),这个问题其实是因为"addmm_impl_cpu_" not implemented for 'Half’这个根本原因导致的,也就是cpu不支持half精度。 网络上大部分文章都让换gpu跑模型。但是有些同学使用的是没有显卡的机器在跑。所以写了这篇文章,帮助大家彻底解决这个问题。 请按照这篇文章把资源里的文件精确替换到相应的位置即可 https://blog.csdn.net/kljyrx/article/details/137878295

2024-04-26

VRML 节点参考手册

VRML 节点参考, 详细介绍了各个节点的用法,可以在编写VRML 的时候参考

2009-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除