- 博客(35)
- 收藏
- 关注

原创 【RAG】向量?知识库的底层原理:向量数据库の技术鉴赏 | HNSW(导航小世界)、LSH、K-means
哈希碰撞:由于输入是固定长度的数据,而输出是固定长度的哈希值,根据鸽巢原理,必然会出现数据不同而哈希值相同的情况,这叫碰撞。- 正常而言,哈希算法要尽可能减少碰撞的发生,而(对向量)位置敏感哈希函数-LSH则相反,尽可能让位置相近的数据发生碰撞,然后根据哈希碰撞来进行分组,构建方法:随机划出直线分割平面,两面的点分别增加意味0或1来表示
2025-05-03 18:37:05
905
1

原创 你知不知道DeepSeek对话中像打字机一样的流式输出效果是怎么实现的?AI聊天项目实战经验:流式输出的前后端完整实现!(RAG,Langchain,Python)
来看这条简单清晰的逻辑链:LLMs_chain.astream(langchain中chain的API:流式输出LLM的一个个回复块「原料chat_sew.stream_chat (生成器,转换chunk为初步的SSE格式字典「初步加工产品)stream_response_generator(生成器,转换SSE协议字符串丨打包成快递)StreamingResponse(FastAPI用于流式传输响应体的响应类,以SSE协议发送数据块到客户端|快递员)-> 「前端
2025-04-22 14:56:54
1614
3
原创 【Python】魔术方法是真的魔法!(第四期)
方法更多地定义在描述符类(descriptor class)中,它作为一个 hook,在构建类实例时被调用,主要用于赋值和初始化类的name属性。"""一个数据描述符,在所有者类创建时设置其名称。"""self.name = None # 将由 __set_name__ 设置print(f"RevealedAccess.__set_name__ 被调用: owner=class RevealedAccess : """一个数据描述符,在所有者类创建时设置其名称。
2025-05-22 16:54:37
1132
原创 【Python】魔术方法是真的魔法!(第三期)
魔术方法是在尝试删除对象属性时被调用。它不会在对象正常生命周期结束时被调用,而是在使用。关键字删除属性时执行。该方法没有返回值,但在其中可以进行一些操作,如打印提示信息。),则当读取不存在属性时,程序将不会出现错误,而是返回预设的值。对存储在类级别的字典中,使得所有该类的对象共享这些自定义属性。魔术方法是在尝试访问对象不存在的属性时被调用的。来实现默认行为,但也支持自定义实现,例如将。,当设置对象属性时会被调用。函数时,如果要恢复其默认行为,应使用。函数,并在其中返回特定值(如。魔术方法有两个参数,
2025-05-18 10:11:14
1002
原创 【Python】魔法方法是真的魔法! (第二期)
hash自定义__eq__方法后,默认__hash__会被删除需要同时自定义__hash__方法必须保证相等对象具有相同hash值# 只定义了 __eq__,没有定义 __hash__
2025-05-17 20:11:13
1076
原创 【Python】EAFP?请求原谅比请求允许容易?
与其小心翼翼地预测所有可能的失败,不如相信代码大多数时候能正常工作,当确实出错时,优雅地处理异常。这正是 EAFP 哲学的精髓。
2025-05-16 13:41:49
1080
原创 【Python】【面试凉经】Fastapi为什么Fast
FastAPI 它优越于其他一些主流web框架像 django或 flask 的这个点在哪里? 我:
2025-05-15 20:57:30
1265
原创 【Python】【面试凉经】上下文管理器这一块,你讲一下你的见解
self.start = time.time() # 记录开始时间class Timer : def __enter__(self) : self . start = time . time() # 记录开始时间 return self def __exit__(self , * args) : print(f"Elapsed: {time . time() - self . start } sec") with Timer() : time . sleep(1.5) # 会输出经过的时间。
2025-05-15 17:11:07
533
原创 【Python】小子!是魔术方法!
一面:说一说你对魔术方法的理解。我:魔术方法是真的魔法!本系列将揭晓魔术方法与Python的鸭子类型哲学的巧妙绝伦
2025-05-13 09:32:28
1587
1
原创 【Python】魔法方法是真的魔法! (第一期)
__new__和__init__分别用于对象的创建和初始化,__new__控制对象的创建逻辑,而__init__用于初始化对象。__str__和__repr__用于返回对象的字符串表示,前者注重可读性,后者提供更详细的信息。__format__用于自定义对象的格式化输出。__bin__用于返回对象的二进制表示。__del__作为析构函数,用于对象释放时的清理工作,但由于Python的垃圾回收机制,其使用并不直观。这些魔术方法在特定场景下提供了对对象行为的精细控制。
2025-05-13 09:28:37
299
原创 【Python】包了一个闭包,Python解释器偷偷干了什么
当然它比较神奇的地方在于:即使list_appender的调用结束了,甚至对list_appender的引用都没有了,这个闭包变量它依然能活着,因为函数对象`appender`包含了对闭包的引用。
2025-05-09 13:09:45
1039
原创 【RAG】Milvus、Pinecone、PgVector向量数据库索引参数优化
### IVF类索引关键参数(基于聚类算法)1. **nlist** (倒排列表数量): - 决定将向量空间划分为多少个聚类中心 - 值越大搜索越精确但耗时越长 - 推荐值: 通常设置为数据量的4√n到n/1000之间 - 例如: 1百万数据量可设nlist=1000到40002. **nprobe** (搜索时探查的聚类数量): - 决定搜索时检查多少个最近邻的聚类 - 值越大结果越精确但速度越慢 - 推荐值: 通常为nlist的1%~10% - 例如
2025-05-09 09:50:32
1440
原创 【Python】import 的时候,发生了什么…
在Python中,什么是`module`和`package`?如何导入一个包含子包的`package`? `Module` 是Python运行时的概念,它是一个独立的命名空间,包含其他Python对象,通常对应一个`.py`文件。而 `package` 则是一种特殊的`module`,它除了包含自身模块外,还可以包含其他`sub package`和`module`,并且在操作系统层级上,一个`package`对应的是一个文件夹,其中可以有多个文件和子文件夹。可以使用`import package_nam
2025-05-07 10:13:19
425
原创 【面试官:在你的项目中你是怎么实现混合检索的?我:先这样再那样
为什么要引入`BM25`?一开始项目是只用向量检索的,有一次我问了一个问题“重排序是什么?”,八条向量检索都没有捕获到“重排序”片段,因为在原文中,“重排序”也只出现了一次,在一个小点中一笔带过。所以光靠向量检索不能够捕捉到这样微小的字眼。我们可以看到……
2025-05-06 10:21:38
1192
原创 【Python】一直没搞懂生成器是什么。。
上期我们讲解了迭代器这期我们来讲讲它的好兄弟——生成器### 生成器 (Generator)?生成器是一种特殊的 **`迭代器`** (`Iterator`)。**迭代器** 是你可以逐个访问其元素的对象(比如在 `for` 循环中使用)。列表、元组、字典、字符串等都是可
2025-05-04 15:32:23
676
原创 【Python】一直没搞懂迭代器是什么。。
iterable是个容器,可以提供iterator,可以理解为完整的链表或者链表的表头;iterator是一个可以指向下一个对象的对象,可以理解为链表的一个单元;两者结合弥补了python不能用指针的缺陷,非常适合在链表这种数据结构中使用;为什么iterator最好也是iterable,是因为这样可以使得每一个子链都可以被调用。
2025-05-04 11:43:19
882
原创 现在让我们来解读协程 coroutine. co 常是一个表示:“一起“的前缀,如cooperate ,routine 有 惯例,例行程序 的意思。怎么和协程的功能作用结合起来理解呢?
易混淆为并行(Parallel),而!**Coroutine = Co(协作) + Routine(例程)**,这一命名完美体现了其核心设计思想。以下是逐层解析:---#### **1. 词根与字面意义**- **Co-**(前缀): - 源自拉丁语 **"com-"**(共同、一起),如 **cooperate(合作)**、**coexist(共存)**。协程本质是。
2025-05-02 20:34:55
498
原创 Langchain,为何要名为langchain?
`langchain` 是一个大语言模型开发框架。我的理解中,`lang` 是词根"语言",chain是单词"链",`langchain` 便是将语言模型和组件串联成链的框架。而 `langchain` 的图标是一只鸟和一条链,一条链我能理解,为什么会有一只鸟来代表 `lang` 呢?
2025-05-02 12:38:49
872
原创 【氵】async\awiait异步是啥?为啥就能高并发?多进程多线程\事件循环哪个牛?
Q3, Python,特别是fastapi也拥有async\awiait 的异步处理机制,如果Python是单线程语言(我不清楚这点),那么它与nodejs相比,并发能力是不是同一水平? Q4,java是多线程,java是通过建立多线程来提高并发度,所以java的并发能力高于nodejs这类单线程语言,我的理解正确吗? Q5 GO的并发能力似乎很强,它的实现机制是类似java,还是nodejs?
2025-05-01 19:26:17
827
原创 【RAG】Context Precison 提高33.3%!重排序是什么?基于LangChain的重排序实现
**打个比方** 想象你在图书馆找书: 1. **第一步(检索)**:图书管理员快速从书架上抱来20本可能相关的书(基于书名/关键词的粗略匹配)。 2. **第二步(重排序)**:你翻开每本书的目录,仔细对比哪几本**真正解答你的问题**,留下3本最相关的(高精度筛选)。 **重排序就是那个“仔细翻目录”的过程**,确保最终交给大脑(LLM)的书是精华。
2025-05-01 19:09:35
695
原创 面试官:你会怎么做前端web性能优化?我:.%*&.!
>面试话语:例如:页面有一个压缩图片功能,而这个功能的第三方库很大;> 这个功能用户不会立即使用、甚至可能不使用。将该功能异步加载
2025-04-30 19:22:01
1039
原创 CDN是啥?十分钟让Cloudflare免费为你的网站做CDN加速!
朋友你好你是否觉得自己的网站加载有点慢?用户等待时间长,体验不佳?不慌,今天我们就来聊聊网站加速的利器——CDN,并且手把手教你如何利用 Cloudflare 的免费服务,在十分钟内给你的网站加上"加速器"!理解 CDN 是什么,以及它为什么能让网站飞起来。掌握使用 Cloudflare 为你的网站(特别是像我们这个 Vue + Vite + Nginx 项目)配置免费 CDN 的核心步骤。挑选一个 CDN 服务商(我们就选 Cloudflare)。在 CDN 平台配置你的源站信息。
2025-04-29 09:22:43
984
原创 【RAG知识库问答】报错排查:新增模型混用提示【用户反馈与优化-2025.04.28】
最近写了一个知识库问答系统的项目,部署上线后把链接写在了简历里,然后丢大脸了:各种报错。~~明明我自己用的时候还好好的~~ 连忙加班加点地改bugの悲惨故事。 所以真心感慨大家在项目上线前,一定要找你的小白朋友试试项目,便能很快发现你的项目缺什么,会出什么差错,破除【知识的诅咒】错误和失败不是终点,远眺,它们是成功的转折点。祝愿大家都能收到心仪的 offer.问题不~~是一般的~~大😎,正文开始⬇️
2025-04-28 22:40:17
2243
1
原创 【MCP】哎只能在cursor中用MCP吗?NONONO!三分钟教你自己造一个MCP客户端!
至此我们就完成了一个自己的 MCP 客户端了### 好了,现在你可以在简历上写上:精通 MCP 了 [doge]
2025-04-26 20:02:40
1248
原创 巨坑!解决 Windows 上 FastAPI/Asyncio 子进程 `NotImplementedError` 问题File “C:\Python310\lib\asyncio\base_even
要解决这个问题,需要借助神秘魔法【ProactorEventLoop】
2025-04-26 18:48:12
967
原创 【Langchain】RAG 优化:提高语义完整性、向量相关性、召回率--从字符分割到语义分块 (SemanticChunker)
这是因为`RecursiveCharacterTextSplitter` 的局限性,它将原本相关的文本切成了两个部分,第一个部分被召回,而第二个部分因为包含的信息更少,其向量相关性也下降了,没有被召回。这就导致了检索质量不理想,因为`RecursiveCharacterTextSplitter`既影响了**语块完整性**,也影响了语块的**向量相关性**。
2025-04-25 17:53:26
1140
原创 关于nginx,负载均衡是什么?它能给我们的业务带来什么?怎么去配置它?
想象一下一个超市只有一个收银台,高峰期肯定会排起长队。负载均衡就像是超市增开了多个收银台,并有一个调度员指挥顾客去当前最空闲或下一个可用的收银台结账。
2025-04-24 21:43:19
1386
原创 Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?
和 Java Bean 的“控制反转 (IoC)”异曲同工?**这是一个有趣的类比!可以说它们在**思想层面**有相似之处,即**责任的转移**或**控制权的转移**,但它们应用的领域和解决的问题是完全不同的。* **控制反转 (Inversion of Control, IoC):** * **领域:** 软件设计、对象之间的依赖关系管理。 * **核心思想:** 将创建和管理对象(Bean)的**控制权**,从代码本身(比如 `new MyObject()`) **反
2025-04-24 21:32:31
1203
原创 怎么把我的前后端项目通过docker部署到云服务器【手把手教学】
上文我们讲解了docker的概念和基本操作,演示了本地项目部署到本地接下来我们将手把手演示,将你的前后端项目通过docker部署到云服务器。
2025-04-23 09:59:12
779
原创 【docker0基础教学】手把手教你将你的本地项目进行docker部署
在Dockerfile的最后我们会用到CMD来指定**当Docker容器运行起来以后要执行的命令**。大家需要注意这里容器和镜像的区别,并且它和我们之前讲到的RUN不一样:**RUN是创建镜像时候使用的,而CMD是运行容器的时候使用的。**
2025-04-22 17:45:47
799
原创 分享开源项目oneapi的部分API接口文档【oneapi?你的大模型网关】
OneAPI开源项目的地址->最近在学习oneapi,阅读了部分源码,把接口文档分享给大家。
2025-04-15 09:20:57
1137
2
原创 你想不想让你写的博客一键发布多平台?!
*OpenWrite是什么:**OpenWrite是一款自媒体工具,它提供一键发布功能,可以帮你将文章统一发布到各个平台 ,包括 CSDN 、 SegmentFault、简书、今日头条等等。
2025-04-12 15:37:37
1083
1
原创 【RAG】如何让你的RAG-Langchain项目持久化对话历史\保存到数据库中
项目目前使用的 ChatMessageHistory 是一个内存中的历史记录存储方式。MongoDBChatMessageHistory (适用于本项目技术栈中的 MongoDB)
2025-04-09 21:42:40
570
原创 使用OllamaEmbeddings时,报错ollama._types.ResponseError(status code:502)和(status code:500)
第一步:set OLLAMA_HOST=0.0.0.0第二步:ollama serve502问题解决。
2025-03-31 14:48:26
603
1
RAGLangchain项目 BM25与向量语义检索混合策略设计:提升长尾关键词捕获能力及检索精度了文档的核心内容
2025-05-05
【Python编程】深入解析迭代器与生成器的工作原理及应用场景:从基础概念到自定义实现了Python中的迭代
2025-05-04
【Python编程】深入解析迭代器与可迭代对象:构建自定义链表迭代系统及其实现方法
2025-05-04
【向量数据库与近似最近邻算法】向量?知识库的底层原理 多维特征表示及高效搜索方法综述:涵盖K-Means、LSH、HNSW等技术原理与应用场景
2025-05-03
【网站加速技术】基于Cloudflare的CDN加速系统配置与优化:提升网站性能和用户体验的方法步骤
2025-04-29
怎么把我的前后端项目通过docker部署到云服务器【手把手教学】大学生原创github.com/hbchen7
2025-04-23
手工原创0基础手把手教你将你的本地项目进行docker部署 基于Docker的本地项目部署指南:Python应用容器化与多容器编排实践
2025-04-22
langchain项目如何实现流式输出经验分享前端流式输出(AI,RAG,fastapi,Vue,python,SSE)-watermark.pdf
2025-04-22
9787302583127《Python网络程序设计(微课版)》-课后习题解答
2025-04-19
【OneAPI开源项目】API接口文档:用户管理、令牌管理和模型渠道管理功能详解
2025-04-19
你想不想让你写的博客一键发布多平台?!【粘贴图片自动上传图床~一次撰写多端发布】【经验分享-完全免费】基于OpenWrite与Picgo的多平台博客发布系统:实现Markdown文章与图片自动化管理
2025-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人