MyScale(我的规模)
MyScale是一个基于开源ClickHouse构建的针对AI应用和解决方案进行优化的云数据库。
本笔记本展示了如何使用与MyScale
向量数据库相关的功能。
设置环境
pip install clickhouse-connect
我们想要使用OpenAIEmbeddings,所以我们需要获取OpenAI API密钥。
import os
import getpass
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
有两种设置myscale索引参数的方法。
环境变量
在运行应用程序之前,请使用
export
设置环境变量:export MYSCALE_HOST='<your-endpoints-url>' MYSCALE_PORT=<your-endpoints-port> MYSCALE_USERNAME=<your-username> MYSCALE_PASSWORD=<your-password> ...
您可以在我们的SaaS上轻松找到您的帐户、密码和其他信息。有关详细信息,请参阅此文档
MyScaleSettings
下的每个属性都可以使用前缀MYSCALE_
进行设置,且不区分大小写。使用参数创建
MyScaleSettings
对象
from langchain.vectorstores import MyScale, MyScaleSettings
config = MyScaleSetting(host="<your-backend-url>", port=8443, ...)
index = MyScale(embedding_function, config)
index.add_documents(...)
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import MyScale
from langchain.document_loaders import TextLoader
from langchain.document_loaders import TextLoader
loader = TextLoader("../../../state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
for d in docs:
d.metadata = {"some": "metadata"}
docsearch = MyScale.from_documents(docs, embeddings)
query = "What did the president say about Ketanji Brown Jackson"
docs = docsearch.similarity_search(query)
print(docs[0].page_content)
获取连接信息和数据模式
print(str(docsearch))
过滤
您可以直接访问myscale SQL的where语句。您可以按照标准SQL编写WHERE
子句。
注意:请注意SQL注入,此接口不能直接由最终用户调用。
如果您在设置中自定义了column_map
,则可以使用以下方式进行过滤搜索:
from langchain.vectorstores import MyScale, MyScaleSettings
from langchain.document_loaders import TextLoader
loader = TextLoader("../../../state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
for i, d in enumerate(docs):
d.metadata = {"doc_id": i}
docsearch = MyScale.from_documents(docs, embeddings)
带有分数的相似性搜索
返回的距离分数是余弦距离。因此,较低的分数表示更好的匹配。
meta = docsearch.metadata_column
output = docsearch.similarity_search_with_relevance_scores(
"What did the president say about Ketanji Brown Jackson?",
k=4,
where_str=f"{meta}.doc_id<10",
)
for d, dist in output:
print(dist, d.metadata, d.page_content[:20] + "...")
删除数据
docsearch.drop()