iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
生成式 AI

LLM與生成式AI筆記系列 第 29

Day 28: anything-llm 程式碼解讀

  • 分享至 

  • xImage
  •  

今天主要看 anything-llm 的程式碼

我先猜測性的看下主頁面下的幾個檔案。

package.json 程式碼解讀

首先是 package.json 檔。

程式碼內容解讀入下:

基本資訊

  • name: 專案名稱為 "anything-llm"。
  • version: 目前版本是 "0.2.0"。
  • description: 專案描述,表明其功能是將私有文件轉換為聊天機器人,使用現成工具和商業可行的AI技術。
  • main: 專案的主要入口檔案是 "index.js",這個檔案位於 server 那邊的資料夾。
  • type: 使用ES Modules語法。
  • author: 作者是 "Timothy Carambat (Mintplex Labs)"。
  • license: 專案使用 MIT 授權。
  • engines: 要求 Node.js 版本 >= 18。
  • private: 設定為 false,表示該專案不是私有的,可以被公開發布。

腳本 (Scripts)

這邊是指這段腳本主要執行了啥。

  • lint: 在 server, frontendcollector 目錄下執行程式碼檢查工具。
  • setup: 安裝依賴、複製環境設定檔、設置 Prisma 資料庫,並給出執行開發伺服器的提示。
  • setup:envs: 複製 .env.example 檔案到 .env 檔案,用於配置環境變數。
  • dev:server: 在 server 目錄下啟動開發伺服器。
  • dev:collector: 在 collector 目錄下啟動開發伺服器。
  • dev:frontend: 在 frontend 目錄下啟動開發伺服器。
  • prisma:generate: 使用 Prisma 產生資料庫客戶端程式碼。
  • prisma:migrate: 執行 Prisma 資料庫遷移。
  • prisma:seed: 填充 Prisma 資料庫的初始資料。
  • prisma:setup: 執行 prisma:generate, prisma:migrateprisma:seed
  • prisma:reset: 重置 Prisma 資料庫。
  • prod:server: 在 server 目錄下啟動生產伺服器。
  • prod:frontend: 在 frontend 目錄下建構生產版本的前端程式碼。
  • generate:cloudformation: 產生用於 AWS CloudFormation 部署的設定檔。
  • generate::gcp_deployment: 產生用於 GCP 部署的設定檔。
  • verify:translations: 驗證前端翻譯檔案。

總結

從這個 package.json 檔案可以看出,"anything-llm" 專案是一個包含伺服器端、前端和資料收集組件的應用程式。它使用了 Prisma 作為資料庫 ORM 工具,並支援部署到 AWS 和 GCP 雲平台。專案的開發過程中注重程式碼品質,使用了程式碼檢查工具,並提供了用於設置開發和生產環境的腳本。


index.js 程式碼解讀

在 sever檔案夾內的 index.js 程式碼解讀。

好的,讓我們來解讀一下這段 Node.js 程式碼。這段程式碼主要是在設置一個 Express 伺服器,並定義了各種 API 端點以及處理不同環境下的行為。

1. 環境變數與記錄器

  • process.env.NODE_ENV === "development": 檢查當前是否為開發環境,如果是,就從 .env.development 檔案載入環境變數,否則從 .env 檔案載入。
  • require("./utils/logger")();: 初始化並啟動一個自定義的記錄器,用於記錄應用程式的日誌。

2. 載入模組

  • express: 載入 Express.js 框架,用於建立 Web 伺服器。
  • body-parser: 載入 body-parser 中介軟體,用於解析 HTTP 請求的 body。
  • cors: 載入 cors 中介軟體,用於處理跨域請求。
  • path: 載入 Node.js 內建的 path 模組,用於處理檔案路徑。
  • 其他模組:載入各種自定義模組,用於處理 API 端點、向量資料庫、啟動伺服器等。

3. 建立 Express 應用程式

  • const app = express();: 建立一個 Express 應用程式實例。
  • const apiRouter = express.Router();: 建立一個 Express 路由器,用於組織 API 端點。
  • app.use(cors({ origin: true }));: 啟用 CORS,允許所有來源的請求。
  • app.use(bodyParser...): 使用 body-parser 中介軟體來解析不同類型的請求 body。

4. 啟動伺服器

  • if (!!process.env.ENABLE_HTTPS): 檢查是否啟用 HTTPS。
    • 如果啟用,呼叫 bootSSL 函式來啟動 HTTPS 伺服器。
    • 如果未啟用,載入 WebSocket 中介軟體,並呼叫 bootHTTP 函式來啟動 HTTP 伺服器。

5. 定義 API 端點

  • app.use("/api", apiRouter);: 將所有 /api 開頭的路徑交給 apiRouter 路由器處理。
  • 接著,程式碼呼叫一系列函式,將不同的 API 端點註冊到 apiRouter 上。

6. 處理生產環境

  • if (process.env.NODE_ENV !== "development"): 檢查當前是否為生產環境。
    • 如果是,設定靜態檔案伺服器,並處理 //robots.txt 路徑。
  • else: 如果是開發環境,新增一個用於除錯向量資料庫的 API 端點。

7. 處理 404 錯誤

  • app.all("*", ...): 處理所有未匹配的請求,返回 404 狀態碼。

總結

這段程式碼建立了一個 Express 伺服器,並根據環境變數來決定是否啟用 HTTPS。它定義了各種 API 端點,用於處理系統、工作區、聊天、嵌入、管理、邀請、工具、文件、代理 WebSocket、實驗性功能和瀏覽器擴充功能等方面的請求。在生產環境中,它還會提供靜態檔案服務,並處理 //robots.txt 路徑。


Server 資料夾下的 package.json 解讀

這個 package.json 文件,它定義了一個名為 "anything-llm-server" 的 Node.js 專案,主要功能是處理或創建聊天內容的伺服器端點。

1. 基本資訊

  • name: 專案名稱是 "anything-llm-server"。
  • version: 目前的版本是 "0.2.0"。
  • description: 專案的描述,表明它提供伺服器端點來處理或創建聊天內容。
  • main: 專案的主要入口檔案是 "index.js"。
  • author: 作者是 "Timothy Carambat (Mintplex Labs)"。
  • license: 專案使用 MIT 授權。
  • private: 設定為 false,表示該專案不是私有的,可以被公開發佈。
  • engines: 要求 Node.js 版本 >= 18.12.1。

2. 腳本 (Scripts)

  • dev: 使用 nodemon 在開發模式下啟動伺服器,並忽略 documents, vector-cache, storage, swagger 目錄的變化。
  • start: 在生產模式下啟動伺服器。
  • lint: 使用 Prettier 格式化程式碼。
  • swagger: 執行 ./swagger/init.js 腳本,可能用於生成 Swagger API 文件。

3. Prisma 設定

  • seed: 指定 node prisma/seed.js 腳本用於填充 Prisma 資料庫的初始資料。

4. 依賴

  • 生產環境依賴 (dependencies): 列出了專案在生產環境中所需的各種模組,包括:

    • 多種 AI 相關的 SDK 和函式庫,例如 Anthropic、Azure OpenAI、Google Generative AI、OpenAI、Xenova Transformers 等。
    • 多種向量資料庫的客戶端,例如 DataStax Astra、LanceDB、Pinecone、Qdrant、Milvus 等。
    • 多種 LangChain 相關的函式庫,用於構建 LLM 應用。
    • 其他常用的 Node.js 模組,例如 Express、body-parser、cors、dotenv、jsonwebtoken 等。
    • 資料庫驅動,例如 mssql、mysql2、pg。
  • 開發環境依賴 (devDependencies): 列出了專案在開發過程中所需的各種模組,包括:

    • ESLint 及其相關插件,用於程式碼檢查和格式化。
    • Flow,用於靜態類型檢查。
    • nodemon,用於在開發模式下自動重啟伺服器。
    • 其他開發工具,例如 prettier、node-html-markdown 等。

總結

從這個 package.json 檔案可以看出,"anything-llm-server" 專案是一個功能強大的伺服器端應用,它整合了多種 AI 模型和向量資料庫,並使用 LangChain 進行 LLM 應用的構建。專案支援開發和生產模式,並使用了 ESLint 和 Prettier 來確保程式碼質量。


接下來剩下來的會在明天解讀其他幾個較重要的部分。


上一篇
Day 27:自動化script參考: rpaForLLM
下一篇
Day 29 : 進階的 RAG 實作:理解與查詢程式碼:使用RAG 驅動
系列文
LLM與生成式AI筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言