中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

向量數(shu)據(ju)庫Chroma極(ji)簡教程

引子

向量數據庫(ku)其實最早在傳統(tong)的(de)(de)人工智(zhi)能和機(ji)器學習場景中(zhong)(zhong)就有(you)所(suo)應(ying)用(yong)。在大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)興起(qi)后(hou),由(you)于目(mu)前大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)的(de)(de)token數限制(zhi),很多(duo)開發者傾(qing)向于將數據量龐大(da)(da)(da)的(de)(de)知識、新聞(wen)、文(wen)獻、語料等(deng)先通(tong)過(guo)嵌入(ru)(ru)(embedding)算法(fa)轉變(bian)為向量數據,然后(hou)存儲(chu)在Chroma等(deng)向量數據庫(ku)中(zhong)(zhong)。當用(yong)戶在大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)輸入(ru)(ru)問(wen)題后(hou),將問(wen)題本(ben)(ben)身(shen)也embedding,轉化(hua)為向量,在向量數據庫(ku)中(zhong)(zhong)查找(zhao)與之最匹(pi)配的(de)(de)相(xiang)關知識,組成大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)的(de)(de)上下文(wen),將其輸入(ru)(ru)給大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing),最終返回大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)處理后(hou)的(de)(de)文(wen)本(ben)(ben)給用(yong)戶,這種方式不僅降(jiang)低大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)的(de)(de)計算量,提高響(xiang)應(ying)速度,也降(jiang)低成本(ben)(ben),并避免了大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)的(de)(de)tokens限制(zhi),是一種簡單(dan)高效的(de)(de)處理手段。此外,向量數據庫(ku)還在大(da)(da)(da)模(mo)(mo)(mo)型(xing)(xing)(xing)(xing)記(ji)憶存儲(chu)等(deng)領域發揮其不可替代(dai)的(de)(de)作(zuo)用(yong)。

由于大模型的(de)火熱,現在市面上的(de)向量數(shu)據庫(ku)眾多,主(zhu)流的(de)向量數(shu)據庫(ku)對比如下所示:

向量數據庫 URL GitHub Star Language
chroma 7.4K Python
milvus 21.5K Go/Python/C++
pinecone ? ?
qdrant 11.8K Rust
typesense 12.9K C++
weaviate 6.9K Go

表格引用自:

本文重點圍繞向量數據庫Chroma的使用和實戰,主要包括以下(xia)內容(rong):

  • Chroma設計理念
  • Chroma常見概念(數據集,文檔,存儲,查詢,條件過濾)
  • Chroma快速上手
  • Chroma支持的Embeddings算法
  • 實戰:在Langchain中使用Chroma對中國古典四大名著進行相似性查詢

Chroma快速上手

設計理念

Chroma的目(mu)標(biao)是幫助用戶更(geng)加(jia)便捷地構建大(da)模型應用,更(geng)加(jia)輕(qing)松的將(jiang)知識(knowledge)、事實(facts)和(he)技能(skills)等我們現實世(shi)界中(zhong)的文檔(dang)整合進大(da)模型中(zhong)。

Chroma提供的工具:

  • 存儲文檔數據和它們的元數據:store embeddings and their metadata
  • 嵌入:embed documents and queries
  • 搜索: search embeddings

Chroma的設計優先(xian)考慮:

  • 足夠簡單并且提升開發者效率:simplicity and developer productivity
  • 搜索之上再分析:analysis on top of search
  • 追求快(性能): it also happens to be very quick

目(mu)前(qian)官方提供(gong)了Python和(he)JavaScript版(ban)(ban)本,也有其他語言的(de)社區版(ban)(ban)本支(zhi)持(chi)。

完整Demo

首先需(xu)要Python環(huan)境(jing)(Chroma官方原生支持(chi)Python和(he)JavaScript,本文用Python做示例)

pip install chromadb

直接(jie)運行(xing)如下代碼,便是一個完整的Demo:

import chromadb
chroma_client = chromadb.Client()

collection = chroma_client.create_collection(name="my_collection")

collection.add(
    documents=["This is a document about engineer", "This is a document about steak"],
    metadatas=[{"source": "doc1"}, {"source": "doc2"}],
    ids=["id1", "id2"]
)

results = collection.query(
    query_texts=["Which food is the best?"],
    n_results=2
)

print(results)

上面的代(dai)碼中,我(wo)們向Chroma提交了兩(liang)個文檔(簡(jian)單起見,是兩(liang)個字符串),一個是This is a document about engineer,一個是This is a document about steak。若在add方法(fa)沒有傳(chuan)入(ru)embedding參數(shu),則會使用Chroma默(mo)認的all-MiniLM-L6-v2 方式進行embedding。隨后,我(wo)們對(dui)數(shu)據集(ji)進行query,要(yao)求返回(hui)兩(liang)個最相關的結果(guo)。提問(wen)內容為:Which food is the best?

返回結果:

{
	'ids': [
		['id2', 'id1']
	],
	'distances': [
		[1.5835548639297485, 2.1740970611572266]
	],
	'metadatas': [
		[{
			'source': 'doc2'
		}, {
			'source': 'doc1'
		}]
	],
	'embeddings': None,
	'documents': [
		['This is a document about steak', 'This is a document about engineer']
	]
}

結果顯示,兩個(ge)文檔(dang)都被正(zheng)確返(fan)回,且id2由(you)于是(shi)steak(牛排),相關性與(yu)我們的(de)提問(wen)更大,排在了(le)首位。還打印了(le)distances。

簡單,易理解。

數據持久化

Chroma一般是(shi)直接作為內存(cun)數據(ju)庫使用(yong),但是(shi)也可(ke)以(yi)進行(xing)持久化存(cun)儲。

在初始化(hua)Chroma Client時,使用PersistentClient:

client = chromadb.PersistentClient(path="/Users/yourname/xxxx")

這樣在運行代碼后,在你(ni)指定的位置會新建一(yi)個chroma.sqlite3文件。

這個(ge)sqlite3的(de)數據庫里包含的(de)表如下圖,從(cong)中(zhong)可以窺見一(yi)部(bu)分Chroma的(de)數據存儲思路:

Chroma Client還支持下面兩個API:

client.heartbeat() # returns a nanosecond heartbeat. Useful for making sure the client remains connected.
client.reset() # Empties and completely resets the database. ?? This is destructive and not reversible.

此外(wai),Chroma還(huan)支持服務端(duan),客戶端(duan)模式(shi),用于跨進程(cheng)通(tong)信。詳見(jian):

數據集(Collection)

collection是Chroma中一個(ge)重要(yao)的概念,下面的代碼和(he)(he)注釋(shi)簡(jian)單介紹了(le)collection的主(zhu)要(yao)功(gong)能和(he)(he)使用方法。

collection = client.get_collection(name="test") # Get a collection object from an existing collection, by name. Will raise an exception if it's not found.
collection = client.get_or_create_collection(name="test") # Get a collection object from an existing collection, by name. If it doesn't exist, create it.
client.delete_collection(name="my_collection") # Delete a collection and all associated embeddings, documents, and metadata. ?? This is destructive and not reversible
collection.peek() # returns a list of the first 10 items in the collection
collection.count() # returns the number of items in the collection
collection.modify(name="new_name") # Rename the collection

collection支持傳入一(yi)些自身的元數據metadata:

collection = client.create_collection(
    name="collection_name",
    metadata={"hnsw:space": "cosine"} # l2 is the default
)

collection允許用戶自行切換距(ju)離計算函(han)數,方法是通過設置cellection的metadata中的“hnsw:space”:

collection = client.create_collection(
      name="collection_name",
      metadata={"hnsw:space": "cosine"} # l2 is the default
  )
Distance parameter Equation
Squared L2 'l2' $d = \sum\left(A_i-B_i\right)^2$
Inner product 'ip' $d = 1.0 - \sum\left(A_i \times B_i\right) $
Cosine similarity 'cosine' $d = 1.0 - \frac{\sum\left(A_i \times B_i\right)}{\sqrt{\sum\left(A_i^2\right)} \cdot \sqrt{\sum\left(B_i^2\right)}}$

文檔(Document)

在上面(mian)的Demo中(zhong),我們使用了默(mo)認的add函(han)數。

def add(ids: OneOrMany[ID],
        embeddings: Optional[OneOrMany[Embedding]] = None,
        metadatas: Optional[OneOrMany[Metadata]] = None,
        documents: Optional[OneOrMany[Document]] = None) -> None

除(chu)此之外,你還可以有如下傳參:

  • ids: 文檔的唯一ID
  • embeddings(可選): 如果不傳該參數,將根據Collection設置的embedding_function進行計算。
  • metadatas(可選):要與嵌入關聯的元數據。在查詢時,您可以根據這些元數據進行過濾。
  • documents(可選):與該嵌入相關聯的文檔,甚至可以不放文檔。

示例:

collection.add(
    embeddings=[[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
    documents=["This is a document", "This is another document"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

簡單查詢

輸入文(wen)檔內的文(wen)本進行相似(si)性查詢,可以使用query方法

collection.query(
    query_embeddings=[[11.1, 12.1, 13.1],[1.1, 2.3, 3.2], ...],
    n_results=10,
    where={"metadata_field": "is_equal_to_this"},
    where_document={"$contains":"search_string"}
)

若想(xiang)要(yao)通過id查找,可以使用get方法

collection.get(
    ids=["id1", "id2", "id3", ...],
    where={"style": "style1"}
)

與(yu)此(ci)同時,你(ni)可以(yi)定(ding)制(zhi)返(fan)回結果(guo)包含的數據

# Only get documents and ids
collection.get({
    include: [ "documents" ]
})

collection.query({
    queryEmbeddings: [[11.1, 12.1, 13.1],[1.1, 2.3, 3.2], ...],
    include: [ "documents" ]
})

條件查詢

Chroma 支持按元(yuan)數據和文檔內(nei)容過濾查詢。

where 字段用于按元數據進行過濾

{
    "metadata_field": {
        <Operator>: <Value>
    }
}

支持下列操(cao)作操(cao)作符(fu):

$eq - equal to (string, int, float)

$ne - not equal to (string, int, float)

$gt - greater than (int, float)

$gte - greater than or equal to (int, float)

$lt - less than (int, float)

$lte - less than or equal to (int, float)

# is equivalent to
{
    "metadata_field": {
        "$eq": "search_string"
    }
}

where_document 字段用于按文檔內容進行過濾

# Filtering for a search_string
{
    "$contains": "search_string"
}

使用邏輯運算符

可以在查詢條件(jian)中(zhong)使用邏輯(ji)運算符(fu)

{
    "$and": [
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        },
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        }
    ]
}
{
    "$or": [
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        },
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        }
    ]
}

使用in/not in

in將返(fan)回metadata中包含(han)給出列表中屬性值(zhi)的文檔:

{
  "metadata_field": {
    "$in": ["value1", "value2", "value3"]
  }
}

not in則與其相反(fan):

{
  "metadata_field": {
    "$nin": ["value1", "value2", "value3"]
  }
}

更新文檔

帶上ids,其他(ta)參數和add方法類似

collection.update(
    ids=["id1", "id2", "id3", ...],
    embeddings=[[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],
    metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],
    documents=["doc1", "doc2", "doc3", ...],
)

刪除文檔

提供ids,還允許附(fu)帶where條件進行刪(shan)除

collection.delete(
    ids=["id1", "id2", "id3",...],
    where={"chapter": "20"}
)

Chroma Embeddings算法

默認Embeddings算法

Chroma默認使(shi)用的是(shi)all-MiniLM-L6-v2模型來進行embeddings

官方預訓練模型

你也可以直(zhi)接(jie)使用官(guan)方預(yu)訓練的托管在Huggingface上的模型

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('model_name')

The all-* models where trained on all available training data (more than 1 billion training pairs) and are designed as general purpose models. The all-mpnet-base-v2 model provides the best quality, while all-MiniLM-L6-v2 is 5 times faster and still offers good quality. Toggle All models to see all evaluated models or visit to view all existing sentence-transformers models.

選擇非常多,你可以(yi)點擊官網查看每種預(yu)訓(xun)練模型的詳細信息。

其他第三方Embeddings算法

你還可以使(shi)用(yong)其(qi)他第三方(fang)模型,包括第三方(fang)平臺,例如:

openai_ef = embedding_functions.OpenAIEmbeddingFunction(
                api_key="YOUR_API_KEY",
                model_name="text-embedding-ada-002"
            )

其(qi)他包括Cohere,HuggingFace等。

自定義Embeddings算法

你(ni)甚至可以(yi)使用自(zi)己的(de)本地Embeddings算(suan)法,Chroma留有擴展點:

from chromadb import Documents, EmbeddingFunction, Embeddings

class MyEmbeddingFunction(EmbeddingFunction):
    def __call__(self, texts: Documents) -> Embeddings:
        # embed the documents somehow
        return embeddings

實戰:在Langchain中使用Chroma對中國古典四大名著進行相似性查詢

很多人認(ren)識Chroma是由(you)于(yu)Langchain經常將(jiang)其作為向量數據庫(ku)使(shi)用(yong)。不過(guo)Langchain官(guan)方文(wen)(wen)檔(dang)(dang)里的(de)Chroma示例使(shi)用(yong)的(de)是英(ying)文(wen)(wen)Embeddings算法以及英(ying)文(wen)(wen)的(de)文(wen)(wen)檔(dang)(dang)語(yu)料。官(guan)方文(wen)(wen)檔(dang)(dang)鏈接(jie)如下:

既然我們(men)是華語區博客,這本篇(pian)文(wen)章中,我們(men)就嘗試用中文(wen)的語料和Embeddings算(suan)法來(lai)做(zuo)一次實戰。

先貼上完(wan)整代碼,我們再來逐步(bu)解釋:

from langchain.document_loaders import TextLoader
from langchain.embeddings import ModelScopeEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
import chardet

# 讀取原始文檔
raw_documents_sanguo = TextLoader('/Users/rude3knife/Desktop/三國演義.txt', encoding='utf-16').load()
raw_documents_xiyou = TextLoader('/Users/rude3knife/Desktop/西游記.txt', encoding='utf-16').load()

# 分割文檔
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=0)
documents_sanguo = text_splitter.split_documents(raw_documents_sanguo)
documents_xiyou = text_splitter.split_documents(raw_documents_xiyou)
documents = documents_sanguo + documents_xiyou
print("documents nums:", documents.__len__())


# 生成向量(embedding)
model_id = "damo/nlp_corom_sentence-embedding_chinese-base"
embeddings = ModelScopeEmbeddings(model_id=model_id)
db = Chroma.from_documents(documents, embedding=embeddings)

# 檢索
query = "美猴王是誰?"
docs = db.similarity_search(query, k=5)

# 打印結果
for doc in docs:
    print("===")
    print("metadata:", doc.metadata)
    print("page_content:", doc.page_content)

準備原始文檔

我下載了三(san)國演義和西(xi)游記的全文本txt,作(zuo)為我們的知識庫,兩個文本都(dou)在1.5MB左右。

在這里還遇到一個小插曲,本以為下載下來的文本時UTF-8編碼,代碼寫成了encoding='utf-8',結果TextLoader怎么(me)讀(du)取都報編(bian)(bian)碼(ma)錯誤(wu),用眼睛也(ye)沒(mei)法一下(xia)子判(pan)斷(duan)(duan)是什么(me)編(bian)(bian)碼(ma),問了GPT,可(ke)以用Python的(de)chardet編(bian)(bian)碼(ma)庫判(pan)斷(duan)(duan)。如果你(ni)也(ye)遇到同樣的(de)問題(ti),可(ke)以也(ye)嘗試用該方(fang)法獲(huo)取編(bian)(bian)碼(ma)。

import chardet

def detect_file_encoding(file_path):
    with open(file_path, 'rb') as f:
        result = chardet.detect(f.read())
    return result['encoding']

file_path = '/Users/rude3knife/Desktop/三國演義.txt'
encoding = detect_file_encoding(file_path)
print(f'The encoding of file {file_path} is {encoding}')

# 輸出
The encoding of file /Users/yangzhendong/Desktop/三國演義.txt is UTF-16

分隔文檔

通(tong)常來(lai)說(shuo)文檔都是很(hen)大的(de),比如名(ming)著小說(shuo),法律文檔,我們通(tong)過langchain提供的(de)CharacterTextSplitter來(lai)幫我們分割文本:

text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=0)

embedding

我們選擇魔搭(da)平臺ModelScope里的(de)(de)(damo/nlp_corom_sentence-embedding_chinese-base)來作為我們的(de)(de)embedding算法。他有768維(wei)的(de)(de)向量。

為(wei)啥(sha)要選擇(ze)魔搭(da)而不選擇(ze)Huggingface,因為(wei)...在代碼里(li)跑Langchain,連魔搭(da)平臺比較快(kuai),連不上Huggingface的原(yuan)因你(ni)懂得(de)。而且魔搭(da)畢竟是達摩院的,自家人平臺的還得(de)支持一下(xia)。

query

將兩(liang)個(ge)(ge)文(wen)檔準備好后,我們進行提問,“美猴王是誰?” 要求返回(hui)5個(ge)(ge)相似答(da)案。下面的返回(hui)的答(da)案,可以看到,5個(ge)(ge)文(wen)檔都(dou)是取自西游記.txt中的文(wen)本(ben)。

==========
metadata: {'source': '/Users/yangzhendong/Desktop/西游記.txt'}
page_content: 美猴王一見,倒身下拜,磕頭不計其數,口中只道:“師父,師父!我弟子志心朝禮,志心朝禮!”祖師道:“你是那方人氏?且說個鄉貫姓名明白,再拜。”猴王道:“弟子乃東勝神洲傲來國花果山水簾洞人氏。”祖師喝令:“趕出去!他本是個撒詐搗虛之徒,那里修什么道果!”猴王慌忙磕頭不住道:“弟子是老實之言,決無虛詐。”祖師道:“你既老實,怎么說東勝神洲?那去處到我這里,隔兩重大海,一座南贍部洲,如何就得到此?”猴王叩頭道:“弟子飄洋過海,登界游方,有十數個年頭,方才訪到此處。”祖師道:“既是逐漸行來的也罷。你姓什么?”猴王又道:“我無性。人若罵我我也不惱,若打我我也不嗔,只是陪個禮兒就罷了,一生無性。”祖師道:“不是這個性。你父母原來姓什么?”猴王道:“我也無父母。”祖師道:“既無父母,想是樹上生的?”猴王道:“我雖不是樹上生,卻是石里長的。我只記得花果山上有一塊仙石,其年石破,我便生也。”祖師聞言暗喜道:“這等說,卻是個天地生成的,你起來走走我看。”猴王縱身跳起,拐呀拐的走了兩遍。
==========
metadata: {'source': '/Users/yangzhendong/Desktop/西游記.txt'}
page_content: 太宗更喜,教:“光祿寺設宴,開東閣酬謝。”忽見他三徒立在階下,容貌異常,便問:“高徒果外國人耶?”長老俯伏道:“大徒弟姓孫,法名悟空,臣又呼他為孫行者。他出身原是東勝神洲傲來國花果山水簾洞人氏,因五百年前大鬧天宮,被佛祖困壓在西番兩界山石匣之內,蒙觀音菩薩勸善,情愿皈依,是臣到彼救出,甚虧此徒保護。二徒弟姓豬,法名悟能,臣又呼他為豬八戒。他出身原是福陵山云棧洞人氏,因在烏斯藏高老莊上作怪,即蒙菩薩勸善,虧行者收之,一路上挑擔有力,涉水有功。三徒弟姓沙,法名悟凈,臣又呼他為沙和尚。他出身原是流沙河作怪者,也蒙菩薩勸善,秉教沙門。那匹馬不是主公所賜者。”太宗道:“毛片相同,如何不是?”三藏道:“臣到蛇盤山鷹愁澗涉水,原馬被此馬吞之,虧行者請菩薩問此馬來歷,原是西海龍王之了,因有罪,也蒙菩薩救解,教他與臣作腳力。當時變作原馬,毛片相同。幸虧他登山越嶺,跋涉崎嶇,去時騎坐,來時馱經,亦甚賴其力也。”
==========
metadata: {'source': '/Users/yangzhendong/Desktop/西游記.txt'}
page_content: 第七十回 妖魔寶放煙沙火 悟空計盜紫金鈴

  卻說那孫行者抖擻神威,持著鐵棒,踏祥光起在空中,迎面喝道:“你是那里來的邪魔,待往何方猖獗!”那怪物厲聲高叫道:“吾黨不是別人,乃麒麟山獬豸洞賽太歲大王爺爺部下先鋒,今奉大王令,到此取宮女二名,伏侍金圣娘娘。你是何人,敢來問我!”行者道:“吾乃齊天大圣孫悟空,因保東土唐僧西天拜佛,路過此國,知你這伙邪魔欺主,特展雄才,治國祛邪。正沒處尋你,卻來此送命!”那怪聞言,不知好歹,展長槍就刺行者。行者舉鐵棒劈面相迎,在半空里這一場好殺:

  棍是龍宮鎮海珍,槍乃人間轉煉鐵。凡兵怎敢比仙兵,擦著些兒神氣泄。大圣原來太乙仙,妖精本是邪魔孽。鬼祟焉能近正人,一正之時邪就滅。那個弄風播土唬皇王,這個踏霧騰云遮日月。丟開架子賭輸贏,無能誰敢夸豪杰!還是齊天大圣能,乒乓一棍槍先折。
==========
metadata: {'source': '/Users/yangzhendong/Desktop/西游記.txt'}
page_content: 菩薩引眾同入里面,與玉帝禮畢,又與老君、王母相見,各坐下,便問:“蟠桃盛會如何?”玉帝道:“每年請會,喜喜歡歡,今年被妖猴作亂,甚是虛邀也。”菩薩道:“妖猴是何出處?”玉帝道:“妖猴乃東勝神洲傲來國花果山石卵化生的。當時生出,即目運金光,射沖斗府。始不介意,繼而成精,降龍伏虎,自削死籍。當有龍王、閻王啟奏。朕欲擒拿,是長庚星啟奏道:‘三界之間,凡有九竅者,可以成仙。’朕即施教育賢,宣他上界,封為御馬監弼馬溫官。那廝嫌惡官小,反了天宮。即差李天王與哪吒太子收降,又降詔撫安,宣至上界,就封他做個‘齊天大圣’,只是有官無祿。他因沒事干管理,東游西蕩。朕又恐別生事端,著他代管蟠桃園。他又不遵法律,將老樹大桃,盡行偷吃。及至設會,他乃無祿人員,不曾請他,他就設計賺哄赤腳大仙,卻自變他相貌入會,將仙肴仙酒盡偷吃了,又偷老君仙丹,又偷御酒若干,去與本山眾猴享樂。朕心為此煩惱,故調十萬天兵,天羅地網收伏。這一日不見回報,不知勝負如何。”
==========
metadata: {'source': '/Users/yangzhendong/Desktop/西游記.txt'}
page_content: 行者道:“實不瞞師父說,老孫五百年前,居花果山水簾洞大展英雄之際,收降七十二洞邪魔,手下有四萬七千群怪,頭戴的是紫金冠,身穿的是赭黃袍,腰系的是藍田帶,足踏的是步云履,手執的是如意金箍棒,著實也曾為人。自從涅脖罪度,削發秉正沙門,跟你做了徒弟,把這個金箍兒勒在我頭上,若回去,卻也難見故鄉人。師父果若不要我,把那個《松箍兒咒》念一念,退下這個箍子,交付與你,套在別人頭上,我就快活相應了,也是跟你一場。莫不成這些人意兒也沒有了?”唐僧大驚道:“悟空,我當時只是菩薩暗受一卷《緊箍兒咒》,卻沒有什么松箍兒咒。”行者道:“若無《松箍兒咒》,你還帶我去走走罷。”長老又沒奈何道:“你且起來,我再饒你這一次,卻不可再行兇了。”行者道:“再不敢了,再不敢了。”又伏侍師父上馬,剖路前進。

  卻說那妖精,原來行者第二棍也不曾打殺他。那怪物在半空中,夸獎不盡道:“好個猴王,著然有眼!我那般變了去,他也還認得我。這些和尚,他去得快,若過此山,西下四十里,就不伏我所管了。若是被別處妖魔撈了去,好道就笑破他人口,使碎自家心,我還下去戲他一戲。”好妖怪,按聳陰風,在山坡下搖身一變,變成一個老公公,真個是:

總結

目前向(xiang)(xiang)量數據(ju)庫(ku)(ku)(ku)在AI中的應用(yong)(yong)越來越重要,但很多廠商更傾向(xiang)(xiang)于(yu)將向(xiang)(xiang)量數據(ju)庫(ku)(ku)(ku)隱藏(zang)在產品(pin)內(nei)部,用(yong)(yong)戶(hu)感知不到(dao)很多向(xiang)(xiang)量數據(ju)庫(ku)(ku)(ku)的使用(yong)(yong)細節。但大(da)模型的學習(xi)終(zhong)究是建(jian)立在開(kai)源代碼之上的,學習(xi)Chroma可以讓(rang)我(wo)們快速了解(jie)(jie)向(xiang)(xiang)量數據(ju)庫(ku)(ku)(ku)的基本原(yuan)理,也(ye)有(you)利于(yu)我(wo)們未(wei)來更好地理解(jie)(jie)大(da)模型。

參考

posted @ 2023-11-08 15:28  蠻三刀醬  閱讀(15813)  評論(0)    收藏  舉報