# 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] + '...')