ChatGPT 的出現(xiàn)讓大模型再一次成為業(yè)界的關(guān)注熱點(diǎn),然而,并不是每個(gè)組織都要去訓(xùn)練及生成大模型的,而且各個(gè)組織的技術(shù)積累和計(jì)算資源也不太允許這樣去做。更多的時(shí)候, 我們還是基于大模型開發(fā)業(yè)務(wù)應(yīng)用。所謂智能原生(AI Native),往往是指那些沒有大模型就無法成立的應(yīng)用,那是一些新的業(yè)務(wù)機(jī)會(huì)和挑戰(zhàn)。很多時(shí)候, 我們還只是Applied AI, 即通過AI 尤其是大模型為應(yīng)用賦能。
不論是AI 原生還是AI 賦能的應(yīng)用,都會(huì)面臨如何構(gòu)建基于大模型APP 的問題,基于大模型的App 在系統(tǒng)架構(gòu)和開發(fā)方式上有什么不同呢?
1. 試圖理解LLM 的能力邊界
AI 并不神秘, 也不存在迷信。應(yīng)用任何一種技術(shù)都應(yīng)該了解它的能力邊界,不但知道它能干什么,還要知道它不能干什么,或者至少要知道這種技術(shù)當(dāng)前的局限是什么。
1.1 LLM 的基本能力
到目前為止,大模型的主要能力如下:
使用LLM進(jìn)行語言理解和處理,而不是作為知識(shí)源
LLM是在互聯(lián)網(wǎng)上的大量文本數(shù)據(jù)上進(jìn)行預(yù)訓(xùn)練的,這些訓(xùn)練數(shù)據(jù)為大模型提供了知識(shí)。這也允許大模型在廣泛的任務(wù)中進(jìn)行泛化,然后下游進(jìn)行微調(diào)。
在構(gòu)建基于大模型的App時(shí),很容易將這些LLM簡單地用作知識(shí)/事實(shí)源(即搜索引擎)。實(shí)際上,我們應(yīng)該利用LLM強(qiáng)大的語言理解和處理能力。這將允許它“理解”用戶請(qǐng)求并提供“響應(yīng)”。它應(yīng)該提供與目標(biāo)應(yīng)用程序相關(guān)的知識(shí)和數(shù)據(jù),并且只應(yīng)從我們提供的數(shù)據(jù)返回事實(shí)/信息。
LLM也可以用于基本的推理
除了語言理解之外,在逐步提示下工作時(shí),一些LLM在基本推理方面的表現(xiàn)也不錯(cuò)。這可以讓我們利用LLM將用戶請(qǐng)求/響應(yīng)分解為較小的任務(wù)。
使用LLM進(jìn)行審查,評(píng)估和反饋
LLM在審查文本并報(bào)告其中的問題方面比從頭開始生成文本要有效得多。因此,我們盡可能多地使用這種技術(shù),將LLM的輸出發(fā)送回LLM并要求它反復(fù)檢查輸出。
使用LLM進(jìn)行文本轉(zhuǎn)換,擴(kuò)展,摘要
這是NLP自身的能力,將非結(jié)構(gòu)化文本轉(zhuǎn)換為JSON格式,反之亦然,擴(kuò)展短文本或者摘要長文本。
1.2 讓LLM 回答它無法知道的問題
在老碼農(nóng)看來, LLM 體現(xiàn)出的涌現(xiàn)能力仍然是基于現(xiàn)有數(shù)據(jù)推理的潛在關(guān)系,真正的無中生有往往是幻覺的來源。一般來說,我們有兩種不同的方法來讓大語言模型回答LLM無法知道的問題:模型微調(diào)和上下文注入。
將預(yù)訓(xùn)練模型調(diào)優(yōu)的過程稱為Fine-tuning,指的是使用額外的數(shù)據(jù)對(duì)現(xiàn)有的語言模型進(jìn)行訓(xùn)練,以優(yōu)化其針對(duì)特定任務(wù)的表現(xiàn)。與從頭開始訓(xùn)練語言模型不同,我們使用已經(jīng)預(yù)訓(xùn)練過的模型,如LLama,并通過添加特定于用例的訓(xùn)練數(shù)據(jù)來調(diào)整模型以適應(yīng)特定任務(wù)的需求。微調(diào)是調(diào)整模型以適應(yīng)特定任務(wù)的一種方式,但它并不能真正向模型中注入新的領(lǐng)域知識(shí)。這是因?yàn)樵撃P鸵呀?jīng)在大量的通用語言數(shù)據(jù)上進(jìn)行了訓(xùn)練,而特定領(lǐng)域數(shù)據(jù)通常不足以取代模型已學(xué)習(xí)到的內(nèi)容。換句話說,微調(diào)幫助模型適應(yīng)了其語言交流的方式,但不一定是它所傳達(dá)的內(nèi)容。
使用上下文注入時(shí),我們不修改語言模型,而是專注于修改提示本身并將相關(guān)上下文插入到提示中,其工作原理可能是這樣的:
因此,需要思考如何為提示語提供正確的信息, 需要一個(gè)能夠識(shí)別最相關(guān)數(shù)據(jù)的過程。通過使用嵌入技術(shù),我們可以將文本轉(zhuǎn)換為向量,從而在多維嵌入空間中表示文本。在空間中距離較近的點(diǎn)通常在相似的上下文中使用。為了避免相似性搜索耗時(shí)過長,一般會(huì)將向量存儲(chǔ)在向量數(shù)據(jù)庫中并進(jìn)行索引。
2. 基于大模型 API 的簡單應(yīng)用構(gòu)建所面臨的問題
構(gòu)建大模型App 最直接的方式是在LLM API上創(chuàng)建一個(gè)簡單的應(yīng)用程序?qū)?,可以將LLM與應(yīng)用程序的用例、數(shù)據(jù)和用戶會(huì)話聯(lián)系起來,可用于維護(hù)與用戶的先前交互的記憶和狀態(tài),或?qū)⒛繕?biāo)分解為較小的任務(wù)和子任務(wù)。
但是,在LLM之上構(gòu)建簡單的應(yīng)用程序?qū)哟嬖谥恍┎蛔悖?/p>
- 對(duì)用戶的響應(yīng)將是不可預(yù)測(cè)的,并且會(huì)包含幻覺。
- 響應(yīng)將不與目標(biāo)應(yīng)用程序的數(shù)據(jù)和用例相關(guān)。
- 無法為自己的產(chǎn)品建立護(hù)城河,任何人都可以輕松地實(shí)現(xiàn)相同的結(jié)果。
- LLM API 的成本較高,而且可能相當(dāng)高。
- LLM是無狀態(tài)的,沒有代理功能。
相反,我們需要使用自己的專有數(shù)據(jù)和知識(shí)構(gòu)建護(hù)城河,需要減少不必要的調(diào)用,并在可能的情況下使用更便宜的模型,還需要迭代地編排和自動(dòng)化底層LLM,以改進(jìn)任務(wù)規(guī)劃和推理能力。
那么,面對(duì)基于大模型的App, 是否存在通用性或具有指導(dǎo)性的參考架構(gòu)呢?
3. 大模型App 的系統(tǒng)架構(gòu)思考
基于LLM 的應(yīng)用開發(fā)框架(例如LangChain)提供了圍繞大模型構(gòu)建應(yīng)用程序的結(jié)構(gòu)化方法。但是,這里從抽象層嘗試給出大模型App 的系統(tǒng)架構(gòu)。
3.1 應(yīng)用編排器
編排器簡單地位于應(yīng)用程序棧的下方,并將其他模塊連接在一起。其中,構(gòu)建多租戶組件非常重要。這將確保:
- 為每個(gè)用戶進(jìn)行個(gè)性化設(shè)置
- 隱私保護(hù),確保只為正確的用戶檢索記憶,上下文等。
而且,以下的每個(gè)模塊都需要考慮多個(gè)多租戶實(shí)例的設(shè)計(jì)。
3.2 任務(wù)計(jì)劃器
一個(gè)不錯(cuò)的方法是獲得用戶的請(qǐng)求/目標(biāo),并使用模型將其分解為子任務(wù)。每個(gè)子任務(wù)可以根據(jù)應(yīng)用程序進(jìn)一步分解為較小的任務(wù)/目標(biāo)。這是一個(gè)持續(xù)的過程,隨著用戶完成目標(biāo),LLM可以用于擴(kuò)展當(dāng)前任務(wù)和子任務(wù),或者修剪不再必要的任務(wù)。許多框架和開源項(xiàng)目都提供此類功能,一個(gè)典型的示例可能是AutoGPT。
一般地,可以按以下方式進(jìn)行處理:
- 獲取用戶目標(biāo)并將其發(fā)送到具有良好推理功能的LLM
- 提示LLM將其分解為子任務(wù)并返回為JSON列表
- 將子任務(wù)保存到數(shù)據(jù)庫中
- 應(yīng)用程序可以根據(jù)子任務(wù)更新用戶界面
- 根據(jù)需要迭代為較小的子任務(wù)
3.3 上下文數(shù)據(jù)向量存儲(chǔ)
一般地,我們可能不應(yīng)該在目標(biāo)應(yīng)用程序中使用預(yù)訓(xùn)練的LLM知識(shí),而是為每個(gè)提示提供任何必要的上下文信息,并指定LLM僅基于提示中包含的信息進(jìn)行響應(yīng)。這將確保響應(yīng)與目標(biāo)應(yīng)用程序和用例相關(guān)。通過使用向量嵌入和向量數(shù)據(jù)庫,可以根據(jù)語義檢索每個(gè)提示的子集的上下文數(shù)據(jù),從而實(shí)現(xiàn)更高的效率,提升性能并降低成本。
該方法如下所示:
- 每當(dāng)有新的上下文信息時(shí),將其分成若干部分,并使用LLM生成向量嵌入。然后將嵌入存儲(chǔ)在向量數(shù)據(jù)庫中,還將在每個(gè)嵌入中存儲(chǔ)附加信息(例如URL、圖像、源文本等)。
- 在向LLM發(fā)送請(qǐng)求之前,始終將請(qǐng)求作為查詢發(fā)送到向量存儲(chǔ)中。獲取前N個(gè)相關(guān)結(jié)果并將它們添加到請(qǐng)求提示中,指定LLM應(yīng)僅使用提示中的信息,然后提交提示詞。
- 收到響應(yīng)后,將其與發(fā)送的上下文數(shù)據(jù)進(jìn)行比較,確保沒有幻覺并且它與目標(biāo)應(yīng)用程序的數(shù)據(jù)相關(guān)。
- 進(jìn)行迭代,其中響應(yīng)用于生成對(duì)向量數(shù)據(jù)庫的新查詢,然后使用結(jié)果作為下一個(gè)LLM的提示詞。
- 還可以要求LLM生成一個(gè)查詢到向量存儲(chǔ),以獲取所需的附加信息。
需要要注意的,從向量數(shù)據(jù)庫接收到的記錄除了文本之外還包含其他數(shù)據(jù),可能是圖像、URL、視頻URL等,目標(biāo)應(yīng)用程序可以使用此信息增強(qiáng)用戶界面的響應(yīng)。
3.4 記憶型數(shù)據(jù)的向量存儲(chǔ)
記憶型數(shù)據(jù)的向量存儲(chǔ)類似于上下文數(shù)據(jù)的向量存儲(chǔ),但是,它由先前使用應(yīng)用程序生成的LLM提示和響應(yīng)的鍵值對(duì)進(jìn)行填充。目標(biāo)是允許LLM參考以前的交互,以個(gè)性化用戶需求并引導(dǎo)走向正確的方向。
記憶數(shù)據(jù)也可以使用時(shí)間戳、位置等進(jìn)行標(biāo)記,以允許過濾或?qū)ο嚓P(guān)記憶數(shù)據(jù)的修剪。
一般用例:
- 根據(jù)用戶在用戶界面中的操作,發(fā)出請(qǐng)求。請(qǐng)求轉(zhuǎn)換為向量嵌入,并發(fā)送到內(nèi)存向量存儲(chǔ)中以檢索任何相關(guān)的記憶數(shù)據(jù)。
- 記憶可能包括特定的交互,例如,用戶發(fā)表過評(píng)論
- 然后將記憶與用戶請(qǐng)求以及從上下文存儲(chǔ)中提取的任何上下文一起添加到提示中。在提示中,記憶可能以“這里是以前的交互列表,請(qǐng)?jiān)陧憫?yīng)時(shí)考慮這些,以確保您遵守以前的請(qǐng)求和偏好”的文本為前綴。
- 然后,將提示發(fā)送到LLM。
- 生成的提示和響應(yīng)在當(dāng)前會(huì)話期間轉(zhuǎn)換為向量嵌入,并存儲(chǔ)在內(nèi)存向量存儲(chǔ)中。只要它們?cè)谖磥淼腖LM交互中具有語義相關(guān)性,就會(huì)檢索它們。
3.5 提示管理器
很多時(shí)候,尤其是相對(duì)復(fù)雜的場(chǎng)景中,提示詞往往冗長而復(fù)雜。構(gòu)建一個(gè)提示管理器,它可以接受許多屬性并以正確的結(jié)構(gòu)構(gòu)建提示。
另外,為了能夠在目標(biāo)應(yīng)用程序中使用響應(yīng),必須能夠預(yù)測(cè)將收到的格式。最好的方法是在提示詞中提供預(yù)期的JSON格式。這種JSON格式可以包括要修改的UI元素、要采取的操作等屬性。
3.6 響應(yīng)管理器
響應(yīng)管理器類似于提示管理器,但它用于驗(yàn)證響應(yīng),可以處理以下內(nèi)容:
- 檢查響應(yīng)格式以確保符合提示中發(fā)送的要求。(例如,驗(yàn)證JSON格式)
- 驗(yàn)證響應(yīng)是否符合加載的上下文和內(nèi)存數(shù)據(jù),以確保其不是幻覺。
- 將響應(yīng)發(fā)送回LLM,以及原始提示,并要求LLM決定我們是否有良好的質(zhì)量響應(yīng)。
- 檢查LLM的響應(yīng)是否存在不良內(nèi)容、負(fù)面情緒等。
如果響應(yīng)管理器認(rèn)為當(dāng)前的LLM響應(yīng)存在問題,那么它可以生成一個(gè)帶有拒絕原因的新提示,并將其提交給LLM以獲取新的響應(yīng)。這可以迭代地進(jìn)行,直到響應(yīng)滿足所有標(biāo)準(zhǔn)和安全檢查。
3.7 效果評(píng)估器
LLM可以很好地評(píng)估用戶的提示詞并根據(jù)預(yù)定義的標(biāo)準(zhǔn)對(duì)其進(jìn)行評(píng)分。一種常見的方式是在完成任務(wù)后,提示用戶提供反饋,然后通過這些提示,LLM根據(jù)以下標(biāo)準(zhǔn)評(píng)估反饋:
- 用戶是否報(bào)告了任何不滿?(-1=未知,0=沒有不滿,10=嚴(yán)重不滿)
- 用戶是否喜歡這個(gè)體驗(yàn)?(-1=未知,0=完全不喜歡,10=非常喜歡)
- 用戶是否感覺完成了目標(biāo)?(-1=未知,0=沒有,10=完全達(dá)到)
- 等等。
最后,LLM將以JSON格式返回反饋,評(píng)估結(jié)果可以存儲(chǔ)在數(shù)據(jù)庫中,還可以使用這些結(jié)果構(gòu)建新的功能。
3.8 大模型管理器
每一種大模型模型都有著自己的優(yōu)缺點(diǎn),我們可能需要利用多個(gè)LLM來進(jìn)行應(yīng)用程序的開發(fā),以充分利用它們的優(yōu)勢(shì)。選擇要使用的模型時(shí),一般的考慮因素如下:
- LLM推理成本和API成本
- 針對(duì)不同的用例場(chǎng)景篩選大模型的類型。例如,使用編碼器模型進(jìn)行情感分析,使用解碼器模型進(jìn)行文本生成或聊天,對(duì)于基本的文本操作,選擇較小、更快、更便宜的模型。
- 文本嵌入模型用于語義搜索和生成向量嵌入
- 微調(diào)模型以在特定任務(wù)上獲得更好的性能
- 指令微調(diào)模型可以充當(dāng)?shù)闹?,例如RLHF的應(yīng)用
LLM提供商一般會(huì)允許我們對(duì)每個(gè)請(qǐng)求選擇要使用的模型,一個(gè)請(qǐng)求的輸出也可以鏈接到第二個(gè)模型進(jìn)行文本操作或?qū)彶?。例如,?dāng)需要重要推理任務(wù)時(shí),可以使用GPT-4,然后使用GPT-3進(jìn)行基本文本操作或完成。這將有助于控制API成本,并確保為每個(gè)請(qǐng)求使用最合適的模型。我們還可以為某些任務(wù)使用開源更便宜的模型。
通過大模型管理器,可以將API和模型使用之間的差異從應(yīng)用程序中抽象出來,還可以使用LLM的插件方法,輕松引入新模型。
4. 構(gòu)建大模型App 的簡單示例
構(gòu)建一個(gè)基于大模型的app,大概可以采用以下步驟:
- 在待創(chuàng)建或已有的App中引入用戶顯式用自然語言進(jìn)行交互的入口(也可以采用隱式方式);
- 明確所需解決的問題領(lǐng)域空間,加載目標(biāo)領(lǐng)域的文檔內(nèi)容,并對(duì)文本進(jìn)行分割;
- 采用嵌入模型,將文本數(shù)據(jù)生成向量;
- 構(gòu)建面向向量存儲(chǔ)的向量數(shù)據(jù)庫并構(gòu)建索引;
- 選擇目標(biāo)模型,將API 引入系統(tǒng);
- 創(chuàng)建 prompt 模版,并支持配置和優(yōu)化;
4.1 引入自然語言交互
每個(gè)App 都有相應(yīng)的用戶交互設(shè)計(jì)(UI/UX),為了通過大模型為應(yīng)用賦能,面對(duì)非結(jié)構(gòu)化數(shù)據(jù),例如工作描述、簡歷、電子郵件、文本文檔、PowerPoint 幻燈片、語音錄音、視頻和社交媒體, 自然語言交互有著廣泛的應(yīng)用場(chǎng)景。
自然語言的引入一般會(huì)以助手的方式呈現(xiàn),可以直接采用chat的方式,簡單而言,是在產(chǎn)品中引入了可以查看歷史記錄的輸入框。
4.2 文檔加載與文件分割
有很多現(xiàn)成的文檔加載器,可以用于HTML頁面、S3、PDF、Office文檔等的加載器。一般地,可以利用企業(yè)中現(xiàn)有的文集存儲(chǔ)或者知識(shí)庫,采用批處理的方式完成目標(biāo)數(shù)據(jù)集的加載, 然后采用事件觸發(fā)的方式實(shí)現(xiàn)實(shí)時(shí)加載。
然后,需要將文本分成較小的文本塊。每個(gè)文本塊在嵌入空間中表示一個(gè)數(shù)據(jù)點(diǎn),使計(jì)算機(jī)能夠確定這些塊之間的相似性。常見的方式是使用較大的文本塊,但也可以進(jìn)行一些實(shí)驗(yàn),找到最適合用例的最佳大小。請(qǐng)記住,每個(gè)LLM都有token限制(GPT 3.5的令牌限制為4000個(gè)),需要確保整個(gè)提示的token數(shù)不超過單次LLM API 調(diào)用的token限制。
4.3 文本數(shù)據(jù)的向量生成
我們需要將文本轉(zhuǎn)換為可理解和可比較算法的形式,必須找到一種將人類語言轉(zhuǎn)換為比特和字節(jié)的數(shù)字形式的方法。嵌入模型通過分析單詞通常出現(xiàn)的上下文來嘗試學(xué)習(xí)這個(gè)目標(biāo)。嵌入式模型為我們提供了嵌入空間中每個(gè)單詞的向量。最后,通過用向量表示它們,進(jìn)而能夠進(jìn)行數(shù)學(xué)計(jì)算,例如計(jì)算單詞之間的相似度作為數(shù)據(jù)點(diǎn)之間的距離。
將文本轉(zhuǎn)換為嵌入,常見的方法有Word2Vec,GloVe,fastText或ELMo。以Word2Vec為例,為了在嵌入空間中捕捉單詞之間的相似性,Word2Vec使用了一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)。實(shí)際上,現(xiàn)有的模型要大得多,因此以更高維度的空間表示單詞,例如OpenAI的Ada嵌入模型使用了1536個(gè)維度,訓(xùn)練過程結(jié)束后,各個(gè)權(quán)重就描述了在嵌入空間中的位置。這些預(yù)訓(xùn)練向量使我們能夠以如此精確的方式捕捉單詞及其意義之間的關(guān)系,以至于我們可以對(duì)它們進(jìn)行計(jì)算。我們還可以選擇不同的嵌入模型,如Ada、Davinci、Curie和Babbage。其中,Ada-002目前是最快且成本最低的模型,而Davinci通常能夠提供較高的準(zhǔn)確性和性能。
我們使用嵌入模型的目標(biāo)是將文本塊轉(zhuǎn)換為向量。在Ada-002中,這些向量具有1536個(gè)輸出維度,這意味著它們表示一個(gè)在1536維空間中具有特定位置或方向的點(diǎn)。將文本塊和用戶的問題表示為向量時(shí)為了確定兩個(gè)數(shù)據(jù)點(diǎn)之間的相似度,需要計(jì)算它們?cè)诙嗑S空間中的接近程度,這可以通過距離度量來實(shí)現(xiàn)。
4.4 構(gòu)建向量數(shù)據(jù)庫并創(chuàng)建索引
將文本數(shù)據(jù)轉(zhuǎn)換為向量只是第一步,為了能夠高效地搜索我們的嵌入向量,我們需要將它們存入向量數(shù)據(jù)庫并進(jìn)行索引。
向量數(shù)據(jù)庫是一種專為存儲(chǔ)和檢索可以表示為向量的大量數(shù)據(jù)而優(yōu)化的數(shù)據(jù)存儲(chǔ)類型。這些類型的數(shù)據(jù)庫允許根據(jù)各種標(biāo)準(zhǔn)(如相似度度量或其他數(shù)學(xué)運(yùn)算)高效地查詢和檢索數(shù)據(jù)子集。索引是向量數(shù)據(jù)庫的重要組成部分,提供了一種將查詢映射到向量存儲(chǔ)中最相關(guān)文檔或項(xiàng)的方法,而不必計(jì)算每個(gè)查詢與每個(gè)文檔之間的相似度。
常見的一些向量數(shù)據(jù)庫如下所示:
4.5 模型選擇與API 應(yīng)用
當(dāng)選擇模型的時(shí)候,可以遵循上文提到的那些原則。以O(shè)pen AI 平臺(tái)為例,Text-davinci-003模型可能目前是最大且最強(qiáng)大的模型。另一方面,像Text-ada-001這樣的模型更小、更快速,而且更具成本效益。與最強(qiáng)大的模型Davinci相比,Ada更便宜。因此,如果Ada的性能滿足我們的需求,不僅可以省錢,還可以實(shí)現(xiàn)更短的響應(yīng)時(shí)間。
我們也可以先使用Davinci進(jìn)行嘗試,然后評(píng)估是否也可以使用Ada獲得足夠好的結(jié)果。在模型選擇后,首先要設(shè)置API key獲得訪問權(quán)限,然后再嘗試設(shè)置一些首選項(xiàng),在不同的參數(shù)中進(jìn)行一些調(diào)試。
4.6 Prompt 模版的配置優(yōu)化與使用
Prompt提示指定了模型回答問題所需的模式即所需的行為風(fēng)格,希望LLM在其中生成答案。將Prompt提示應(yīng)用在LLM上,這里有一些簡單的示例:
- 摘要生成:“將以下文本總結(jié)為3段供高管閱讀:[文本]”
- 知識(shí)提取:“基于這篇文章:[文本],在購買房屋之前人們應(yīng)該考慮哪些因素?”
- 寫作內(nèi)容(例如郵件、信息、代碼):“給[人名]發(fā)送一封郵件,詢問項(xiàng)目文檔的進(jìn)展情況。使用非正式、友好的語氣?!?/li>
- 語法和風(fēng)格改進(jìn):“將這段文本改正為標(biāo)準(zhǔn)英語,并改變語氣為更友好的:[文本]”
- 分類:“將每條消息分類為訂單的類型:[文本]”
除了對(duì)Prompt及其模版的管理和使用,我們還可以對(duì)大模型的限制,只允許LLM 利用指定數(shù)據(jù)庫中存儲(chǔ)的信息。這個(gè)限制使我們能夠提供LLM生成回答所依賴的來源,這對(duì)于可追溯性和建立信任至關(guān)重要。此外,它還幫助解決了生成不可靠信息的問題,并能夠提供可以在企業(yè)環(huán)境中用于決策的答案。
5 小結(jié)
當(dāng)然,我們可以利用一些現(xiàn)有的或者發(fā)展中的應(yīng)用框架或者平臺(tái),例如開源框架LangChain。如果覺得LangChain 用起來不夠簡潔, 可以嘗試一下LLMFarm,LLMFarm可以簡單地類比為可視化的LangChain。如果仍然覺得復(fù)雜, 還可以嘗試使用藍(lán)鶯IM 基于大模型的企業(yè)知識(shí)庫。
因此,構(gòu)建一個(gè)基于大模型的應(yīng)用并沒有想象中的那么困難, 但充分利用大模型的能力來為業(yè)務(wù)賦能卻不是那么容易,仍然需要探索并尋找最佳實(shí)踐。