創建數據庫用戶

等待數據庫實例啟動成功后,進入實例詳情頁,創建數據庫用戶。

用戶名密碼自行填寫,帳號類型選擇高權限帳號。

創建數據庫

創建數據庫。

授權帳號選擇剛才創建的用戶,其他默認即可。

PG鏈接地址

進入數據庫鏈接菜單,找到內網地址,后續在函數中會配置。

設置PG白名單

進入白名單與安全組菜單,點擊白名單設置頁簽。

點擊右側修改,根據實際需求添加白名單IP或者網段。在POC時,可以添加0.0.0.0/0,白名單IP段設置為0.0.0.0/0意味著對公網開放,請謹慎使用。若為了測試連接設置,測試后請立即修改。

非結構化數據持久化

LobeChat支持上傳文件(圖片,視頻,PDF,MD等),上傳的文件都會保存在配置的OSS中。

創建對象存儲(OSS)Bucket

打開阿里云對象存儲OSS控制臺[4],點擊左側Bucket列表菜單,點擊創建Bucket按鈕。

按需填寫Bucket名稱,其他配置保持默認即可。然后點擊完成創建。

Bucket Endpoint

創建好Bucket后,點擊Bucket名稱進入Bucket概覽頁。

在概覽頁中可以看到該Bucket的地域級Endpoint和Bucket級Endpoint。在下文中配置LobeChat環境變時會用到。

Bucket 安全性設置

點擊左側權限控制/阻止公共訪問菜單,開啟阻止公共訪問。

點擊左側權限控制/讀寫權限菜單,保證Bucket ACL 為私有。


部署LobeChat

該章節介紹如何將 LobeChat 數據庫版部署到阿里云函數計算。

創建阿里云鏡像倉庫ACR

雖然LobeChat是開源項目,但是如果沒有非常企業定制化的功能需要自行修改的話,還是建議直接使用Dockerhub上的鏡像進行部署。所以需要將鏡像推送到ACR,以便后續和函數計算FC做聯動。打開阿里云鏡像管理服務ACR控制臺[5],創建容器鏡像服務實例,生產中建議創建企業版實例,在該最佳實踐中,可以創建個人版。

點擊創建個人版。

創建完個人版實例后,設置登錄密碼。

創建鏡像倉庫的命名空間。進入命名空間菜單,點擊創建命名空間按鈕。

按實際需求輸入命名空間名稱。

命名空間全局唯一,如果提示命名空間已被占用,請重新填寫,請替換新的名稱。

進入鏡像倉庫菜單,點擊創建鏡像倉庫。

代碼源選擇本地倉庫,然后點擊創建鏡像倉庫按鈕。

拉取 LobeChat 鏡像推送到 ACR

LobeChat的鏡像[6]托管在Dockerhub上,所以在國內無法訪問,這里可以使用自己的方式Pull鏡像。

docker pull lobehub/lobe-chat-database

建議:可以購買一臺Region的ECS,安裝Docker,將LobeChat鏡像拉取下來,然后在推送到ACR。

推送鏡像到ACR
進入到上文步驟中創建的鏡像倉庫詳情頁,可以看到將鏡像推送到ACR的命令。

依次執行以下3行命令。

docker login --username=[阿里云帳號郵箱] registry.cn-beijing.aliyuncs.com
docker tag [LobeChat鏡像的ImageId] registry.cn-beijing.aliyuncs.com/[命名空間]/[倉庫名稱]:[鏡像版本號]
docker push registry.cn-beijing.aliyuncs.com/[命名空間]/[倉庫名稱]:[鏡像版本號]

創建LobeChat函數

打開函數計算控制臺[7],點擊創建函數。

函數創建方式選擇Web函數。

函數名稱按需填寫,這里填寫lobechat-database-fc。

其他配置項暫時保持默認,然后點擊下方創建按鈕。

LobeChat函數環境變量

點擊函數列表中的lobechat-database-fc函數,進入函數詳情頁。

點擊配置頁簽,點擊左側環境變量菜單,點擊編輯,添加該LobeChat函數需要的環境變量。

選擇使用JSON格式編輯。

{
"DATABASE_URL": "postgres連接地址",
"KEY_VAULTS_SECRET": "隨機的 32 位字符串",
"NEXT_PUBLIC_S3_DOMAIN": "OSS Bucket Endpoint",
"NEXT_PUBLIC_SERVICE_MODE": "server",
"S3_ACCESS_KEY_ID": "阿里云帳號AK",
"S3_BUCKET": "OSS Bucket名稱",
"S3_ENDPOINT": "OSS 地域級 Endpoint",
"S3_REGION": "阿里云地域ID",
"S3_SECRET_ACCESS_KEY": "阿里云帳號SK"
}

LobeChat函數網絡設置

點擊配置頁簽,點擊左側網絡菜單。

點擊編輯,添加VPC,VS信息。配置的VPC需要和上文中創建的PostgreSQL所在的VPC保持一致,這樣LobeChat函數就可以通過內網地址訪問PostgreSQL,提高網絡訪問效率和穩定性。

配置PG白名單

因為是函數計算中的LobeChat服務訪問PG數據庫,所以可以將LobeChat函數的交換機網段配置到PG的白名單中。這樣就可以去掉設置PG白名單中配置的0.0.0.0/0,增加安全性。

增加訪問LLM Chat應用的健壯性

在生產級項目中,路由策略,流量訪問控制策略等是必不可少的,所以這里會引入阿里云云原生API網關來增強訪問LLM Chat應用的健壯性。創建云原生API網關
打開云原生API網關控制臺[10]

點擊創建實例按鈕,創建云原生API網關實例。

云原生API網關地址

點擊云原生API網關實例ID,進入概覽頁。

在概覽頁的基本信息中可以可以看到云原生API網關的入口地址。下文中多處需要用到。配置網關自定義域名

進入左側域名菜單。

點擊創建域名按鈕,添加域名。

根據實際情況選擇HTTP或HTTPS,填寫已經備案的域名。如果沒有備案的域名,在測試場景下可以填寫 。域名解析(可選步驟)

如果在配置網關自定義域名時配置了 。則不需要參考這一步。

打開域名服務商控制臺,進入域名管理頁面,對域名進行解析。這里以阿里云域名管理為例,打開域名管理控制臺[11]進入域名列表,找到在配置網關自定義域名中配置的域名。

點擊右側解析,進入域名解析頁面。

點擊添加記錄按鈕。

添加服務來源

創建好云原生API網關后,點擊網關名稱,進入網關詳情頁。

點擊左側路由菜單,選擇服務頁簽。

點擊創建服務按鈕,添加服務。

創建成功后,可以在列表中看到LobeChat函數,并且等到健康檢查狀態變為健康。

創建路由

點擊路由頁簽,進入路由管理頁面,選擇普通路由。

點擊創建路由按鈕。

其他設置保持默認,然后點擊保存并發布。

增加路由健壯性

如果希望增加路由健壯性,可以針對路由設置各種策略,比如流控策略。在路由列表頁中點擊路由名稱進入路由詳情頁。

然后進入策略配置頁簽,可以按需進行配置。具體可參見云原生API網關策略文檔[12]


用戶身份管理
圖片
LobeChat 集成了 next-auth,一個靈活且強大的身份驗證庫,支持多種身份驗證方式,包括 OAuth、郵件登錄、憑證登錄等。通過 next-auth,可以輕松實現以下功能:

LobeChat用戶身份管理目前的缺陷

Next Auth 實現用戶身份管理

目前支持的身份驗證服務有:

本文以Auth0和Github為例。

基于Auth0實現用戶身份管理
創建 Auth0 應用

注冊并登錄 Auth0[13],點擊左側導航欄的「Applications」,切換到應用管理界面,點擊右上角「Create Application」以創建應用。

填寫你想向組織用戶顯示的應用名稱,可選擇任意應用類型,點擊「Create」。

創建成功后,點擊相應的應用,進入應用詳情頁,切換到「Settings」標簽頁,就可以看到相應的配置信息。

在應用配置頁面中,還需要配置 Allowed Callback URLs,在此處填寫:

http(s)://[your-domain]/api/auth/callback/auth0

只需要變更[your-domain]部分:

新增Auth0用戶

點擊左側導航欄的「Users Management」,進入用戶管理界面,可以為你的組織新建用戶,用以登錄 LobeChat。

更新LobeChat函數的環境變量

參照LobeChat函數環境變量設置中找到配置LobeChat函數環境變量的地方,增加以下環境變量信息。

{
"DATABASE_URL": "postgres連接地址",
"KEY_VAULTS_SECRET": "隨機的 32 位字符串",
"NEXT_PUBLIC_S3_DOMAIN": "OSS Bucket Endpoint",
"NEXT_PUBLIC_SERVICE_MODE": "server",
"S3_ACCESS_KEY_ID": "阿里云帳號AK",
"S3_BUCKET": "OSS Bucket名稱",
"S3_ENDPOINT": "OSS 地域級 Endpoint",
"S3_REGION": "阿里云地域ID",
"S3_SECRET_ACCESS_KEY": "阿里云帳號SK"
"NEXT_AUTH_SECRET": "隨機的 32 位字符串",
"NEXT_AUTH_SSO_PROVIDERS": "auth0",
"AUTH0_CLIENT_ID": "Auth0 應用程序的 Client ID",
"AUTH0_CLIENT_SECRET": "Auth0 應用程序的 Client Secret",
"AUTH0_ISSUER": "Auth0 應用程序的 Domain",
"ACCESS_CODE": "添加訪問此服務的密碼,你可以設置一個足夠長的隨機密碼以 “禁用” 訪問碼授權",
"NEXTAUTH_URL": "http(s)://your-domain.com/api/auth"
}
Auth0 和其他任務的單點登錄

Auth0 和其他任務的單點登錄可以參考LobeChat的文檔[14]

基于Github實現用戶身份管理
創建 Github 應用

點擊這里[15]創建一個新的 Github App。填寫 Github App name、Homepage URL、Callbak URL。

設置讀取郵件地址權限。

設置公開訪問還是僅自己訪問。

點擊「Create Github App」。創建成功后,點擊「Generate a new client secret」創建客戶端 Secret。

創建成功后,將客戶端 ID 和客戶端 Secret 保存下來。

更新LobeChat函數的環境變量

參照LobeChat函數環境變量設置中找到配置LobeChat函數環境變量的地方,增加以下環境變量信息。

{
"DATABASE_URL": "postgres連接地址",
"KEY_VAULTS_SECRET": "隨機的 32 位字符串",
"NEXT_PUBLIC_S3_DOMAIN": "OSS Bucket Endpoint",
"NEXT_PUBLIC_SERVICE_MODE": "server",
"S3_ACCESS_KEY_ID": "阿里云帳號AK",
"S3_BUCKET": "OSS Bucket名稱",
"S3_ENDPOINT": "OSS 地域級 Endpoint",
"S3_REGION": "阿里云地域ID",
"S3_SECRET_ACCESS_KEY": "阿里云帳號SK",
"NEXT_AUTH_SECRET": "隨機的 32 位字符串",
"NEXT_AUTH_SSO_PROVIDERS": "github",
"GITHUB_CLIENT_ID": "Gihub App ClientID",
"GITHUB_CLIENT_SECRET": "Github App Client Secret",
"NEXTAUTH_URL": "http(s)://your-domain.com/api/auth"
}

其他服務的認證管理接入方式

其他服務的認證管理接入方式可以參考LobeChat的文檔[16]

訪問LobeChat

訪問配置網關自定義域名中配置的域名或者云原生API網關地址,便可打開LobeChat。

登錄LobeChat(以Auth0為例)

點擊左上角的圖標。

點擊登錄/注冊。

會跳轉到Auth0的登錄界面。輸入你在新增Auth0用戶中創建的用戶名密碼進行登錄。

登錄成功后可以看到帳號信息。


查看LobeChat表結構

進入創建PostgreSQL數據庫中創建的PG數據庫詳情頁。

點擊右上角登錄數據庫按鈕,進入DMS控制臺。

可以看到當第一訪問LobeChat時,會初始化若干表,有興趣的同學可以自行查看表結構。

后端服務

在該最佳實踐中,后端服務涉及2類:

這兩類后端服務都會使用阿里云函數計算實現,可以提供更細粒度資源規格(0.05C 128MB),更高性能(穩定支撐100w-150w QPS),更高彈性效率(百毫秒拉起實例)的CPU算力,也可以提供多種穩定的GPU資源。同時還自帶完善的可觀測,灰度發布等能力。使傳統應用,AI應用的后端服務更健壯。

LLM交互的服務(Ollama)

阿里云函數計算提供了構建Ollama服務的應用模板,可以快速創建出包含GPU算力的Ollama服務。

創建函數計算Ollama應用

打開函數計算控制臺,進入應用菜單。

點擊創建應用按鈕。選擇通過模板創建應用,選擇人工智能頁簽,可以看到Ollama應用。

點擊詳情按鈕,可以查看該應用的詳細信息。

點擊立即創建按鈕可以快速開始創建應用。

建議選擇其中一個模型,因為初始的模型是打在鏡像里的,如果選擇多個模型集成,會使鏡像過大,影響Ollama函數彈性速度。后續可以掛載NAS,使用Ollama的API下載其他模型。

設置完后點擊左下方創建應用按鈕,開始創建應用。

等待片刻后,便可以看到Ollama應用部署成功。

點擊左下角Ollama函數,可以進入Ollama函數詳情頁面。

Ollama服務訪問地址

進入Ollama函數詳情頁面,點擊配置頁簽,進入左側觸發器菜單。可以看到公網訪問地址和內網訪問地址。

通過Ollama下載其他模型可以通過給Ollama函數掛載NAS,通過API將其他所需的模型下載到NAS中,既不影響鏡像大小,也可以靈活使用更多種的開源模型。掛載NAS點擊左側網絡菜單,點擊編輯按鈕,添加VPC。

點擊左側存儲菜單,點擊NAS 文件系統右側的編輯按鈕。

設置Ollama函數環境變量

進入配置頁簽,點擊左側環境變量菜單,點擊環境變量右側的編輯按鈕。

增加如下2個環境變量。

通過Ollama API下載模型

可以使用Postman或者終端訪問Ollama API[17]下載模型,模型會直接下載到NAS中。

curl http://Ollama服務地址/api/pull -d '{
"name": "llama3.1:8b"
}'

自定義Agent服務

創建函數

打開函數計算控制臺,進入左側函數菜單。

點擊創建函數按鈕。

其他設置保持默認。代碼示例

點擊代碼頁簽,在WebIDE中,刪除app.py中的默認代碼,將以下代碼復制進app.py中。

from flask import Flask, Response
from flask import request
import re
import time
import json

REQUEST_ID_HEADER = 'x-fc-request-id'

app = Flask(__name__)

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
rid = request.headers.get(REQUEST_ID_HEADER)
print("FC Invoke Start RequestId: " + rid)
data = request.stream.read()
print("Path: " + path)
print("Data: " + str(data))
data_obj = json.loads(data)
model = data_obj.get('model')
if model == 'custom-agent':
print("FC Invoke End RequestId: " + rid)
response_message = "您好,我是用阿里云函數計算實現的自定義Agent,你可以在該函數中實現更多的業務邏輯。"
return Response(generate_response(response_message), mimetype='text/event-stream')
else:
return "success"

def generate_response(prompt):
# 模擬生成響應的過程,這里可以替換為你的實際邏輯
response_template = {
"id": "from-cache",
"choices": [
{
"index": 0,
"delta": {
"role": "assistant",
"content": "%s"
},
"finish_reason": "stop"
}
],
"model": "gpt-4o",
"object": "chat.completion",
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0
}
}

words = re.split(r'[,,;;:]', prompt)

for index, word in enumerate(words):
response_template["choices"][0]["delta"]["content"] = word
response_template["choices"][0]["index"] = index
yield f"data: {json.dumps(response_template)}\n\n"
time.sleep(0.3) # 模擬延遲

if __name__ == '__main__':
app.run(host='0.0.0.0',port=9000)

自定義Agent訪問地址

點擊配置頁簽,進入左側觸發器菜單,可以看到公網訪問地址和內網訪問地址。


配置 LobeChat

登錄LobeChat后,點擊立即開始。

點擊右上角會話設置。

點擊左側語言模型菜單。

可以看到LobeChat已經集成了幾乎市面上所有主流的LLM服務,所有可以實現在一個Web Chat中可以和多家LLM進行交互,也就是不同的會話可以配置不同的模型,靈活性非常高。

本文開頭說過,該最佳實踐主要實現Ollama服務托管的模型和自定義的Agent,所以在語言模型設置頁面,我們主要會設置OpenAI(用于配置自定義Agent)和Ollama。

配置自定義Agent

開打OpenAI開關,配置自定義Agent信息:

關閉模型配置窗口,回到主窗口,點擊上方模型,切換到custom-agent,也就相當于會請求到自定義Agent服務中。

進行聊天對話,可以看到會響應自定義Agent中寫死的內容。

配置Ollama服務

點擊會話設置,進入語言模型,開啟Ollama服務。

回到主窗口,在上方可以切換到llama3.1:8b模型。

在同一個窗口再次進行對話。

配置聊天助手

LobeChat支持創建不同的聊天助手,不同的聊天助手可以是不同的模型,所以我們可以根據業務需求或自己的需求靈活的使用不同的模型或者自定義Agent
創建翻譯助手
點擊左上角創建聊天助手。

進入聊天助手對話界面,點擊右上角的聊天助手設置。

設置聊天助手基本信息,比如頭像,頭像顏色,聊天助手名稱,聊天助手描述等。

設置聊天助手的角色設定。

在聊天偏好中可以設置用戶輸入預處理等信息。

設置聊天助手的模型,這里選擇llama3.1:8b。

回到翻譯助手聊天窗口,可以讓其進行翻譯。

創建自定義Agent助手

同理,可以創建和自定義Agent交互的聊天助手。

相關鏈接:

[1] LobeChathttps://github.com/lobehub/lobe-chat

[2] 阿里云函數計算(FC)https://help.aliyun.com/zh/functioncompute/product-overview/what-is-function-compute

[3] 阿里云RDS控制臺https://yaochi.console.aliyun.com/rds/rdsList/cn-beijing

[4]?阿里云對象存儲OSS控制臺https://oss.console.aliyun.com/bucket

[5]?阿里云鏡像管理服務ACR控制臺https://cr.console.aliyun.com/cn-beijing/instances

[6] LobeChat的鏡像https://hub.docker.com/r/lobehub/lobe-chat-database

[7] 函數計算控制臺https://fcnext.console.aliyun.com/cn-beijing/functions

[8] 阿里云地域ID說明https://help.aliyun.com/zh/drp/support/region-ids

[9] AK管理控制臺https://ram.console.aliyun.com/manage/ak

[10] 云原生API網關控制臺https://apigw.console.aliyun.com/#/cn-beijing/gateway

[11] 域名管理控制臺https://dc.console.aliyun.com/next/index

[12]?云原生API網關策略文檔https://help.aliyun.com/zh/api-gateway/cloud-native-api-gateway/user-guide/routing-policy/

[13] Auth0https://manage.auth0.com/dashboard

[14] LobeChat的文檔https://lobehub.com/zh/docs/self-hosting/advanced/auth/next-auth/auth0

[15] 這里https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fsettings%2Fapps%2Fnew

[16]?LobeChat的文檔https://lobehub.com/zh/docs/self-hosting/advanced/auth

[17] Ollama APIhttps://github.com/ollama/ollama/blob/main/docs/api.md

[18]?Ollama支持的模型https://ollama.com/library

文章轉自微信公眾號@Serverless

上一篇:

基于深度學習的農作物害蟲檢測系統(YOLOv8/YOLOv7/YOLOv6/YOLOv5+UI界面+訓練數據集)

下一篇:

AI實踐之路:詳解Gemini Pro API在Google Colab和本地Python中的應用策略
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費