探索人工智能的世界:構建智能問答系統之前置篇
引言
在開始開發之前,我們首先要了解我們將會接觸到的編程語言和組件。我本身是一名Java開發者,雖然也有接觸過C、C++和PHP開發語言,但在工作中使用的并不多。因此,為了本次開發,我們選擇了Python作為開發語言。大家都是從零開始,只要你有編程知識,就可以和我一起學習。回顧一下我們需要開發的簡易版架構圖:
圖片
前置知識
接下來,我們來看一下我們需要用到的知識點: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在自然語言處理領域的技術實力不容小覷,對于語言相關的應用開發具有巨大的幫助和潛力。
項目簡易結構
下面是我們的目錄結構示例,以簡單的業務開發流程為基礎,你可以根據實際需求進行優化:
圖片
.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的強大功能實現更準確和自然的回答。這個項目將幫助我們深入了解各種技術和工具的使用,并提供一個清晰的業務開發流程。