探索人工智慧的世界:構建智慧問答系統之前置篇

努力的小雨發表於2023-12-05

引言

在開始開發之前,我們首先要了解我們將會接觸到的程式語言和元件。我本身是一名Java開發者,雖然也有接觸過C、C++和PHP開發語言,但在工作中使用的並不多。因此,為了本次開發,我們選擇了Python作為開發語言。大家都是從零開始,只要你有程式設計知識,就可以和我一起學習。回顧一下我們需要開發的簡易版架構圖:

image

前置知識

接下來,我們來看一下我們需要用到的知識點:Python 3.10版本、Git、Embedding、Hugging Face、Milvus、Langchain、OpenAI和Docker Desktop。在開發過程中,我們將使用Visual Studio Code作為客戶端,並安裝以下外掛:Dev Container和Jupyter。請牢記這些內容,它們都是我們開發中需要使用到的,這樣你就能對開發這個知識庫有一個清晰的認識了。

需要掌握

Python:選擇Python 3.10版本是因為我在嘗試最新版本時遇到了一些報錯,所以我決定降低版本,以確保開發過程儘可能順利。個人而言,我發現Python具有簡潔而優雅的語法,且具備廣泛的應用領域,從資料分析到機器學習都可以使用它進行開發。

Git:如果你只是在本地執行程式碼而不需要與他人協作,那麼可能不需要使用Git。然而,作為一個團隊開發工具,Git提供了版本控制和協作功能,可以讓多個開發者在同一個專案中進行並行開發,非常方便。

Docker:我對Docker有較多的接觸,所以在這個專案中使用了它。Docker是一個開源的容器化平臺,可以透過容器化技術將應用程式和其依賴項打包成一個獨立的可移植映象。使用Docker可以提供一致的開發環境,並且能夠輕鬆部署到不同的伺服器上。

Embedding:嵌入是一種常見的機器學習技術,它可以將高維的資料對映到低維空間中,從而提取出資料中的有用特徵。在這個專案中,我們可能會使用嵌入技術來處理文字或影像資料,以便進行後續的分析和處理。

Hugging Face:Hugging Face是一個活躍的開源社群,提供了許多預訓練的模型和工具,可以用於文字生成、情感分析、問答系統等任務。在這個專案中,我們會利用Hugging Face的提供的向量模型來實現一些自然語言處理的功能。

Milvus:Milvus是一個開源的向量資料庫,專門用於儲存和查詢大規模的向量資料。它提供了高效的相似度搜尋和索引構建功能,適用於許多機器學習和資料探勘任務。在這個專案中,我們會使用Milvus來儲存和查詢某些向量資料。就跟我們的MySQL資料庫是一樣的,只不過他儲存的是向量,而不是我們的欄位資料。

Langchain:當談到Langchain時,我認為它類似於Java的SDK包或者是util類,它封裝了許多API供我們呼叫。它的一個顯著特點是簡單且具有高可讀性。這意味著我們可以輕鬆地使用Langchain提供的API來實現特定功能,而不需要花費大量的時間去編寫複雜的程式碼。這樣,我們可以更專注於業務邏輯的實現,而不用過多關注底層實現細節。同時,由於API的可讀性高,我們能夠更容易地理解和使用Langchain中提供的各種功能。

OpenAI:它確實是一個非常強大的平臺。在語言模型中,OpenAI訓練的模型表現非常出色,能夠提供非常接近實際的回答。這對於聊天機器人、智慧助手等應用非常有價值。透過使用OpenAI的模型,我們可以得到更準確和自然的回答,總的來說,OpenAI在自然語言處理領域的技術實力不容小覷,對於語言相關的應用開發具有巨大的幫助和潛力。

專案簡易結構

下面是我們的目錄結構示例,以簡單的業務開發流程為基礎,你可以根據實際需求進行最佳化:

image

.devcontainer:這個資料夾是用來在Visual Studio Code中進行Docker開發的。裡面包含一個json檔案,用於指定如何構建Docker容器。

.venv:這個資料夾是執行時自動生成的,用於存放執行時編譯生成的Python虛擬環境。我們不需要手動建立或管理它。

volumes:這個資料夾也是在執行時自動生成的,用於存放執行時編譯生成的資料卷。我們不需要手動建立或管理它。

.env:這個檔案用於定義環境變數。

.gitattributes:這個檔案用於定義Git提交時的一些屬性。

.gitignore:這個檔案用於定義哪些檔案或資料夾不應該被提交到Git倉庫中。

docker-compose.yaml:這個檔案用於定義多個Docker容器的編排配置。

Dockerfile:這個檔案用於將當前專案編譯成Docker映象。

main.py:這個檔案是我們實際執行的Python程式碼。

pyproject.toml:由於Python包的安裝對版本依賴性較強,我們使用了Poetry工具來管理依賴項的安裝,而不是使用傳統的pip命令。

README.md:這個檔案是一個Markdown檔案,用於介紹我們的專案,但是對於專案開發來說不是必需的。

requirements.txt:這個檔案用於定義需要安裝的Python依賴包,我們這次不使用它。

untitled.ipynb:這個檔案是一個Jupyter Notebook檔案,類似於我們的偵錯程式模型,但是它是逐段執行的。我們稍後可以仔細研究它。

下面的一個Python檔案是我用來進行測試的,你們不需要關注它。

總結

在這個專案中,我們將使用Python作為開發語言,結合Hugging Face、Milvus、Langchain、OpenAI等工具和技術,實現一個簡易版的架構圖。透過嵌入技術處理文字和影像資料,利用Hugging Face的預訓練模型進行自然語言處理,使用Milvus作為向量資料庫進行儲存和查詢。同時,我們還會使用Langchain提供的API來簡化開發流程,並藉助OpenAI的強大功能實現更準確和自然的回答。這個專案將幫助我們深入瞭解各種技術和工具的使用,並提供一個清晰的業務開發流程。

相關文章