- 博客(58)
- 收藏
- 关注
原创 《Learning Langchain》阅读笔记11-RAG(7)索引优化:RAPTOR方法和ColBERT方法
介绍两种方法:RAPTOR:用于树状检索的递归抽象处理,ColBERT:优化嵌入,这两种方法都更适用于多个文档检索的情况,尤其是第二个ColBERT方法。
2025-04-28 12:53:18
931
原创 《Learning Langchain》阅读笔记10-RAG(6)索引优化:MultiVectorRetriever方法
介绍langchain中RAG索引优化的MultiVectorRetriever方法
2025-04-27 17:30:37
1016
原创 《Learning Langchain》阅读笔记9-RAG(5)跟踪文档的更改
首先,你需要创建一个记录管理器(record manager),用于追踪哪些文档之前已经被索引过。然后,使用 index 函数 将你的向量存储(vector store)与新的文档列表进行同步。在这个示例中,我们使用的是增量模式(incremental mode),因此任何与之前已有文档 ID 相同的新文档,都会用新版本进行替换。
2025-04-26 13:18:38
570
原创 《Learning Langchain》阅读笔记8-RAG(4)在vector store中存储embbdings
本小节我们学习了如何在vector store中存储embeddings,并且使用了PostgreSQL数据库。通过docker连接数据库,还通过插件PGVector这个为 PostgreSQL 数据库设计的向量(embedding)存储与相似度搜索插件,使得你可以在 PostgreSQL 中直接存储向量,并进行高效的相似度检索(vector similarity search)。最后还使用了免费的可视化PostgreSQL数据库的软件pgAdmin对数据库的tables中的数据进行查看。
2025-04-25 18:17:37
1311
原创 《Learning Langchain》阅读笔记7-RAG(3)生成embeddings
在前面的部分中,我们已经学习了如何将文档读取为文本以及如何将文本切分为chunks,这一节我们来讲讲如何生成文本嵌入embeddings。
2025-04-24 11:51:05
396
原创 《Learning Langchain》阅读笔记6-RAG(2)将文本分成块
上一章中,我们已经将文档转换为文本,在langchain_community.document_loaders中调用合适的loader,以加载不同类型的文件比如.txt、.pdf等。下一步,我们将要将文本分为chunks,也就是将文本分为块。
2025-04-23 11:35:15
1053
原创 《Learning Langchain》阅读笔记5-RAG(1)将文档转换为文本
在上一章中,我们学习了使用 LangChain 创建 LLM 应用程序的重要构建块。我们还构建了一个简单的 AI 聊天机器人,它由发送给模型的提示和模型生成的输出组成。但是,这个简单的聊天机器人存在一些主要限制。如果你的使用场景需要模型未曾训练过的知识怎么办?例如,假设你想使用 AI 询问有关公司的问题,但信息包含在私人 PDF 或其他类型的文档中。
2025-04-21 17:33:33
630
原创 《Learning Langchain》阅读笔记4-基于 Gemini 的 Langchain:组装 LLM 应用的多个部分
到目前为止,我们所了解的关键组件是LangChain框架的基本构建块。这就引出了一个关键问题:我们如何有效地结合它们来构建LLM应用程序?
2025-04-20 16:40:46
1059
原创 《Learning Langchain》阅读笔记3-基于 Gemini 的 Langchain如何从LLMs中获取特定格式
在某些情况下,我们需要 LLM 生成结构化输出,即以机器可读格式(如 JSON、XML 或 CSV)或甚至以编程语言(如 Python 或 JavaScript)生成的输出。当我们打算将该输出传递给其他代码时,这非常有用,使 LLM 可以在更大的应用程序中发挥作用。
2025-04-18 12:48:02
534
原创 《Learning Langchain》阅读笔记2-基于 Gemini 的 Langchain PromptTemplate 实现方式
本文将使用Gemini实现《Learning Langchain》中的PromptTemplate 实现方式,替代书中的调用openai API,白嫖太香了!
2025-04-17 12:29:28
950
原创 jupyter中切换Anaconda虚拟环境
jupyter中切换虚拟环境,查看anaconda中有哪些虚拟环境切换并且查看是否已经有ipykernel,下载langchain
2025-04-15 11:01:33
378
原创 《Learning Langchain》阅读笔记1-前置知识
《Learning Langchain》LLM基本知识,本文可能会一笔带过,着重记录那些需要理解记忆的知识。
2025-04-14 17:48:54
759
原创 A Brief History: from GPT-1 to GPT-3
This is my reading notes of 《Developing Apps with GPT-4 and ChatGPT》.In this section, we will introduce the evolution of the OpenAI GPT medels from GPT-1 to GPT-4.In mid-2018, OpenAI published a paper titled “Improving Language Understanding by Generative
2025-03-26 20:45:12
1406
原创 LeetCode hot 100 每日一题(17)——160.相交链表
这是一道难度为简单的题目,让我们来看看题目描述:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构。104105。
2025-03-26 10:48:57
1002
原创 GPT-4 and ChatGPT Essentials
This is my reading notes of 《Developing Apps with GPT-4 and ChatGPT》.
2025-03-24 21:47:35
1391
1
原创 LeetCode hot 100 每日一题(15)——48.旋转图像
这是一道难度为中等的题目,让我们来看看题目描述:给定一个 n × n 的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。
2025-03-24 20:14:29
479
原创 LeetCode hot 100 每日一题(14)——54.螺旋矩阵
你可以试着将这个螺旋遍历过程拆分成四个简单的步骤,每一步只关注一个方向,并记住一个顺时针的遍历顺序:从左到右、从上到下、从右到左、从下到上。想象矩阵就像一层层的“洋葱皮”。每一层的遍历就是围绕这个“洋葱”走一圈,你只需要记住当前层的边界,然后按照顺时针方向依次执行四个步骤。你可以编一个简单的口诀,比如“左到右,上到底,右到左,下到上”。每完成一圈后,再调整边界,重复这个过程。
2025-03-24 19:46:12
559
原创 LeetCode hot 100 每日一题(13)——73. 矩阵置零
这是一道难度为中等的题目,让我们来看看题目描述:给定一个_m_ x _n_的矩阵,如果一个元素为,则将其所在行和列的所有元素都设为。请使用算法。231231。
2025-03-22 11:18:36
807
原创 LeetCode hot 100 每日一题(12)——238.除自身以外数组的乘积
这是一道难度为中等的题目,我们来看看题目描述:给你一个整数数组nums,返回 数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据数组nums之中任意元素的全部前缀元素和后缀的乘积都在整数范围内。请且在O(n)时间复杂度内完成此题。
2025-03-20 20:16:15
672
原创 LeetCode hot 100 每日一题(11)——189. 轮转数组
这是一道难度为中等的题目,让我们来看看题目描述:给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。向右轮转 1 步:向右轮转 2 步:向右轮转 3 步:向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]105−231231105。
2025-03-20 19:37:54
914
原创 LeetCode hot 100 每日一题(10)——56. 合并区间
这是一道难度为中等的题目,我们来看看题目描述:以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].[[1,5]]区间 [1,4] 和 [4,5] 可被视为重叠区间。104starti104说人话解释:求重叠的区间并集,然后返回所有的并集。
2025-03-17 16:05:00
1078
原创 LeetCode hot 100 每日一题(9)——560. 和为 K 的子数组
子串和子数组数据结构不同:子数组:指的是数组中连续的一段元素。数组可以是数字、对象或其他类型的集合。子串:专指字符串中连续的一段字符序列。应用场景不同:子数组:常用于解决数组问题,比如求连续子数组的和、寻找最大连续子数组等。子串:常用于字符串处理问题,比如判断字符串中是否包含某个模式、最长回文子串等。
2025-03-14 19:31:48
801
原创 Exception in thread “main“ java.lang.NoSuchMethodError:
如果仍然报相同错误,说明你的环境里仍然存在另一个有冲突的 Solution.class。请在工程目录下(尤其是 bin、out、target 等编译输出文件夹)搜索并删除所有可能的旧版本,然后重新编译运行。原因是因为在不同的.java程序中使用了同名的Solution类,导致编译器和运行时选择的类不一致。你可以在bin文件夹中删除旧的 .class 文件。
2025-03-13 21:23:23
336
原创 LeetCode hot 100 每日一题(8)——438. 找到字符串中所有字母异位词
这是滑动窗口的另一道题目,难度为中等。让我们来看看题目描述:给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。[0,6]起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。[0,1,2]起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。
2025-03-13 12:31:13
940
原创 LeetCode hot 100 每日一题(7)--3. 无重复字符的最长子串
滑动窗口算法的核心逻辑是:两个while// 增大窗口right++;// 缩小窗口left++;// 滑动窗口算法伪码框架// 用合适的数据结构记录窗口中的数据,根据具体场景变通// 比如说,我想记录窗口中元素出现的次数,就用 map// 如果我想记录窗口中的元素和,就可以只用一个 int// c 是将移入窗口的字符// 增大窗口right++;// 进行窗口内数据的一系列更新...// *** debug 输出的位置 ***
2025-03-11 21:05:29
755
原创 LeetCode hot 100 每日一题(6)--15. 三数之和
这份代码的核心思想在于利用递归将较复杂的 3Sum 问题(或 n-sum 问题)降解为 2-sum 问题,通过排序和去重操作来保证结果的正确性和唯一性。
2025-03-08 17:49:35
1423
原创 LeetCode hot 100 每日一题(5)--11. 盛最多水的容器
题目描述给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。你不能倾斜容器。示例一图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。1105104又到了激动人心的说人话环节:数组中每一个数字就是图中的柱子高度,找到图中两个柱子围起来最大的区域。
2025-03-06 21:27:05
508
原创 LeetCode hot 100 每日一题(4)--283. 移动零
在这道题中,指针Java 中没有直接操作内存地址的指针,但可以使用下标变量(如ij)来模拟指针的作用,通过记录当前位置,实现对数组的遍历和修改。由于 Java 中数组是引用类型,在方法内部对数组的修改会直接反映在原数组上,因此利用下标操作可以实现不复制数组的原地修改。一个下标(如i)用来遍历数组中的每个元素。另一个下标(如j)用来记录下一个非零元素应该放置的位置。第一轮遍历过程中,将所有非零元素依次复制到下标j指向的位置,然后j后移。第二轮遍历则从j。
2025-03-04 11:40:05
1155
原创 java中HashSet用法
(HashMap)实现的集合类,用于存储不重复的元素。它不保证元素的顺序,即元素的插入顺序可能与迭代顺序不同。方法从集合中移除指定的元素。如果元素存在且被移除,返回 true;方法将元素添加到集合中。如果元素已存在,添加操作不会生效,且返回 false。使用 contains(Object o) 方法判断集合中是否包含指定的元素。可以使用增强型 for 循环或迭代器来遍历 HashSet 中的元素。以下是一个完整的示例,演示了。方法获取集合中元素的数量。方法移除集合中的所有元素。方法检查集合是否为空。
2025-03-03 18:31:56
398
原创 LeetCode hot 100 每日一题(3)--128. 最长连续序列
下面是HashSet在 Java 中的声明和基本用法示例,以及详细解释:在 Java 中,HashSet是一个基于哈希表(HashMap)实现的集合类,用于存储不重复的元素。它不保证元素的顺序,即元素的插入顺序可能与迭代顺序不同。声明HashSet要使用 HashSet,首先需要导入类。// 创建一个存储字符串的 HashSet Set < String > set = new HashSet < >();
2025-03-03 18:31:12
1134
2
原创 java中ArrayList用法
是一个动态数组,适用于需要频繁添加、删除和随机访问元素的场景。它提供了简单易用的 API,使得我们可以方便地操作集合数据。由于底层基于数组实现,访问速度快,但在中间插入或删除元素时可能需要移动数据,因此在设计程序时需要考虑操作的频率和数据量。时,通常使用泛型指定存储的数据类型。
2025-03-01 12:20:47
217
原创 LeetCode hot 100 每日一题(2)--49. 字母异位词分组
在这道题目中出现了ArrayListArrayList是一个动态数组,适用于需要频繁添加、删除和随机访问元素的场景。它提供了简单易用的 API,使得我们可以方便地操作集合数据。由于底层基于数组实现,访问速度快,但在中间插入或删除元素时可能需要移动数据,因此在设计程序时需要考虑操作的频率和数据量。声明与初始化声明一个ArrayList时,通常使用泛型指定存储的数据类型。添加元素访问元素获取列表的大小:修改元素删除元素遍历列表i++) {常用其他方法。
2025-03-01 12:13:15
1360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人