Laf 已成功上架 Sealos 模板市場(chǎng),可通過(guò) Laf 應(yīng)用模板來(lái)一鍵部署!
這意味著 Laf 在私有化部署上的擴(kuò)展性得到了極大的提升。
Sealos 作為一個(gè)功能強(qiáng)大的云操作系統(tǒng),能夠秒級(jí)創(chuàng)建多種高可用數(shù)據(jù)庫(kù),如 MySQL、PostgreSQL、MongoDB 和 Redis 等,也可以一鍵運(yùn)行各種消息隊(duì)列和微服務(wù),甚至 GPU 集群上線后還可以跑各種 AI 大模型。
將 Laf 一鍵部署到 Sealos 中,我們就可以在 Laf 中直接通過(guò)內(nèi)網(wǎng)調(diào)用 Sealos 提供的所有這些能力。無(wú)論用戶需要什么樣的后端支持,只需在 Sealos 上運(yùn)行相應(yīng)的服務(wù)即可。這種集成模式不僅提高了資源的利用效率,而且還提供了無(wú)縫的技術(shù)集成,使得 Laf 成為一個(gè)更加強(qiáng)大和多功能的 Serverless 平臺(tái),彌補(bǔ)了傳統(tǒng) Serverless 平臺(tái)在后端能力方面的不足。
Sealos 強(qiáng)大的模板市場(chǎng)提供了豐富的應(yīng)用生態(tài),用戶可以在模板市場(chǎng)中一鍵部署各種應(yīng)用。本文以 Elasticsearch 為例,展示如何在 Laf 中調(diào)用 Sealos 模板市場(chǎng)中部署的 Elasticsearch 來(lái)搭建一個(gè)向量數(shù)據(jù)庫(kù),提供定制化知識(shí)庫(kù)搜索能力。
背景知識(shí)
如果我們想往大模型里邊注入知識(shí),最先能想到的就是對(duì)大模型進(jìn)行微調(diào),大模型有很好的根據(jù)上文來(lái)回答問(wèn)題的能力。
假設(shè)一個(gè)場(chǎng)景,我有個(gè)問(wèn)題是:“請(qǐng)給我介紹一下萬(wàn)能青年旅店這支樂(lè)隊(duì) “(假設(shè)模型內(nèi)部并沒(méi)有存儲(chǔ)萬(wàn)青的相關(guān)信息),然后我有個(gè) 100w 字的文檔,里邊包含了世界上所有樂(lè)隊(duì)的介紹。如果模型對(duì)無(wú)限長(zhǎng)的輸入都有很好的理解能力,那么我可以設(shè)計(jì)這樣一個(gè)輸入 “以下是世界上所有樂(lè)隊(duì)的介紹:[插入 100w 字的樂(lè)隊(duì)簡(jiǎn)介文檔],請(qǐng)根據(jù)上文給我介紹一下萬(wàn)青這支樂(lè)隊(duì)”,讓模型來(lái)回答我的問(wèn)題。但模型支持的輸入長(zhǎng)度是很有限的,比如 ChatGPT 只支持 32K Token 長(zhǎng)度的輸入 (大約 50 頁(yè)文本)。
實(shí)際上,如果想讓大模型根據(jù)文檔來(lái)回答問(wèn)題,必須要精簡(jiǎn)在輸入中文檔內(nèi)容的長(zhǎng)度。一種做法是,我們可以把文檔切成若干段,只將少量的和問(wèn)題有關(guān)的文檔片段拿出來(lái),放到大模型的輸入里。至此,”大模型外掛數(shù)據(jù)庫(kù) “的問(wèn)題轉(zhuǎn)換成了 “文本檢索的問(wèn)題” 了,目標(biāo)是根據(jù)問(wèn)題找出文檔中和問(wèn)題最相關(guān)的片段,這已經(jīng)和大模型本身完全無(wú)關(guān)了。
文本檢索里邊比較常用的是利用向量進(jìn)行檢索,我們可以把文檔片段全部向量化 (通過(guò)語(yǔ)言模型,如 bert 等),然后存到向量數(shù)據(jù)庫(kù) (如 Annoy、FAISS、hnswlib 等) 里邊,來(lái)了一個(gè)問(wèn)題之后,也對(duì)問(wèn)題語(yǔ)句進(jìn)行向量話,以余弦相似度或點(diǎn)積等指標(biāo),計(jì)算在向量數(shù)據(jù)庫(kù)中和問(wèn)題向量最相似的 top k 個(gè)文檔片段,作為上文輸入到大模型中。
向量數(shù)據(jù)庫(kù)都支持近似搜索功能,在犧牲向量檢索準(zhǔn)確度的情況下,提高檢索速度。完整流程圖如下所示:
按照這個(gè)思路我們需要做的事情有兩個(gè),一個(gè)是把文檔向量化,另一個(gè)是搭建一個(gè)向量數(shù)據(jù)庫(kù)。文檔向量化最簡(jiǎn)單的方法可以使用 openai
提供的轉(zhuǎn)化接口將文檔轉(zhuǎn)化成向量數(shù)組,除此之外還可以通過(guò) bert 模型。OpenAI 還給出了向量數(shù)據(jù)庫(kù)參考選項(xiàng),建議我們使用 cosin 相似度公式來(lái)求向量相似度:
如何在 Sealos 上快速部署向量數(shù)據(jù)庫(kù)呢?從 OpenAI 的推薦上我們看到了里面有個(gè) Elasticsearch 選項(xiàng),那我們就用它了。
部署 Laf 與 Elasticsearch
首先我們需要打開(kāi) Sealos 公有云桌面:https://cloud.sealos.top
Sealos 是完全開(kāi)源的,您也可以通過(guò) Sealos 構(gòu)建自己的私有云:https://sealos.run/self-hosting
然后進(jìn)入 “模板市場(chǎng)”,通過(guò) Laf 模板與 Elasticsearch 模板分別部署 Laf 和 Elasticsearch。
然后在 Laf 中新建一個(gè)應(yīng)用,安裝依賴 elastic/elasticsearch
:
一旦應(yīng)用創(chuàng)建完畢,您可以使用云函數(shù)代碼來(lái)連接 Elasticsearch。在此示例中,我們直接插入了 10 條測(cè)試數(shù)據(jù) (為了簡(jiǎn)化演示過(guò)程,我們直接使用了測(cè)試數(shù)據(jù),并沒(méi)有用 OpenAI 的接口去生成文檔的向量數(shù)據(jù))。
import cloud from '@lafjs/cloud'
const { Client } = require('@elastic/elasticsearch')
const ca = `-----BEGIN CERTIFICATE-----
MIIDITCCAgmgAwIBAgIQQKs5V2terYVNUrHt9K0CzTANBgkqhkiG9w0BAQsFADAb
MRkwFwYDVQQDExBlbGFzdGljc2VhcmNoLWNhMB4XDTIzMTEyMjA3MDcxOFoXDTI0
MTEyMTA3MDcxOFowGzEZMBcGA1UEAxMQZWxhc3RpY3NlYXJjaC1jYTCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAPYyHrFgyoD3Pkkc/ekXhHGKi+qKPBbp
afPuGImQfTtkGlzhaHJ7Iy3MZojP/iyt3FTY+LvxODsbkgIrQJWwiG2s26rw03Zd
lphf7RULRa9Z/TKt0jxHV9M419ge2zRij6Al3uUHCP2FxjVMgYjuFisKwNalQfUE
spCTq9lWNp4bKP32GieEBQKeNRD8ElNBJkInIA2aTyH2TIhyICK0f5GjH52rxKeV
wrE/BHq8zomHRVtTM67KHoXc9RJgYNICfooeDHvi/f9f+pWrX881rmbNWXGcxu2u
GQLqCAkqpIpUwn5HAoSvUYHmxwgaDC866fjsgxv/6DMDJuGPmfsBqQMCAwEAAaNh
MF8wDgYDVR0PAQH/BAQDAgKkMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
AjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQaGk9O4hQFjJPU6ay8qqU8CNug
uzANBgkqhkiG9w0BAQsFAAOCAQEAfZUesinfp1jeSqfHBSPHOgZ1q/v8xoClEPRl
wzh8sbL14iuuSb190J8zQefvzxC7ip4kVCVTW52fBZNyoMpvj0cXKWRGFmz3yHIs
TNdwOy15mQRQGbOTDBkQ528SbrmrWF4W7kDMoWs0t02UIlSfBWDjJrVharRR9QuF
cGjoS59TCAFcHHUsPO3lcUT1TCq/W4xnds3zBxJiGeIdmDqE6DbS78YfwP9rhTx0
oxcQwpKaOj8vxQNQxNbJRmWgffx0PgUzFPni/N5FgFQQXDPG4i0gMciekHWz8VRM
pp2z1uD1lVdDa/83w/IZCQOqDU7cRjDosg+gaAefFGNMHVbPBw==
-----END CERTIFICATE-----
`
export default async function (ctx: FunctionContext) {
const client = new Client({
node: 'https://elasticsearch-master.ns-wz9g09tc.svc.cluster.local:9200',
auth: {
username: 'elastic',
password: 'zhtvadgdinhkyirozeznxlxd'
},
tls: {
ca: ca,
rejectUnauthorized: false
}
})
const health = await client.cluster.health()
console.log(health)
// 刪除已存在的索引(如果有)
await client.indices.delete({
index: 'vectors',
ignore_unavailable: true
})
// 創(chuàng)建一個(gè)新的向量索引
await client.indices.create({
index: 'vectors',
body: {
mappings: {
properties: {
embedding: {
type: 'dense_vector',
// 向量列表的長(zhǎng)度
dims: 3,
index:true,
// 字段索引,consin函數(shù)求相似度
similarity:'cosine'
},
text: {
type: 'text'
}
}
}
}
})
// 測(cè)試數(shù)據(jù)
const documents = [
{ embedding: [0.5, 10, 6], text: 'text1' },
{ embedding: [-0.5, 10, 10], text: 'text2' },
{ embedding: [1.0, 5, 8], text: 'text3' },
{ embedding: [-0.2, 8, 12], text: 'text4' },
{ embedding: [0.8, 12, 4], text: 'text5' },
{ embedding: [-0.7, 6, 14], text: 'text6' },
{ embedding: [0.3, 14, 2], text: 'text7' },
{ embedding: [-0.4, 16, 8], text: 'text8' },
{ embedding: [0.6, 8, 10], text: 'text9' },
{ embedding: [-0.6, 12, 6], text: 'text10' }
];
// 插入測(cè)試數(shù)據(jù)
for (const doc of documents) {
await client.index({
index: 'vectors',
document: doc,
refresh: true
});
}
// Define the vector to search for
const query_vector = [0.2, 12, 5]
const body = await client.knnSearch({
index: 'vectors',
knn: {
field: 'embedding',
query_vector: query_vector,
k: 3,
num_candidates: 5
},
_source: ["text"]
});
// 輸出搜索結(jié)果
console.log(JSON.stringify(body, null, 2))
return { data: 'hi, laf' }
}
通過(guò) cosin 相似度搜索,我們找到了與向量 [0.2, 12, 5]
最相似的三條向量數(shù)據(jù)。這些數(shù)據(jù)的文本分別是 text8
、text5
和 text10
。
Elasticsearch 內(nèi)網(wǎng)調(diào)用地址如下:
ca 的值就是 Elasticsearch 的證書(shū),Elasticsearch 的證書(shū)可以通過(guò)命令行來(lái)獲取,先在 Sealos 桌面中打開(kāi) “終端” App,然后執(zhí)行以下命令獲取證書(shū):
kubectl get secret elasticsearch-master-certs -o jsonpath="{.data.ca\.crt}"|base64 -d
Elasticsearch 的用戶名密碼可以通過(guò)以下命令獲?。?/p>
$ kubectl get secret elasticsearch-master-credentials -o jsonpath="{.data.username}"|base64 -d && echo
elastic
$ kubectl get secret elasticsearch-master-credentials -o jsonpath="{.data.password}"|base64 -d && echo
xurcwgjxpfztmgjquufyyiml
至此簡(jiǎn)單的 Demo 已經(jīng)完成了,后續(xù)我們需要做的就是持續(xù)地向我們的向量數(shù)據(jù)庫(kù)中添加更多文檔的向量化數(shù)據(jù),通過(guò)這種方式,我們可以構(gòu)建起一個(gè)功能強(qiáng)大的知識(shí)庫(kù)。當(dāng)用戶提問(wèn)時(shí),先將用戶問(wèn)題轉(zhuǎn)換成向量數(shù)據(jù),然后在向量數(shù)據(jù)庫(kù)中找到最相似的文檔,將文檔作為上文輸入到大模型中,最后大模型輸出答案。我們的明星項(xiàng)目 FastGPT 就是這樣做的哦。另外不難看出 Bing Chat 也是異曲同工。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-747067.html
總結(jié)
通過(guò)將 Laf 集成到 Sealos 云操作系統(tǒng)中,可以更高效地利用云操作系統(tǒng)的資源。用戶可以直接在 Laf 中調(diào)用 Sealos 提供的各種數(shù)據(jù)庫(kù)和服務(wù),如 MySQL、PostgreSQL、MongoDB 和 Redis 等,以及消息隊(duì)列和微服務(wù),實(shí)現(xiàn)資源的最大化利用。這種集成方式使得 Laf 成為了一個(gè)功能更加全面的 Serverless 平臺(tái)。尤其是在后端能力方面,這種集成提供了一個(gè)無(wú)縫的解決方案,彌補(bǔ)了傳統(tǒng) Serverless 平臺(tái)的不足。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-747067.html
到了這里,關(guān)于函數(shù)計(jì)算的新征程:使用 Laf 構(gòu)建 AI 知識(shí)庫(kù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!