# openai-redis-vectorstore
基于RedisStack向量数据库,集成embeddings和rerank模型,支持二阶段召回,支持添加和删除等管理功能。
## 安装
```shell
pip install openai-redis-vectorstore
```
## 依赖说明
- 使用`python-environment-settings`管理配置项。详见该项目的参考文档。
- 深度依赖于`openai-simple-embeddings`和`openai-simple-rerank`。同时也依赖于两者的配置项。详见这两个项目的参考文档。
## 配置项说明
- REDIS_STACK_URL: redis-stack服务器地址。如:redis://localhost:6379/0
- 有资料提到要使用redis-stack向量功能,必须是0号库(未测试)
- (配置项别名)
- REDIS_URL
- REDIS
## 使用
### 将文本插入到向量数据库
*代码:*
```python
from openai_redis_vectorstore.base import RedisVectorStore
index_name = str(uuid.uuid4())
rvs = RedisVectorStore()
uid = rvs.insert("hello", meta={"id": 1}, index_name=index_name)
```
*说明:*
- id=1表示内容在业务系统中的唯一码。
- uid表示内容在向量数据库中的唯一码。可以根据uid唯一码,从向量数据库中删除相应内容。
### 搜索向量数据库
*代码:*
```python
from openai_redis_vectorstore.base import RedisVectorStore
index_name1 = str(uuid.uuid4())
index_name2 = str(uuid.uuid4())
rvs = RedisVectorStore()
# 向1号逻辑库中插入3条数据
rvs.insert_many(
["开会了", "再见", "你好"],
metas=[
{"id": 1},
{"id": 2},
{"id": 3},
],
index_name=index_name1,
)
# 向2号逻辑库中插入3条数据
rvs.insert_many(
["开会去", "好的", "谢谢"],
metas=[
{"id": 1},
{"id": 2},
{"id": 3},
],
index_name=index_name2,
)
# 从1号和2号逻辑库中搜索关键词并汇总
# 并要求匹配度不低于指定阈值
docs = rvs.similarity_search_and_rerank(
query="开会",
index_names=[index_name1, index_name2],
embeddings_score_threshold=0.65,
rerank_score_threshold=0.85,
)
assert len(docs) == 2
doc1 = docs[0]
doc2 = docs[1]
assert doc1.vs_index_name in [index_name1, index_name2]
assert doc2.vs_index_name in [index_name1, index_name2]
assert doc1.vs_rerank_score > doc2.vs_rerank_score
```
## 版本记录
### v0.1.0
- 版本首发。
### v0.1.1
- 修改:搜索一个空向量库时,只在日志中记录WARNING信息并返回空数组。
### v0.1.2
- 修改:`openai_redis_vectorstore.schemas.Document`增加`content`字段。
Raw data
{
"_id": null,
"home_page": null,
"name": "openai-redis-vectorstore",
"maintainer": "rRR0VrFP",
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "openai-redis-vectorstore",
"author": "rRR0VrFP",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/bf/5e/2658dff84327b1f6352ada48afa79c09921cf6c67343e219743f7d142e35/openai-redis-vectorstore-0.1.2.tar.gz",
"platform": null,
"description": "# openai-redis-vectorstore\r\n\r\n\u57fa\u4e8eRedisStack\u5411\u91cf\u6570\u636e\u5e93\uff0c\u96c6\u6210embeddings\u548crerank\u6a21\u578b\uff0c\u652f\u6301\u4e8c\u9636\u6bb5\u53ec\u56de\uff0c\u652f\u6301\u6dfb\u52a0\u548c\u5220\u9664\u7b49\u7ba1\u7406\u529f\u80fd\u3002\r\n\r\n## \u5b89\u88c5\r\n\r\n```shell\r\npip install openai-redis-vectorstore\r\n```\r\n\r\n## \u4f9d\u8d56\u8bf4\u660e\r\n\r\n- \u4f7f\u7528`python-environment-settings`\u7ba1\u7406\u914d\u7f6e\u9879\u3002\u8be6\u89c1\u8be5\u9879\u76ee\u7684\u53c2\u8003\u6587\u6863\u3002\r\n- \u6df1\u5ea6\u4f9d\u8d56\u4e8e`openai-simple-embeddings`\u548c`openai-simple-rerank`\u3002\u540c\u65f6\u4e5f\u4f9d\u8d56\u4e8e\u4e24\u8005\u7684\u914d\u7f6e\u9879\u3002\u8be6\u89c1\u8fd9\u4e24\u4e2a\u9879\u76ee\u7684\u53c2\u8003\u6587\u6863\u3002\r\n\r\n## \u914d\u7f6e\u9879\u8bf4\u660e\r\n\r\n- REDIS_STACK_URL: redis-stack\u670d\u52a1\u5668\u5730\u5740\u3002\u5982\uff1aredis://localhost:6379/0\r\n - \u6709\u8d44\u6599\u63d0\u5230\u8981\u4f7f\u7528redis-stack\u5411\u91cf\u529f\u80fd\uff0c\u5fc5\u987b\u662f0\u53f7\u5e93\uff08\u672a\u6d4b\u8bd5\uff09\r\n - \uff08\u914d\u7f6e\u9879\u522b\u540d\uff09\r\n - REDIS_URL\r\n - REDIS\r\n\r\n## \u4f7f\u7528\r\n\r\n### \u5c06\u6587\u672c\u63d2\u5165\u5230\u5411\u91cf\u6570\u636e\u5e93\r\n\r\n*\u4ee3\u7801\uff1a*\r\n\r\n```python\r\nfrom openai_redis_vectorstore.base import RedisVectorStore\r\n\r\nindex_name = str(uuid.uuid4())\r\nrvs = RedisVectorStore()\r\nuid = rvs.insert(\"hello\", meta={\"id\": 1}, index_name=index_name)\r\n```\r\n\r\n*\u8bf4\u660e\uff1a*\r\n\r\n- id=1\u8868\u793a\u5185\u5bb9\u5728\u4e1a\u52a1\u7cfb\u7edf\u4e2d\u7684\u552f\u4e00\u7801\u3002\r\n- uid\u8868\u793a\u5185\u5bb9\u5728\u5411\u91cf\u6570\u636e\u5e93\u4e2d\u7684\u552f\u4e00\u7801\u3002\u53ef\u4ee5\u6839\u636euid\u552f\u4e00\u7801\uff0c\u4ece\u5411\u91cf\u6570\u636e\u5e93\u4e2d\u5220\u9664\u76f8\u5e94\u5185\u5bb9\u3002\r\n\r\n### \u641c\u7d22\u5411\u91cf\u6570\u636e\u5e93\r\n\r\n*\u4ee3\u7801\uff1a*\r\n\r\n```python\r\nfrom openai_redis_vectorstore.base import RedisVectorStore\r\n\r\nindex_name1 = str(uuid.uuid4())\r\nindex_name2 = str(uuid.uuid4())\r\nrvs = RedisVectorStore()\r\n\r\n# \u54111\u53f7\u903b\u8f91\u5e93\u4e2d\u63d2\u51653\u6761\u6570\u636e\r\nrvs.insert_many(\r\n [\"\u5f00\u4f1a\u4e86\", \"\u518d\u89c1\", \"\u4f60\u597d\"],\r\n metas=[\r\n {\"id\": 1},\r\n {\"id\": 2},\r\n {\"id\": 3},\r\n ],\r\n index_name=index_name1,\r\n)\r\n\r\n# \u54112\u53f7\u903b\u8f91\u5e93\u4e2d\u63d2\u51653\u6761\u6570\u636e\r\nrvs.insert_many(\r\n [\"\u5f00\u4f1a\u53bb\", \"\u597d\u7684\", \"\u8c22\u8c22\"],\r\n metas=[\r\n {\"id\": 1},\r\n {\"id\": 2},\r\n {\"id\": 3},\r\n ],\r\n index_name=index_name2,\r\n)\r\n\r\n# \u4ece1\u53f7\u548c2\u53f7\u903b\u8f91\u5e93\u4e2d\u641c\u7d22\u5173\u952e\u8bcd\u5e76\u6c47\u603b\r\n# \u5e76\u8981\u6c42\u5339\u914d\u5ea6\u4e0d\u4f4e\u4e8e\u6307\u5b9a\u9608\u503c\r\ndocs = rvs.similarity_search_and_rerank(\r\n query=\"\u5f00\u4f1a\",\r\n index_names=[index_name1, index_name2],\r\n embeddings_score_threshold=0.65,\r\n rerank_score_threshold=0.85,\r\n)\r\nassert len(docs) == 2\r\ndoc1 = docs[0]\r\ndoc2 = docs[1]\r\nassert doc1.vs_index_name in [index_name1, index_name2]\r\nassert doc2.vs_index_name in [index_name1, index_name2]\r\nassert doc1.vs_rerank_score > doc2.vs_rerank_score\r\n```\r\n\r\n## \u7248\u672c\u8bb0\u5f55\r\n\r\n### v0.1.0\r\n\r\n- \u7248\u672c\u9996\u53d1\u3002\r\n\r\n### v0.1.1\r\n\r\n- \u4fee\u6539\uff1a\u641c\u7d22\u4e00\u4e2a\u7a7a\u5411\u91cf\u5e93\u65f6\uff0c\u53ea\u5728\u65e5\u5fd7\u4e2d\u8bb0\u5f55WARNING\u4fe1\u606f\u5e76\u8fd4\u56de\u7a7a\u6570\u7ec4\u3002\r\n\r\n### v0.1.2\r\n\r\n- \u4fee\u6539\uff1a`openai_redis_vectorstore.schemas.Document`\u589e\u52a0`content`\u5b57\u6bb5\u3002\r\n",
"bugtrack_url": null,
"license": "Apache License, Version 2.0",
"summary": "\u57fa\u4e8eRedisStack\u5411\u91cf\u6570\u636e\u5e93\uff0c\u96c6\u6210embeddings\u548crerank\u6a21\u578b\uff0c\u652f\u6301\u4e8c\u9636\u6bb5\u53ec\u56de\uff0c\u652f\u6301\u6dfb\u52a0\u548c\u5220\u9664\u7b49\u7ba1\u7406\u529f\u80fd\u3002",
"version": "0.1.2",
"project_urls": null,
"split_keywords": [
"openai-redis-vectorstore"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d9fae07652d866c606a9280bc9cc95e077616dac76fb7c9271b56d9a101f9c58",
"md5": "8a5b8d120e1c70f848e1ea4336bf4ca5",
"sha256": "5bb93824c3ae46cc489f4af44c074014741b8d392af7e75e21f3b2076cca8bbf"
},
"downloads": -1,
"filename": "openai_redis_vectorstore-0.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8a5b8d120e1c70f848e1ea4336bf4ca5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 12052,
"upload_time": "2024-12-25T14:23:18",
"upload_time_iso_8601": "2024-12-25T14:23:18.924820Z",
"url": "https://files.pythonhosted.org/packages/d9/fa/e07652d866c606a9280bc9cc95e077616dac76fb7c9271b56d9a101f9c58/openai_redis_vectorstore-0.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bf5e2658dff84327b1f6352ada48afa79c09921cf6c67343e219743f7d142e35",
"md5": "396a91b81afdef57ec549f1876ae77b1",
"sha256": "2def6b7ec09b65555fe5877ab5a6b2b80543dace965101d070cdac74bb47ab23"
},
"downloads": -1,
"filename": "openai-redis-vectorstore-0.1.2.tar.gz",
"has_sig": false,
"md5_digest": "396a91b81afdef57ec549f1876ae77b1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12133,
"upload_time": "2024-12-25T14:23:20",
"upload_time_iso_8601": "2024-12-25T14:23:20.844692Z",
"url": "https://files.pythonhosted.org/packages/bf/5e/2658dff84327b1f6352ada48afa79c09921cf6c67343e219743f7d142e35/openai-redis-vectorstore-0.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-25 14:23:20",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "openai-redis-vectorstore"
}