# LangChain
# 介绍
大型语言模型(LLM)通过使开发人员能够创建以前不可能的强大应用程序,正在改变人工智能领域。然而,仅仅使用LLM往往不足以发挥应用程序的全部潜力。真正的力量在于能够将它们与其他计算或知识来源相结合。LangChain旨在帮助开发人员构建这些类型的应用程序。
有关LangChain的更多信息,请参阅LangChain文档网站 (opens new window)。
# 先决条件
在开始之前,我们需要安装langchain (opens new window)和clickhouse python client (opens new window)。
pip install -U langchain clickhouse-connect
# 环境设置
要使用OpenAI嵌入模型,我们需要在OpenAI (opens new window)上注册一个OpenAI API密钥。我们还需要从MyScale控制台(连接详情)中检索集群主机、用户名和密码信息。
运行以下命令设置环境变量:
export MYSCALE_HOST="YOUR_CLUSTER_HOST"
export MYSCALE_PORT=443
export MYSCALE_USERNAME="YOUR_USERNAME"
export MYSCALE_PASSWORD="YOUR_CLUSTER_PASSWORD"
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"
# 加载数据和构建索引
我们将使用OpenAIEmbedding模型从输入文本文件中提取嵌入向量:
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
loader = TextLoader("YOUR_PATH_TO_FILE")
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"}
接下来,我们将上传数据到MyScale集群。如果索引不存在,将创建索引;如果索引已存在,将重用索引。有关配置MyScale索引的更多信息,请参阅MyScaleSettings (opens new window)。
from langchain.vectorstores import MyScale
docsearch = MyScale.from_documents(docs, embeddings)
# 查询MyScale
# 相似度搜索
我们可以基于相似度搜索进行查询:
query = "YOUR_QUESTION"
docs = docsearch.similarity_search(query)
print(docs[0].page_content)
# 过滤搜索
您可以直接访问myscale SQL的where语句。您可以编写一个遵循标准SQL的WHERE
子句。
注意:请注意SQL注入。终端用户不能直接调用此接口。
如果您在设置中自定义了column_map
,您可以使用类似以下的过滤器进行搜索:
meta = docsearch.metadata_column
output = docsearch.similarity_search_with_relevance_scores(
"YOUR_QUESTION", k=4, where_str=f"{meta}.doc_id<10")
for d, dist in output:
print(dist, d.metadata, d.page_content[:20] + '...')