这个分为两部分的系列使用SQLite进行机器学习探索。 上一篇文章讨论了SQLite在生产就绪的Web应用程序中的越来越多的作用。本文着重于使用sqlite实施检索功能。
>>用于使用生成AI的自定义Web应用程序,请访问losangelesaiapps.com >
代码可用>在此处。。
传统的抹布实施通常涉及:
>
sqlite-vec
这种方法消除了对云矢量数据库和笨重框架的需求。
Sqlite的强度在于其可扩展性。 与Python库类似的扩展名添加了C中写入的功能。一个很好的示例是全文搜索(FTS)扩展。 添加矢量搜索功能,从而使语义理解超出关键字匹配。 寻找“马”可能会返回“马术”或“小马”。
使用虚拟表,提供:sqlite-vec
>sqlite-vec
>自定义数据源:
CREATE VIRTUAL TABLE my_table USING my_extension_module();
my_extension_module()
vec0
代码(sqlite-vec
repo link
文件作为示例数据(主要是物理相关)。 是sqlite数据库文件。
,
requirements.txt
sqlite-vec
>openai
openai api键:python-dotenv
获取openai api键。pip install -r requirements.txt
> 加载扩展名:python代码加载sqlite-vec
>扩展名并创建一个虚拟表:
CREATE VIRTUAL TABLE my_table USING my_extension_module();
documents
表存储嵌入式(embedding
),fileNames(file_name
)和content(content
)。
表示辅助字段。
.txt
代码通过db.enable_load_extension(True) sqlite_vec.load(db) db.enable_load_extension(False) db.execute(''' CREATE VIRTUAL TABLE documents USING vec0( embedding float[1536], +file_name TEXT, +content TEXT ) ''')
# ... (OpenAI embedding function) ... for file_name in os.listdir("data"): # ... (Open file, get content, get embedding) ... db.execute( 'INSERT INTO documents (embedding, file_name, content) VALUES (?, ?, ?)', (serialize_float32(embedding), file_name, content) ) db.commit()
>
结论
>大大简化了抹布。 它消除了对复杂框架和云服务的需求,使其具有成本效益且易于迭代。 虽然缩放可能最终需要一个更健壮的数据库,但sqlite-vec
>为较小的项目提供了引人注目的解决方案。 扩展名支持多种编程语言。sqlite-vec
以上是在Sqlite中检索增强发电的详细内容。更多信息请关注PHP中文网其他相关文章!