贫瘠之地

华北无浪漫,死海扬起帆
多少个夜晚,独自望着天

0%

背景

之前一直对索引分析中 type range 有误解

下面是官方文档对 type range 的解释

range can be used when a key column is compared to a constant using any of the =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, LIKE, or IN() operators:

1
2
3
4
5
6
7
8
9
10
11
SELECT * FROM tbl_name
WHERE key_column = 10;

SELECT * FROM tbl_name
WHERE key_column BETWEEN 10 and 20;

SELECT * FROM tbl_name
WHERE key_column IN (10,20,30);

SELECT * FROM tbl_name
WHERE key_part1 = 10 AND key_part2 IN (10,20,30);

IN 查询下的 range 什么时候会恶化为 ALL 呢?按照我之前的理解,可能有两点

阅读全文 »

如何使用

语法

1
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

时间复杂度

一次调用是 O(1),完整的迭代是 O(N),包括不断调用直到返回 cursor 为 0;N 为集合内元素数量

阅读全文 »

多进程

fork

Unix/Linux 操作系统提供了一个 fork 系统调用,它非常特殊,因为普通的函数调用,调用一次就返回一次,但是 fork 调用一次,返回两次

因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后分别在父进程和子进程内返回,子进程永远返回 0,而父进程返回子进程的 ID

这样做的理由是,一个父进程可以 fork 出很多子进程,所以,父进程要记下每个子进程的 ID,而子进程只需要调用 getppid 就可以拿到父进程的 ID

阅读全文 »

因为 Python 并非是工作内容需要使用的语言,所以对语法并没有系统地学习过,加上也不会使用 Python 编写什么复杂的逻辑,所以一直以来都是使用过程中遇到需要的逻辑语法就查一下

在学习 LangChain 的过程中,发现 Python 的语法糖很多,很多设计思想提供了语法层面的支持,使得阅读源码挺费劲的

所以在这里还是系统地了解下 Python 都提供了哪些语法,也了解下 Python 编写代码的主要思想

这里主要是整理下 Python 中比较特殊的、和 Java 有较大区别的操作

函数

阅读全文 »

工具是代理可以用来与世界交互的接口,它们包括:

  • 工具的名称
  • 工具的描述
  • 工具输入 JSON 参数
  • 调用的函数
  • 是否应将工具的结果直接返回给用户

这些信息至关重要,使用这些信息可以用来建立行动系统,LLM 就可以使用名称、描述和 JSON 模式入参作为提示,这样它就知道如何指定要执行的操作,然后要调用的函数就相当于执行该操作

工具的输入越简单,LLM 就越容易使用它。许多代理只使用具有单个字符串输入的工具

需要注意的是名称、描述和 JSON 模式入参(如果使用)都将在提示中被使用。因此这些内容必须清楚并准确地描述应该如何使用该工具;这一点非常重要,如果 LLM 出现了不了解如何使用该工具的情况,则可能需要更改默认名称、描述或 JSON 模式入参

阅读全文 »