
langchain-chatchat
文章平均质量分 89
做个天秤座的程序猿
喜欢研究langchain和langchain-chatchat
展开
-
【debug图解】langchain-chatchat如何调用在线Embedding
上一篇文章介绍了怎么通过使用在线llm和在线Embedding这篇文章想给大家debug的方式演示langchain-chatchat是如何使用在线Embedding的langchain-chatchat包的层级非常多,看代码的时候需要耐心。看熟悉了,后面再想查找问题,就会简单的多。原创 2024-04-28 18:22:43 · 1764 阅读 · 1 评论 -
电脑性能不足,如何体验langchain-chatchat呢?如何在低配云服务器里运行ai应用呢?
我的电脑性能不足,cpu和内存都比较落后,而且没有显卡。所以langchain-chatchat使用本地化模型和EMBEDDING启动之后电脑非常卡顿,经常宕机。此时如果还想二次开发langchain-chatchat,或者开发完成后,我们想部署在配置很低的云服务器里就很困难了。那如何解决这个问题呢如果我们没有很好的电脑也可以按上面的方法。轻松学习langchain-chatchat。同时我们可以在cpu、内存都很低的云服务器里运行我们写好的服务了。原创 2024-04-26 15:16:38 · 956 阅读 · 5 评论 -
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 · 801 阅读 · 1 评论 -
知识库的创建(5) - FaissKBService
上一篇文章,我们追到了这里,了解了kb是通过KBServiceFactory产生的一个对象,而且这个对象根据类型不同,分别会实例化出类似 FaissKBService和ChromaKBService这样的向量数据库对象。之前在向量索引的文章里,我们讲过Faiss和Chroma这两种向量数据库,并且简易写了运用他们的代码。今天我们看看langchain-chatchat是 怎么封装的self,kb_name: 知识库的名称,是一个必需的字符串参数。: 向量存储的名称,是一个可选字符串参数。原创 2024-06-20 09:45:19 · 1188 阅读 · 0 评论 -
知识库的创建(4) - KBServiceFactory:获取不同类型知识库服务的工厂类
上一篇我们在里看到了,这一篇我们一起来看看类是一个用于获取不同类型知识库服务的工厂类。该类提供了静态方法,根据传入的知识库名称和向量存储类型,返回对应的知识库服务实例。以下是对该类及其方法的详细介绍。提示:以下是本篇文章正文内容,下面案例可供参考类通过静态方法和,提供了一种灵活且统一的方式来获取不同类型的知识库服务实例。根据向量存储类型和知识库名称,可以创建并返回合适的知识库服务,为知识库的管理和使用提供了极大的便利。另外,它实际的返回值是根据 vector_store_type 的不同而不同的,例如。原创 2024-06-20 00:30:00 · 1172 阅读 · 0 评论 -
知识库的创建(3) - 知识库上传入口update_docs
langchain-chatchat用到的底层函数很多,为了大家思路更清晰,我们换个顺序,先从上传文档+更新、保存向量库的入口 update_docs 开始看起。是一个用于更新知识库文档的函数。这个函数能够处理多个文件,并将它们转换为知识库文档,还可以处理自定义的文档并将其向量化。通过上述步骤,函数能够有效地更新知识库中的文档,并提供处理失败的详细信息,以便于后续的调试和处理。原创 2024-06-19 01:00:00 · 954 阅读 · 0 评论 -
知识库的创建(2) - make_text_splitter 生成文件分割器
我们一起来详细解析方法在自然语言处理和文本分析中,文本分割是一项重要的任务,尤其是当处理大型文档或连续文本时。方法提供了一种灵活且可定制的方式,根据参数获取特定的文本分割器。本文将详细解析该方法的各个部分。):"""根据参数获取特定的分词器"""参数解析: 分割器的名称,默认为。chunk_size: 每个文本块的大小,默认为CHUNK_SIZE。: 文本块之间的重叠部分,默认为。llm_model: 使用的语言模型,默认为。原创 2024-06-18 00:15:00 · 1363 阅读 · 0 评论 -
知识库的创建(1) - KnowledgeFile文件加载和分割
前几篇讲了向量库的创建和索引的创建,我们可以去langchain-chatchat里看看,作者实现的类是怎么写的,可以学习一下作者的封装方法。我们可以先来看看类。类用于管理知识库目录中的文件,提供文件加载、文本分割等功能。它需要文件存在于磁盘上才能进行向量化等操作。类提供了对知识库中文件的管理功能,包括文件的加载、文本的分割和处理等。通过该类,可以方便地对知识库中的文件进行操作,并进行进一步的自然语言处理和分析。原创 2024-06-17 17:25:08 · 1536 阅读 · 0 评论 -
异步编程函数用法 - starlette.concurrency里的run_in_threadpool
看langchain-chatchat代码的时候看到这一段,本来打算一眼过,忽然发现这个名字上看起来是线程池的地方居然可以用 await。可以把协程的编程方法用在这里,很神奇。看了下引入的包,追踪进去 实际上是这样那么我们就学习一下这个的用法实现了多线程和协程的融合,通过将阻塞的同步任务委托给线程池执行,并使用await等待任务完成,使得在异步编程环境中能够有效处理同步操作。这样既能利用线程池的并发能力,又能保持事件循环的高效运行,从而提高整体应用程序的性能和响应能力。原创 2024-05-23 09:00:00 · 1523 阅读 · 0 评论 -
一起看langchain-chatchat代码 - python的线程安全和缓存池
我们经常遇见各种池的概念,数据库连接池、消息队列池等。我们今天一起来看下缓存池的运用。线程安全是指多个线程同时访问一个对象时,不会产生任何不正确的结果或不一致的状态。在Python中,可以通过使用锁或其他同步机制来实现线程安全。Python中的有序字典是一种数据结构,它是字典(无序的键值对集合)的一个子类。与普通字典不同的是,有序字典会记住元素添加的顺序,并且可以按照这个顺序进行遍历。元素的插入顺序会被记住,不论之后是否进行了删除或修改操作。可以通过键来访问元素,与普通字典相同。原创 2024-05-22 14:15:28 · 1083 阅读 · 0 评论 -
吊打面试官 - python如何实现工厂模式
工厂模式可以提供一个统一的接口来封装对象的创建过程,降低客户端代码与具体对象之间的耦合性,并隐藏对象的创建细节,提高了系统的灵活性、可维护性、安全性和稳定性。原创 2024-05-22 09:00:00 · 1463 阅读 · 0 评论 -
跟着langchain-chatchat学python - python类的装饰器@staticmethod和@classmethod,以及方法参数cls和self
上一篇文章讲抽象类的时候,我们看的langchain-chatchat 代码里,往下翻还有两个很有意思的装饰器@staticmethod和@classmethod,那么他们分别有什么作用呢在Python中,@classmethod是一个装饰器,它用于定义一个类方法。类方法是属于整个类而不是实例的方法。类方法可以通过类本身被调用,也可以通过实例被调用。@classmethod装饰器的作用是将一个普通方法转换为类方法,并且将类本身作为第一个参数传递给该方法。原创 2024-05-21 09:00:00 · 1539 阅读 · 0 评论 -
跟着langchain-chatchat学python - python的抽象类
大家在看到langchain-chatchat这里的时候可能会有些疑惑,这个ABC感觉很神奇,追踪进去的时候可能感觉更疑惑了。其实这是python实现抽象类的一种方式。我们今天就来学习python的一个重要知识点 - 抽象类抽象类是一种特殊的类,它无法被实例化,只能被用作其他类的基类。抽象类主要用于定义接口和规范子类的行为。Python中的抽象类通过abc模块提供的ABC类和装饰器定义。抽象类可以包含抽象方法和普通方法。抽象方法是在抽象类中定义的方法,只有声明,没有实现。原创 2024-05-20 10:37:35 · 958 阅读 · 0 评论 -
通过langchain-chatchat来学习 - python的pydantic库
今天来看下下面代码画红框的三个地方。先看第16行,这块很简单,就是规范下包引入的范围。all是 Python 中的一个特殊变量,用于定义模块、类或包的公共接口。它在执行通配符导入(例如 from module import *)时只有 ApiModelWorker、ApiChatParams、ApiCompletionParams 和 ApiEmbeddingsParams 将被导入。未列在all中的任何内容都不会被导入。这对于控制模块或包的公共接口非常有用。原创 2024-05-19 10:04:17 · 1493 阅读 · 1 评论 -
通过langchain-chatchat来学习 - python如何规范传参
如何规范传参呢?我们经常会遇到给函数传参,因为顺序不对,导致参数传错位置的情况。python提供了新的传参方法,即在传参的时候,可以指定要传给哪个参数。那么显然这种方法更可靠和高效。那怎么才能规范开发人员严格按照这种方式传参呢?我们可以参考langchain-chatchat的方法规范之后,我们可以看到这种方式传参有很多好处,除了上面说的不会传错位置以外,我们还可以在不查看函数定义的情况下,清楚的知道传的参数都是做什么的原创 2024-05-18 09:45:00 · 526 阅读 · 0 评论 -
一起看langchain-chatchat代码 - 不同模型类的引入方法
了解了langchain-chatchat代码的必备知识之后,我们看代码轻松了许多,从这一期开始,我们正式开始看langchain-chatchat的代码。这一篇我们要讲的是langchain-chatchat是如何找到并实例化模型类的现在我们就能看懂这段代码了。我们看代码的时候可以更细节一些,遇到不明白的函数和流程最好不要囫囵吞枣的绕过去了。可以查查资料,弄明白。对了还要补一小段。下面这种写法会在 pop之后,键"a"就被删掉了。langchain-chatchat特别喜欢用这个写法。原创 2024-05-17 09:00:00 · 1482 阅读 · 1 评论 -
吊打面试官之 - python多进程信号接收与处理
面试的时候经常会被问到process信号处理的一些细节,还有process启动的一些细节,如何吊打面试官,让他不敢还嘴呢?我们可以通过langchain-chatchat 的代码来详细解信号处理。原创 2024-05-16 11:09:33 · 1499 阅读 · 0 评论 -
看langchain代码之前必备知识之 - Python 多进程: multiprocessing (1)
之前,我们讲了python的协程,在langchain的代码里面,同时运用了python的多进程(如下面两张图)。我们一块来学习一下python的协程,同时,对比下多进程和协程的区别,以及他们的运用场景。multiprocessing 是 Python 的一个模块,用于实现进程间通信和并发执行。它提供了一个类似于 threading 模块的接口,但是使用进程而不是线程。通过 multiprocessing,可以并行执行多个任务,提高程序的性能。原创 2024-05-11 09:00:00 · 1650 阅读 · 1 评论 -
看langchain代码之前必备知识之 - Python 多进程: multiprocessing (3)
上一篇文章介绍了如何启动和关闭多进程,其中使用了 multiprocessing的event来传递关闭信号,我们今天继续使用举例的方式,介绍它的使用。没有看过上一篇文章的朋友请查看上一篇文章。看langchain代码之前必备知识之 - Python 多进程: multiprocessing (2)我们这篇文章的代码是基于上一篇文章来修改的由此,我们就实现了进程的有序启动。代码如下,需要的朋友可以参考else:return ""原创 2024-05-13 11:10:09 · 696 阅读 · 2 评论 -
看langchain代码之前必备知识之 - Python 多线程: threading
在之前的文章中,我们分别学习了python的多进程,协程。在langchain-chatchat里同时还运用了python的多线程模块。例如:如上图代码所示,在Python中,使用threading模块可以实现多线程。通过创建线程对象,我们可以在不同的线程中执行不同的任务,并且这些线程可以同时运行,而不是按照顺序执行。Python的多线程功能使得我们能够同时执行多个任务,从而提高程序的效率和响应性。使用threading模块可以方便地创建和管理线程,使得编写多线程程序变得简单。原创 2024-05-14 09:00:00 · 722 阅读 · 1 评论 -
看langchain代码之前必备知识之 - with、yield和@contextmanager
先来看下面的代码:acquire方法如下withyield下面,我们一起来学习这三个知识点yield是 Python 中一个关键字,用于构造一个生成器函数。生成器函数是一种特殊的函数,它可以在执行过程中多次返回一个值,每次返回后会暂停执行,然后再次调用时继续执行。生成器函数一般使用yield语句来实现这种功能。yield语句在生成器函数中的用法类似于return语句。不同之处在于,yield会将值返回给调用者,但不会终止函数的执行。原创 2024-05-15 09:00:00 · 1341 阅读 · 0 评论 -
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 · 1626 阅读 · 3 评论