该存储库包含一个Python应用程序,该应用程序利用DuckDB作为存储和检索嵌入向量的后端。 DuckDB的新颖使用允许在大型数据集中进行有效的相似性搜索。在此示例中,我们已经加载了Hacker News的评论,并实施了功能,以找到与给定评论的10个最相似的评论。
克隆存储库:
git clone https://github.com/patricktrainer/duckdb-embedding-search.git导航到存储库目录:
cd duckdb-embedding-search安装所需的软件包:
pip install -r requirements.txt要使用该应用程序,请遵循以下步骤:
load_comments.py将注释加载到DuckDB数据库中。评论及其相应的嵌入向量将存储在hn_embeddings.db数据库的embeddings表中。main.py )并提供黑客新闻评论。该脚本将返回数据库中的10个最相似的注释。注意- 如果数据库中尚不存在,
embedding.py中的get_similarity函数将为提供的注释创建一个新的嵌入向量。这意味着它将击中OpenAI API,这将违反您的API使用。
以下示例演示了应用程序的功能。提供评论作为输入,该应用程序返回数据库中的10个最相似的评论。
提供的评论作为输入:
我注意到的一件事是,许多工程师在Github上寻找图书馆时,他们会检查最后一次提交时间。他们认为,最近的提交越最近,图书馆支持得更好。但是,一个存档的项目又能完成您需要做的事情,有0个错误,并且已经稳定了多年?这就像在旧货店里找到一个隐藏的宝石一样!如今我看到的大多数工程师都会自动丢弃并未“不断”更新的库...暗示这是一件好事:)
应用程序返回的最类似评论(简短缩写):
文字:>共享图书馆的死亡。他们引起的头痛不值得。
完全不同意。即使一个尺寸不适合所有尺寸,任何对静态库进行全面陈述的人只是向世界说明他们如何完全忽略了基本软件维护问题,例如跟踪哪个软件包已更新,特别是那些没有每天保持最新状态的软件包。
相似性:0.8047998201033179
文字:这里有很多好处,但是盈利系统的维护工作似乎是有效的时间。
现在,一些有利可图的系统正在慢慢进行,终身工程师可以继续忙于做例行工作,而无法解决或升级比特罗特。但是我认为擅长确保无聊和稳定的事情保持无聊和稳定的人通常会被低估。
相似性:0.796911347299464
connection.py :处理DuckDB数据库连接。embedding.py :py:管理嵌入矢量操作。operations.py :包含用于数据处理的实用程序功能。openai_client.py :与OpenAI API接口。DuckDB用作轻巧的高性能数据库来存储嵌入向量。 connection.py模块建立了与DuckDB的连接,并且operations.py包含用于插入和检索嵌入的逻辑。
使用OpenAI的API生成嵌入向量。 openai_client.py模块包含用于与API接口的逻辑。 embedding.py模块包含用于生成嵌入向量并进行比较的逻辑。