筆者之前的文章,提到使用 AI 工具回答 ABAP 相關問題時,經常會收到一本正經的胡說八道的現象:
為何 ChatGPT 等大語言模型,回答 SAP 開發相關問題時,經常一本正經的胡說八道?
這種現象的正式術語是大模型的幻覺現象。
對于大語言模型而言,它是一種基于上下文的生成模型,其預測是基于先前的文本序列。在實際應用中,由于模型的復雜性和對大量數據的學習,它可能會在生成文本時添加一些虛構的元素。
這并不是模型有意為之,而是因為在訓練時它學到了語言的統計規律,有時在生成文本時可能產生一些不合邏輯或與實際情況不符的內容。
模型參數中存儲的知識是固定且有限的,而現實世界的信息卻在持續更新。大模型的幻覺現象,在回答需要最新數據支撐的問題時尤為明顯。
減少或者避免大模型幻覺現象的一種解決方案就是 RAG(Retrieval-Augmented Generation).
當用戶對一個通過 RAG 增強的大語言模型提問時,系統首先通過檢索模塊(Retriever)從外部知識庫中查找相關文檔(下圖圖例2),然后將檢索結果與原始問題共同輸入生成模塊(Generator)進行答案合成(下圖圖例4)。
同模型參數中固化的知識不同,外部知識庫的內容(下圖右下角的 New Content)可以實時更新,從而讓大語言模型提供實時的準確回復。外部知識庫通常存儲于向量數據庫中,即下圖圖例的 Vector Database.
筆者之前的文章使用騰訊 HAI 5 分鐘內部署一個私人定制的 DeepSeek,介紹了采用私有部署方式運行 DeepSeek 的步驟。
對于企業級用戶而言,大模型的私有部署,在數據安全性、響應速度、可定制化、長期成本以及可靠性等多個方面都有著顯著優勢。
對于 AI 學習者來說,可以選擇本地部署或者在某個云服務提供商的基礎設施(IaaS)上進行私有部署的嘗試。
筆者現在使用的筆記本電腦,本地部署滿血 DeepSeek 比較吃力,所以我選擇了騰訊云 HAI,這樣就不用自己掏錢升級硬件了。
本文我們繼續使用騰訊 HAI,在上面手動安裝 DeepSeek,Ollama 和 AnythingLLM 這三個工具,然后手動上傳 SAP 文檔,來演示如何基于 RAG 架構,打造自己的個人 SAP 知識庫。
登錄騰訊 HAI 控制臺,新建一個 Windows Server 實例:
https://console.cloud.tencent.com/hai
使用 Windows 自帶的 Remote Desktop Connection 登錄到創建好的 HAI 實例上。
從 Ollama 官網下載安裝文件并安裝。
Ollama 是一個用于在本地環境運行大語言模型的工具。
它允許開發者在本地 GUI 或者命令行加載和運行各種 AI 模型,而無需深入理解底層的機器學習框架。
Ollama 設計思路類似于 Docker,通過它管理的 AI 模型類似于 Docker Image,但 Ollama 專門針對 AI 模型進行了優化。
Ollama 安裝成功之后,使用命令行 ollama run deepseek-r1:1.5b, 這個命令會自動下載 DeepSeek 模型到 HAI 并運行。1.5b 意思是下載參數個數為 15 億的 DeepSeek 版本,為了節省時間,筆者選擇了這個文件尺寸為 1.1 GB 的最精簡的模型。
耐心等待下載結束,看到命令行里彈出 think 提示符,輸入 who are you? 得到 DeepSeek 的自我介紹回復,說明 Ollama 和自動下載的 DeepSeek R1 已經正常工作了。
既然是打造私人的 SAP 知識庫, 我們就需要給 DeepSeek 喂一些外部文檔作為知識庫的文檔素材。
在 Bing 搜索引擎里使用 site:sap.com filetype: pdf 隨便搜一些 SAP 官方發布的 PDF 來測試。
在實際使用場景中,企業級客戶可以將自己的私密數據,喂給本地部署的大模型,而不用擔心隱私泄漏的問題。
這里我從 Bing 的搜索結果下載了一個名叫 SAP S4HANA private cloud - implementation guide.pdf 的文件。
下一步,下載 AnythingLLM 并安裝。
AnythingLLM 是一個開源的 AI 工具,能夠方便地將用戶提供的各種格式的文檔,嵌入到自定義 AI 模型中,使其在同用戶對象中作為可參考上下文的一部分。
這意味著通過 AnythingLLM, AI 模型在回答問題時,可以檢索和分析用戶提供的文檔,將其內容整合作為最終的輸出,即本文開頭部分介紹的 RAG 工作方式。
AnythingLLM 安裝完畢之后,像使用 ABAP Development Tool 一樣,新建一個工作區(Workspace):
點擊「聊天設置」:
還記得我們剛才下載的 Ollama 和通過 ollama run 命令下載的 DeepSeek R1 嗎?在工作區 LLM 提供者的下拉菜單中,找到通過 Ollama 管理的 DeepSeek R1.
這個設置的意思是,我們接下來可以通過 AnythingLLM 提供的 GUI 窗口,同 DeepSeek 對話,可以同 Ollama 自帶的命令行窗口說再見了。
接下來通過向量數據庫來上傳并存儲用戶提供的文檔。點擊上傳圖標,打開上傳對話框:
點擊 Upload 區域,將剛才從 Bing 搜索下載的 SAP S/4HANA private cloud PDF 文檔上傳:
待文檔上傳完畢,點擊 Save and Embed 按鈕,將文檔內容轉換成向量數據并執行嵌入操作。
向量數據庫是一種用于存儲和查詢高維向量數據的數據庫,其核心功能是提供高效的相似度搜索,使得查詢向量能夠找到與之最接近的向量。
相比傳統關系型數據庫(如 MySQL、PostgreSQL),向量數據庫更適合存儲和檢索非結構化數據,如文本、圖像、音頻等。
在 RAG 架構中,向量數據庫的作用類似于一個知識庫,它存儲了大量文本片段的嵌入(Embeddings),當用戶輸入查詢時,模型會將查詢轉換為向量,并在數據庫中檢索最相關的向量,進而找到對應的文本內容。這種方式大幅提高了生成式 AI 的可控性和可解釋性。
文檔嵌入(Embedding)是將文本數據轉換為向量的過程。這一過程的核心是將文本內容映射到一個高維向量空間中。相似的文本在該空間中的距離較近,而不相關的文本距離較遠。
當然在實際企業級應用中,除了小規模的人工手動上傳文檔外,AnythingLLM 也支持通過 Data Connection 進行批量上傳大規模文檔,比如批量上傳某個 Github Repo 里的文件。這種模型下,AnythingLLM 讀取 Github 倉庫內容的方式,通過 Access Token 完成。
等我們上傳的文件出現在工作區右邊區域后,說明文檔的向量化即嵌入操作已經完成。
此時,我們回到 AnythingLLM 同 DeepSeek 的對話窗口,提出一個問題:
What is embedded EWM?
DeepSeek 給出的回答的確是基于我們剛剛上傳的 PDF 文件來完成的。
這一點可以從 DeepSeek 回復的 Citation 即引用區域得到證實,該區域顯示本次回答引用了 SAP S4HANA private cloud edition.pdf 這個文件。
通過本文展示的步驟,即使是一個不了解大語言模型底層實現細節的普通用戶,借助 Ollama 和 AnythingLLM 這兩個工具,也能輕松完成 DeepSeek 的本地部署,并打造自己的私人知識庫。
SAP 在官方社區上也發布了其在 AI 和 RAG 領域很多積極的嘗試,筆者后續的文章會繼續給大家介紹: