基于阿里云函数盘算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方 ...

打印 上一主题 下一主题

主题 938|帖子 938|积分 2829

开通地点:基于阿里云函数盘算(FC)一键轻松打造你的专属AI应用

简介: 本文带大家了解一下如何使用阿里云Serverless盘算产品函数盘算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数盘算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。

LLM Chat 应用大家应该都不陌生,这类应用也逐渐称为了我们一样平常的得力助手,如果只是个人使用,那么现在市面上有很多方案可以快速的构建出一个LLM Chat应用,但是如果要用在企业生产级别的项目中,那对整体部署架构,使用组件的性能,健壮性,扩展性要求照旧比较高的。本文带大家了解一下如何使用阿里云Serverless盘算产品函数盘算构建生产级别的LLM Chat应用。

该最佳实践会指导大家基于开源WebChat组件LobeChat[1]和阿里云函数盘算(FC)[2]构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。

1. 生产级别应该具备哪些本领


LLM Chat应用是一个典范的前后端分离的应用,前端主要是Web Chat服务,后端是和向量数据库,LLM,其他鄙俚服务交互的服务,也可以说是多少个Agent。我们分开来看。

1.1 Web Chat

我以为生产级别的Web Chat组件至少应该具备以下几点本领:



  • 全部信息需要持久化,也就是说肯定是需要有一套数据库布局来支撑的:


  • 存储全部配置信息
  • 存储全部对话信息
  • 存储全部对话窗口信息,也就是类似每一个聊天助手的信息


  • 用户体系,权限认证体系。
  • 可以对接多种LLM,无论是商业LLM照旧开源LLM,亦或是自定义的Agent(比如遵循OpenAI接口范式的自定义API)。


  • 支持temperature,top_p,presence_penalty,frequency_penalty等设置


  • 支持多模态交互。(除文本聊天外,可以上传图片,文件,甚至语音)
  • 支持移动端。
  • 支持插件扩展。
  • 哀求Web Chat服务的安全性和健壮性。


  • 哀求流量防护
  • Header重写
  • 超时保护

1.2 后端服务

后端服务包括与向量数据库,关系型数据库交互的Agent,与商业LLM交互的Agent,与开源LLM交互的Agent,托管开源LLM的服务等。这些服务要上生产,本质上和传统应用后端服务是一样的,需要具备以下几点:



  • 稳定性,健壮性,高可靠性


  • 多可用区部署
  • 灰度发布


  • 高性能


  • 支撑高并发


  • 灵活构建和调整业务流程


  • 工作流编排


  • 支持各类主流编程语言


  • Java,Go,Python,NodeJS,.Net Core等


  • 支持异构盘算


  • 既支持CPU,也支持GPU


  • 成本更优


  • 资源按需所取,按量付费

2. Web Chat 组件 LobeChat


为什么选择LobeChat?毫无疑问,因为LobeChat满足上述我列出的Web Chat组件应该具备的本领。我们来一步一步探索。

2.1 布局化数据持久化

LobeChat支持数据库版本(PostgreSQL),也就意味着Web Chat中的大部门核心信息都可以持久化存储,无论用哪种欣赏器,在哪里使用,使用电脑端照旧移动端,都可以无缝衔接。

创建PostgreSQL数据库

打开阿里云RDS控制台[3],创建PostgreSQL实例,数据库引擎选择PostgreSQL,数据库产品系列、产品范例、存储范例、实例规格按照业务实际需求选择。该最佳实践中选择最低配置。


创建数据库用户

等候数据库实例启动乐成后,进入实例详情页,创建数据库用户。




用户名密码自行填写,帐号范例选择高权限帐号。
创建数据库

创建数据库。




授权帐号选择刚才创建的用户,其他默认即可。
PG链接地点

进入数据库链接菜单,找到内网地点,后续在函数中会配置。


设置PG白名单

进入白名单与安全组菜单,点击白名单设置页签。


点击右侧修改,根据实际需求添加白名单IP或者网段。在POC时,可以添加0.0.0.0/0,白名单IP段设置为0.0.0.0/0意味着对公网开放,请谨慎使用。若为了测试连接设置,测试后请立即修改。

2.2 非布局化数据持久化

LobeChat支持上传文件(图片,视频,PDF,MD等),上传的文件都会生存在配置的OSS中。
创建对象存储(OSS)Bucket

打开阿里云对象存储OSS控制台[4],点击左侧Bucket列表菜单,点击创建Bucket按钮。


按需填写Bucket名称,其他配置保持默认即可。然后点击完成创建。


Bucket Endpoint

创建好Bucket后,点击Bucket名称进入Bucket概览页。


在概览页中可以看到该Bucket的地域级Endpoint和Bucket级Endpoint。在下文中配置LobeChat环境变时会用到。


Bucket 安全性设置

点击左侧权限控制/制止公共访问菜单,开启制止公共访问。


点击左侧权限控制/读写权限菜单,保证Bucket ACL 为私有。



2.3 部署LobeChat

该章节介绍如何将 LobeChat 数据库版部署到阿里云函数盘算。
创建阿里云镜像仓库ACR

固然LobeChat是开源项目,但是如果没有非常企业定制化的功能需要自行修改的话,照旧建议直接使用Dockerhub上的镜像举行部署。

所以需要将镜像推送到ACR,以便后续和函数盘算FC做联动。打开阿里云镜像管理服务ACR控制台[5],创建容器镜像服务实例,生产中建议创建企业版实例,在该最佳实践中,可以创建个人版。


点击创建个人版。


创建完个人版实例后,设置登录密码。




创建镜像仓库的命名空间。进入命名空间菜单,点击创建命名空间按钮。


按实际需求输入命名空间名称。
   命名空间全局唯一,如果提示命名空间已被占用,请重新填写,请替换新的名称。  


进入镜像仓库菜单,点击创建镜像仓库。






  • 命名空间:选择刚才创建好的命名空间。
  • 仓库名称:按照实际需求自行填写。
  • 仓库范例:选择私有
  • 择要:按照实际需求自行填写


代码源选择本地仓库,然后点击创建镜像仓库按钮。
拉取 LobeChat 镜像推送到 ACR

LobeChat的镜像[6]托管在Dockerhub上,所以在国内无法访问,这里可以使用本身的方式Pull镜像。

  1. docker pull lobehub/lobe-chat-database
复制代码
  建议:可以购买一台Region的ECS,安装Docker,将LobeChat镜像拉取下来,然后在推送到ACR。  
推送镜像到ACR
进入到上文步骤中创建的镜像仓库详情页,可以看到将镜像推送到ACR的命令。


依次执行以下3行命令。

  1. docker login --username=[阿里云帐号邮箱] registry.cn-beijing.aliyuncs.com
  2. docker tag [LobeChat镜像的ImageId] registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
  3. docker push registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
复制代码
创建LobeChat函数

打开函数盘算控制台[7],点击创建函数。


函数创建方式选择Web函数。


函数名称按需填写,这里填写lobechat-database-fc。




  • 运行环境:选择自定义容器镜像。
  • 镜像选择方式:选择使用 ACR 中的镜像。


  • 点击选择 ACR 中的镜像,选择上文中创建好的ACR中的LobeChat镜像


  • 监听端口:填写3210。




  • 是否使用GPU:选择不使用GPU。
  • 规格方案:选择1 vCPU,2048 MB。
  • 执行超时时间:填写300。
  • 函数角色:选择AliyunFcDefaultRole。


其他配置项暂时保持默认,然后点击下方创建按钮。
LobeChat函数环境变量设置

点击函数列表中的lobechat-database-fc函数,进入函数详情页。


点击配置页签,点击左侧环境变量菜单,点击编辑,添加该LobeChat函数需要的环境变量。


选择使用JSON格式编辑。



  1. {
  2.     "DATABASE_URL": "postgres连接地址",
  3.     "KEY_VAULTS_SECRET": "随机的 32 位字符串",
  4.     "NEXT_PUBLIC_S3_DOMAIN": "OSS Bucket Endpoint",
  5.     "NEXT_PUBLIC_SERVICE_MODE": "server",
  6.     "S3_ACCESS_KEY_ID": "阿里云帐号AK",
  7.     "S3_BUCKET": "OSS Bucket名称",
  8.     "S3_ENDPOINT": "OSS 地域级 Endpoint",
  9.     "S3_REGION": "阿里云地域ID",
  10.     "S3_SECRET_ACCESS_KEY": "阿里云帐号SK"
  11. }
复制代码



  • DATABASE_URL:参见上文中的PG链接地点。


  • 格式为postgres://username:password@host:port/database


  • KEY_VAULTS_SECRET:思量到用户会存储本身的 API Key 和 baseURL 等敏感信息到数据库中,因此我们需要一个密钥来加密这些信息,避免数据库被爆破 / 脱库时这些关键信息被泄漏。 因此有了 KEY_VAULTS_SECRET 环境变量,用于加密用户存储的 API Key 等敏感信息。


  • 你可以使用 openssl rand -base64 32 命令生成一个随机的 32 位字符串作为 KEY_VAULTS_SECRET 的值


  • NEXT_PUBLIC_SERVICE_MODE:LobeChat 同时支持了客户端数据库和服务端数据库,因此我们提供了一个环境变量用于切换模式,这个变量为 NEXT_PUBLIC_SERVICE_MODE。使用数据库版本需要将该环境变量设置为server。
  • NEXT_PUBLIC_S3_DOMAIN:使用Bucket Endpoint中的Bucket域名。
  • S3_ENDPOINT:使用Bucket Endpoint中的地域级域名。
  • S3_BUCKET:Bucket 名称。
  • S3_REGION:阿里云地域ID。参见:阿里云地域ID说明[8]


  • 函数盘算,OSS,PostgreSQL 需要保持在同一地域,同一帐号下


  • S3_ACCESS_KEY_ID:阿里云帐号AK。登录阿里云帐号,打开AK管理控制台[9]获取AK。
  • S3_SECRET_ACCESS_KEY:阿里云帐号SK。登录阿里云帐号,打开AK管理控制台获取SK。
LobeChat函数网络设置

点击配置页签,点击左侧网络菜单。


点击编辑,添加VPC,VS信息。配置的VPC需要和上文中创建的PostgreSQL地点的VPC保持一致,这样LobeChat函数就可以通过内网地点访问PostgreSQL,进步网络访问效率和稳定性。




  • 答应访问VPC:选择是。
  • 配置方式:选择自定义配置。
  • 专有网络:选择已存在的VPC,和PostgreSQL地点VPC保持一致。
  • 交换机:选择已存在的交换机,和PostgreSQL地点交换机保持一致。
  • 安全组:选择已存在的安全组,如果没有安全组,可以点击创建新的安全组。


  • 安全组是用于对入方向和出方向的IP,端口,协议做管控的策略。在POC或者Demo中,可以将入方向策略的协议设置为全部,授权对象设置为全部




  • 在正式生产项目中,根据实际需求设置差别协议,差别授权对象,差别端口的策略
配置PG白名单

因为是函数盘算中的LobeChat服务访问PG数据库,所以可以将LobeChat函数的交换机网段配置到PG的白名单中。这样就可以去掉设置PG白名单中配置的0.0.0.0/0,增长安全性。

2.4 增长访问LLM Chat应用的健壮性

在生产级项目中,路由策略,流量访问控制策略等是必不可少的,所以这里会引入阿里云云原生API网关来增强访问LLM Chat应用的健壮性。
创建云原生API网关

打开云原生API网关控制台[10]


点击创建实例按钮,创建云原生API网关实例。




  • 地域:根据实际项目需求选择地域,该实践中的全部产品应该处于统一地域。
  • 网关名称:根据实际项目环境填写。
  • 网关规格:根据实际QPS,客户端最大连接数选择差别的规格。
  • 网络访问范例:选择公网。
  • 专有网络:选择已有的VPC。需要和PostgreSQL的VPC,函数盘算FC设置的VPC保持一致。
  • 交换机:选择已有的交换机。需要和PostgreSQL的交换机,函数盘算FC设置的交换机保持一致。
云原生API网关地点

点击云原生API网关实例ID,进入概览页。




在概览页的基本信息中可以可以看到云原生API网关的入口地点。下文中多处需要用到。
配置网关自定义域名

进入左侧域名菜单。


点击创建域名按钮,添加域名。


根据实际环境选择HTTP或HTTPS,填写已经备案的域名。如果没有备案的域名,在测试场景下可以填写 *。
域名解析(可选步骤)

   如果在配置网关自定义域名时配置了 *。则不需要参考这一步。  打开域名服务商控制台,进入域名管理页面,对域名举行解析。这里以阿里云域名管理为例,打开域名管理控制台[11]。进入域名列表,找到在配置网关自定义域名中配置的域名。


点击右侧解析,进入域名解析页面。


点击添加记录按钮。






  • 记录范例:选择CNAME。
  • 主机记录:根据实际需求填写。
  • 记录值:填写云原生API网关的入口地点。参见云原生API网关地点。
添加服务来源

创建好云原生API网关后,点击网关名称,进入网关详情页。


点击左侧路由菜单,选择服务页签。


点击创建服务按钮,添加服务。




  • 服务来源:选择 FC 函数盘算。
  • 函数名称:选择创建LobeChat函数中创建的函数。
  • 函数别名或版本:选择LATEST。


创建乐成后,可以在列表中看到LobeChat函数,而且等到健康检查状态变为健康。
创建路由

点击路由页签,进入路由管理页面,选择普通路由。


点击创建路由按钮。




  • 路由名称:根据实际需求填写。
  • 域名:如果在配置网关自定义域名中配置了备案域名,且域名完成了解析,则选择自定义域名。如果没有则选择在配置网关自定义域名中创建的*域名。
  • 路径:条件为前缀是,路径为/
  • 使用场景:选择单服务。
  • 后端服务:选择添加服务来源中添加的来源为函数盘算的LobeChat函数服务。

其他设置保持默认,然后点击生存并发布。
增长路由健壮性

如果希望增长路由健壮性,可以针对路由设置各种策略,比如流控策略。在路由列表页中点击路由名称进入路由详情页。


然后进入策略配置页签,可以按需举行配置。具体可参见云原生API网关策略文档[12]


2.4 用户身份管理

LobeChat 集成了 next-auth,一个灵活且强大的身份验证库,支持多种身份验证方式,包括 OAuth、邮件登录、凭证登录等。通过 next-auth,可以轻松实现以下功能:



  • 用户注册和登录:支持多种认证方式,满足差别用户的需求。
  • 会话管理:高效管理用户会话,确保安全性。
  • 社交登录:支持多种社交平台的快捷登录。
  • 数据安全:保障用户数据的安全性和隐私性。
LobeChat用户身份管理现在的缺陷



  • 现在还没有实现 next-auth 与服务端数据库的集成,如果需要使用服务端数据库,可以使用 LobeChat 集成的 Clerk。但是使用Clerk又引入了一个三方组件,对于企业用户来说大概不是一个好的选择。
  • 现在还没有提供原生和企业内部用户管理体系集成的方案,比如单点登录方案。站在企业生产级这个条件下,和企业内部用户管理系统对策应该是刚需。如果要实现,可以参考以下三种方式:


  • LobeChat是开源组件,用户可以自行实现,以满足自身企业的需求。
  • 可以使用Auth0实现和企业内部用户管理系统的SSO单点登录。
  • 后续CAP来补充这部门方案。
Next Auth 实现用户身份管理

现在支持的身份验证服务有:


  • Auth0
  • Microsoft Entra ID
  • Authentik
  • Github
  • ZITADEL

本文以Auth0和Github为例。
基于Auth0实现用户身份管理

创建 Auth0 应用

注册并登录 Auth0[13],点击左侧导航栏的「Applications」,切换到应用管理界面,点击右上角「Create Application」以创建应用。


填写你想向组织用户显示的应用名称,可选择任意应用范例,点击「Create」。


创建乐成后,点击相应的应用,进入应用详情页,切换到「Settings」标签页,就可以看到相应的配置信息。


在应用配置页面中,还需要配置 Allowed Callback URLs,在此处填写:

  1. http(s)://[your-domain]/api/auth/callback/auth0
复制代码

只需要变动[your-domain]部门:


  • 如果在云原生API网关中配置了备案域名,而且对域名设置了解析,那么此处配置的就是解析域名。
  • 如果在云原生API网关中配置了*域名,那么此处配置云原生API网关的入口地点。参见云原生API网关地点。


新增Auth0用户
点击左侧导航栏的「Users Management」,进入用户管理界面,可以为你的组织新建用户,用以登录 LobeChat。




更新LobeChat函数的环境变量
参照LobeChat函数环境变量设置中找到配置LobeChat函数环境变量的地方,增长以下环境变量信息。



  1. {
  2.     "DATABASE_URL": "postgres连接地址",
  3.     "KEY_VAULTS_SECRET": "随机的 32 位字符串",
  4.     "NEXT_PUBLIC_S3_DOMAIN": "OSS Bucket Endpoint",
  5.     "NEXT_PUBLIC_SERVICE_MODE": "server",
  6.     "S3_ACCESS_KEY_ID": "阿里云帐号AK",
  7.     "S3_BUCKET": "OSS Bucket名称",
  8.     "S3_ENDPOINT": "OSS 地域级 Endpoint",
  9.     "S3_REGION": "阿里云地域ID",
  10.     "S3_SECRET_ACCESS_KEY": "阿里云帐号SK"
  11.     "NEXT_AUTH_SECRET": "随机的 32 位字符串",
  12.     "NEXT_AUTH_SSO_PROVIDERS": "auth0",
  13.     "AUTH0_CLIENT_ID": "Auth0 应用程序的 Client ID",
  14.     "AUTH0_CLIENT_SECRET": "Auth0 应用程序的 Client Secret",
  15.     "AUTH0_ISSUER": "Auth0 应用程序的 Domain",
  16.     "ACCESS_CODE": "添加访问此服务的密码,你可以设置一个足够长的随机密码以 “禁用” 访问码授权",
  17.     "NEXTAUTH_URL": "http(s)://your-domain.com/api/auth"
  18. }
复制代码



  • NEXT_AUTH_SECRET:你可以使用 openssl rand -base64 32 命令生成一个随机的 32 位字符串作为 NEXT_AUTH_SECRET 的值。
  • NEXT_AUTH_SSO_PROVIDERS:auth0
  • AUTH0_CLIENT_ID:Auth0 应用程序的 Client ID,参见创建 Auth0 应用。
  • AUTH0_CLIENT_SECRET:Auth0 应用程序的 Client Secret,参见创建 Auth0 应用。
  • AUTH0_ISSUER:Auth0 应用程序的 Domain,参见创建 Auth0 应用。


  • Domain需要带着https://


  • ACCESS_CODE:你可以使用 openssl rand -base64 32 命令生成一个随机的 32 位字符串作为 ACCESS_CODE 的值。
  • NEXTAUTH_URL:http(s)://your-domain.com/api/auth


  • 只需要变动[your-domain]部门:
  • 如果在云原生API网关中配置了备案域名,而且对域名设置了解析,那么此处配置的就是解析域名。
  • 如果在云原生API网关中配置了*域名,那么此处配置云原生API网关的入口地点。参见云原生API网关地点。
Auth0 和其他使命的单点登录

Auth0 和其他使命的单点登录可以参考LobeChat的文档[14]
基于Github实现用户身份管理

创建 Github 应用

点击这里[15]创建一个新的 Github App。填写 Github App name、Homepage URL、Callbak URL。




  • Github App name:根据实际环境填写。
  • Homepage URL:


  • 如果在云原生API网关中配置了备案域名,而且对域名设置了解析,那么此处配置的就是解析域名。
  • 如果在云原生API网关中配置了*域名,那么此处配置云原生API网关的入口地点。参见云原生API网关地点。


  • Callback URL(回调地点):http(s)://your-domain/api/auth/callback/github  


  • 只需要变动[your-domain]部门:
  • 如果在云原生API网关中配置了备案域名,而且对域名设置了解析,那么此处配置的就是解析域名。
  • 如果在云原生API网关中配置了*域名,那么此处配置云原生API网关的入口地点。参见云原生API网关地点。




设置读取邮件地点权限。


设置公开访问照旧仅本身访问。


点击「Create Github App」。创建乐成后,点击「Generate a new client secret」创建客户端 Secret。


创建乐成后,将客户端 ID 和客户端 Secret 生存下来。
更新LobeChat函数的环境变量

参照LobeChat函数环境变量设置中找到配置LobeChat函数环境变量的地方,增长以下环境变量信息。



  1. {
  2.     "DATABASE_URL": "postgres连接地址",
  3.     "KEY_VAULTS_SECRET": "随机的 32 位字符串",
  4.     "NEXT_PUBLIC_S3_DOMAIN": "OSS Bucket Endpoint",
  5.     "NEXT_PUBLIC_SERVICE_MODE": "server",
  6.     "S3_ACCESS_KEY_ID": "阿里云帐号AK",
  7.     "S3_BUCKET": "OSS Bucket名称",
  8.     "S3_ENDPOINT": "OSS 地域级 Endpoint",
  9.     "S3_REGION": "阿里云地域ID",
  10.     "S3_SECRET_ACCESS_KEY": "阿里云帐号SK",
  11.     "NEXT_AUTH_SECRET": "随机的 32 位字符串",
  12.     "NEXT_AUTH_SSO_PROVIDERS": "github",
  13.     "GITHUB_CLIENT_ID": "Gihub App ClientID",
  14.     "GITHUB_CLIENT_SECRET": "Github App Client Secret",
  15.     "NEXTAUTH_URL": "http(s)://your-domain.com/api/auth"
  16. }
复制代码



  • NEXT_AUTH_SECRET:你可以使用 openssl rand -base64 32 命令生成一个随机的 32 位字符串作为 NEXT_AUTH_SECRET 的值。
  • NEXT_AUTH_SSO_PROVIDERS:github
  • GITHUB_CLIENT_ID:Github 应用程序的 Client ID,参见创建 Github 应用。
  • GITHUB_CLIENT_SECRET:Gihub 应用程序的 Client Secret,参见创建 Github 应用。
  • NEXTAUTH_URL:http(s)://your-domain.com/api/auth


  • 只需要变动[your-domain]部门:
  • 如果在云原生API网关中配置了备案域名,而且对域名设置了解析,那么此处配置的就是解析域名。
  • 如果在云原生API网关中配置了*域名,那么此处配置云原生API网关的入口地点。参见云原生API网关地点。
其他服务的认证管理接入方式

其他服务的认证管理接入方式可以参考LobeChat的文档[16]

2.5 访问LobeChat

访问配置网关自定义域名中配置的域名或者云原生API网关地点,便可打开LobeChat。


登录LobeChat(以Auth0为例)

点击左上角的图标。


点击登录/注册。


会跳转到Auth0的登录界面。输入你在新增Auth0用户中创建的用户名密码举行登录。


登录乐成后可以看到帐号信息。



2.6 查看LobeChat表布局

进入创建PostgreSQL数据库中创建的PG数据库详情页。


点击右上角登录数据库按钮,进入DMS控制台。


可以看到当第一访问LobeChat时,会初始化多少表,有兴趣的同学可以自行查看表布局。

2.7 后端服务


在该最佳实践中,后端服务涉及2类:



  • 和LLM交互的服务。
  • 自定义的Agent服务(有客户本身的业务逻辑)。

这两类后端服务都会使用阿里云函数盘算实现,可以提供更细粒度资源规格(0.05C 128MB),更高性能(稳定支撑100w-150w QPS),更高弹性效率(百毫秒拉起实例)的CPU算力,也可以提供多种稳定的GPU资源。同时还自带美满的可观测,灰度发布等本领。使传统应用,AI应用的后端服务更健壮。

2.8 和LLM交互的服务(Ollama)

阿里云函数盘算提供了构建Ollama服务的应用模板,可以快速创建出包含GPU算力的Ollama服务。
创建函数盘算Ollama应用

打开函数盘算控制台,进入应用菜单。


点击创建应用按钮。选择通过模板创建应用,选择人工智能页签,可以看到Ollama应用。


点击详情按钮,可以查看该应用的具体信息。


点击立即创建按钮可以快速开始创建应用。




  • 应用名称:根据实际需求填写。
  • 角色名:选择AliyunFCServerlessDevsRole。




  • 地域:现在Ollama应用支持上海,杭州,深圳三个地域。
  • 服务角色ARN:选择AliyunFcDefaultRole
  • 项目名:根据实际需求填写。
  • 模型名称:现在支持3个开源模型。可以选择其中一个,也可以选择多个模型集成。


  • 通义千问 0.5B
  • 通义千问 7B
  • llama3 8B
   建议选择其中一个模型,因为初始的模型是打在镜像里的,如果选择多个模型集成,会使镜像过大,影响Ollama函数弹性速率。后续可以挂载NAS,使用Ollama的API下载其他模型。  

  • GPU实例范例:


  • T4:fc.gpu.tesla.1
  • 8C,32GB内存,16GB显存
  • A10:fc.gpu.ampere.1
  • 8C 32GB内存,24GB显存


  • 显存巨细,内存巨细,GPU核数根据实际环境填写,建议使用整卡(保持默认值),否则会影响推理效率。

设置完后点击左下方创建应用按钮,开始创建应用。


等候半晌后,便可以看到Ollama应用部署乐成。


点击左下角Ollama函数,可以进入Ollama函数详情页面。
Ollama服务访问地点

进入Ollama函数详情页面,点击配置页签,进入左侧触发器菜单。可以看到公网访问地点和内网访问地点。


通过Ollama下载其他模型

可以通过给Ollama函数挂载NAS,通过API将其他所需的模型下载到NAS中,既不影响镜像巨细,也可以灵活使用更多种的开源模型。
挂载NAS

点击左侧网络菜单,点击编辑按钮,添加VPC。






  • 答应访问VPC:选择是。
  • 配置方式:选择自定义配置。
  • 专有网络,交换机,安全组:可以和LobeChat函数保持一致。参考:LobeChat函数网络设置。

点击左侧存储菜单,点击NAS 文件系统右侧的编辑按钮。






  • 挂载NAS文件系统:选择启用。
  • NAS配置方式:选择自定义配置。
  • NAS文件系统:选择已有NAS文件系统。如果没有可以点击创建新的NAS文件系统按钮,跳转到NAS控制台举行创建。
  • NAS挂载点:选择已有的挂载点。如果没有需要先到NAS控制台创建挂载点。
  • 远端目次:设置为/ollama
  • 函数本地目次:设置为/ollama
设置Ollama函数环境变量

进入配置页签,点击左侧环境变量菜单,点击环境变量右侧的编辑按钮。


增长如下2个环境变量。




  • OLLAMA_MODELS:/ollama
  • OLLAMA_ORIGINS:*
通过Ollama API下载模型

可以使用Postman或者终端访问Ollama API[17]下载模型,模型会直接下载到NAS中。

  1. curl http://Ollama服务地址/api/pull -d '{
  2.   "name": "llama3.1:8b"
  3. }'
复制代码



  • Ollama服务地点:参见Ollama服务访问地点。
  • 模型名称:可以从Ollama支持的模型[18]中选择。比如下载llama3.1:8b。

2.9 自定义Agent服务

创建函数

打开函数盘算控制台,进入左侧函数菜单。


点击创建函数按钮。




  • 创建函数方式:选择Web函数。
  • 函数名称:根据实际环境填写。
  • 运行环境:选择Python 3.10。

其他设置保持默认。
代码示例

点击代码页签,在WebIDE中,删除app.py中的默认代码,将以下代码复制进app.py中。



  1. from flask import Flask, Response
  2. from flask import request
  3. import re
  4. import time
  5. import json
  6. REQUEST_ID_HEADER = 'x-fc-request-id'
  7. app = Flask(__name__)
  8. @app.route('/', defaults={'path': ''})
  9. @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
  10. def hello_world(path):
  11.         rid = request.headers.get(REQUEST_ID_HEADER)
  12.         print("FC Invoke Start RequestId: " + rid)
  13.         data = request.stream.read()
  14.         print("Path: " + path)
  15.         print("Data: " + str(data))
  16.         data_obj = json.loads(data)
  17.         model = data_obj.get('model')
  18.         if model == 'custom-agent':
  19.                 print("FC Invoke End RequestId: " + rid)
  20.                 response_message = "您好,我是用阿里云函数计算实现的自定义Agent,你可以在该函数中实现更多的业务逻辑。"
  21.                 return Response(generate_response(response_message), mimetype='text/event-stream')
  22.         else:
  23.                 return "success"
  24. def generate_response(prompt):
  25.     # 模拟生成响应的过程,这里可以替换为你的实际逻辑
  26.     response_template = {
  27.         "id": "from-cache",
  28.         "choices": [
  29.             {
  30.                 "index": 0,
  31.                 "delta": {
  32.                     "role": "assistant",
  33.                     "content": "%s"
  34.                 },
  35.                 "finish_reason": "stop"
  36.             }
  37.         ],
  38.         "model": "gpt-4o",
  39.         "object": "chat.completion",
  40.         "usage": {
  41.             "prompt_tokens": 0,
  42.             "completion_tokens": 0,
  43.             "total_tokens": 0
  44.         }
  45.     }
  46.     words = re.split(r'[,,;;:]', prompt)
  47.     for index, word in enumerate(words):
  48.         response_template["choices"][0]["delta"]["content"] = word
  49.         response_template["choices"][0]["index"] = index   
  50.         yield f"data: {json.dumps(response_template)}\n\n"
  51.         time.sleep(0.3)  # 模拟延迟
  52. if __name__ == '__main__':
  53.         app.run(host='0.0.0.0',port=9000)
复制代码

自定义Agent访问地点

点击配置页签,进入左侧触发器菜单,可以看到公网访问地点和内网访问地点。


3. 配置 LobeChat


登录LobeChat后,点击立即开始。


点击右上角会话设置。


点击左侧语言模型菜单。


可以看到LobeChat已经集成了险些市面上全部主流的LLM服务,全部可以实现在一个Web Chat中可以和多家LLM举行交互,也就是差别的会话可以配置差别的模型,灵活性非常高。

本文开头说过,该最佳实践主要实现Ollama服务托管的模型和自定义的Agent,所以在语言模型设置页面,我们主要会设置OpenAI(用于配置自定义Agent)和Ollama。

3.1 配置自定义Agent



开打OpenAI开关,配置自定义Agent信息:



  • API Key:随意填写。
  • API 代理地点:填写自定义Agent访问地点的公网地点。
  • 使用客户端哀求模式:开启。
  • 模型列表:因为是自定义Agent,所以可以删掉OpenAI默认的模型名称,自行输入名称并创建。
  • 联通性检查:点击检查按钮举行检测。如果都按照文档内容实操的话,会出现检查通过的信息。


关闭模型配置窗口,回到主窗口,点击上方模型,切换到custom-agent,也就相当于会哀求到自定义Agent服务中。


举行聊天对话,可以看到会响应自定义Agent中写死的内容。


3.2 配置Ollama服务

点击会话设置,进入语言模型,开启Ollama服务。




  • Ollama服务地点:配置Ollama服务访问地点中的公网地点。
  • 使用客户端哀求模式:开启。
  • 模型列表:点击获取模型列表,更新Ollama服务中已经下载好的模型。然后选择你需要使用的模型。
  • 连通性检查:点击检查按钮举行检测。如果都按照文档内容实操的话,会出现检查通过的信息。


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


在同一个窗口再次举行对话。


3.3 配置聊天助手

LobeChat支持创建差别的聊天助手,差别的聊天助手可以是差别的模型,所以我们可以根据业务需求或本身的需求灵活的使用差别的模型或者自定义Agent。
创建翻译助手

点击左上角创建聊天助手。


进入聊天助手对话界面,点击右上角的聊天助手设置。


设置聊天助手基本信息,比如头像,头像颜色,聊天助手名称,聊天助手形貌等。


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


在聊天偏好中可以设置用户输入预处理等信息。


设置聊天助手的模型,这里选择llama3.1:8b。


回到翻译助手聊天窗口,可以让其举行翻译。


创建自定义Agent助手

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


相关链接:
[1] LobeChat
[2] 阿里云函数盘算(FC)
[3] 阿里云RDS控制台
[4] 阿里云对象存储OSS控制台
[5] 阿里云镜像管理服务ACR控制台
[6] LobeChat的镜像
[7] 函数盘算控制台
[8] 阿里云地域ID说明
[9] AK管理控制台
[10] 云原生API网关控制台
[11] 域名管理控制台
[12] 云原生API网关策略文档
[13] Auth0
[14] LobeChat的文档
[15] 这里
[16] LobeChat的文档
[17] Ollama API
[18] Ollama支持的模型

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连全瓷种植牙齿制作中心

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表