跳转到主要内容
Background

构建边缘加速的 LLM 聊天机器人

借助 Akamai Functions 在边缘节点部署聊天机器人,并利用由专用 GPU 算力驱动的开源模型。

了解从边缘节点到模型的调用流程

了解该应用程序如何检查缓存、应用安全护栏、保留对话历史,并将新请求发送到部署在 GPU 实例上的模型。

开始之前

验证 Ollama 部署时,您需要通过 SSH 连接到 GPU 实例,因此请提前准备好 SSH 公钥,再开始配置基础架构。

  • 具有 Akamai Functions 访问权限 的 Akamai Cloud 帐户
  • Akamai Cloud 个人访问令牌
  • 对 Linodes 和防火墙的读写权限
  • 对事件的读取权限
  • 本地安装 Terraform
  • 本地安装 Spin CLI
  • 为 Spin 安装 aka 插件
  • 本地安装 Node.js
  • SSH 密钥对

构建项目

先配置推理后端,再配置、测试和部署边缘应用程序。

克隆示例应用程序,然后检查其应用程序和基础架构目录。

克隆项目存储库:

git clone https://github.com/akamai-developers/akamai-functions-llm-chatbot.git
cd akamai-functions-llm-chatbot

该存储库包含两个主要部分:

  • 包含 Terraform 配置和 cloud-init 配置的基础架构目录。
  • 包含 Astro 前端和 TypeScript API 的 Spin 应用程序。

在配置之前,请先检查 Terraform 变量。您可以根据环境需求,调整区域、GPU 方案、模型及相关的基础架构设置。

利用 Terraform 创建 GPU 实例并配置 Ollama 推理服务。

进入基础架构目录并初始化 Terraform:

cd infrastructure
terraform init

设置您的 Akamai Cloud 个人访问令牌:

export LINODE_TOKEN="your-pat-here"

配置基础架构:

terraform apply

Terraform 创建专用 GPU 实例,并利用 cloud-init:

  • 安装所需的 GPU 驱动程序
  • 安装 Ollama
  • 下载已配置的开源模型
  • 在 11434 端口开放 Ollama API
  • 等待模型准备就绪

配置基础架构后,Terraform 会返回 Ollama 端点:

ollama_endpoint = "http://<linode-ip>:11434"

配置基础架构和加载模型通常需要几分钟。

将边缘应用程序连接到 Ollama 端点,并保护其缓存管理 API。

继续操作前,请先安装 Spin CLI、Node.js 和 aka 插件。

安装或更新 Akamai Functions 插件:

spin plugins update
spin plugins install aka

该应用程序使用两个部署变量:

  • ollama_url 用于将应用程序连接到部署在 GPU 实例上的 Ollama API。
  • secret_sauce 用于保护清除响应缓存的端口。

为 secret_sauce 生成一个足够强的随机值。调用缓存管理端点时,必须在 HTTP 标头 X-SecretSauce 中提供该值。

请勿将令牌、密钥或生产端点凭据提交到存储库中。

在本地运行 Spin 应用程序,同时使用同一个远程推理后端。

启动应用程序,并传入所需的变量:

spin up --build \
--variable ollama_url="http://<linode-ip>:11434" \
--variable secret_sauce="<strong-random-secret>"

在浏览器中打开本地应用程序,然后发送一条测试消息。

请验证:

  • 聊天机器人能够返回模型生成的回答。
  • 对话历史会在整个会话过程中持续保留。
  • 对于重复的问题,聊天机器人能够从缓存中提供答案。
  • 违反安全护栏的请求会被拒绝。
  • 浏览器不会控制或提交完整的对话历史。

在本地开发时使用远程 Ollama 后端,无需使用本地 GPU,即可测试模型的运行效果。

将应用程序编译到 WebAssembly,并将其部署到 Akamai Functions。

部署前,请确认您的帐户已获得 Akamai Functions 访问权限。如果尚未获批,请先提交访问申请,并在等待审核期间继续在本地构建应用。

完成 Akamai Functions 身份验证:

spin aka login

构建并部署应用程序:

spin aka deploy --build \
--variable ollama_url="http://<linode-ip>:11434" \
--variable secret_sauce="<strong-random-secret>"

部署完成后,打开生成的应用程序 URL,并提交一个新问题。

部署后的应用程序通过 Akamai Functions 提供前端和 API。请求会先在边缘节点进行验证,通过后,应用程序才会查询键值存储或与 GPU 推理后端通信。

确认边缘处理机制能够减少不必要的模型调用。

使用新问题和重复问题来测试应用程序。

对于新问题,应用程序会:

  1. 验证收到的消息。
  2. 应用输入和话题安全护栏。
  3. 加载会话历史记录。
  4. 检查响应缓存。
  5. 如果缓存中没有可用的响应,则将请求发送给 Ollama。
  6. 存储生成的回答,以便后续调用。
  7. 更新会话历史记录。

对于相同的重复问题,应用程序会直接从边缘节点的缓存中返回已有回答,无需再次调用 GPU 推理。

测试完成后,请删除不再需要的基础架构:

cd infrastructure
terraform destroy

专用 GPU 资源在删除前会持续产生费用。

常见问题

常见问题

Akamai Functions 负责提供前端和 API,验证请求、应用安全护栏、管理对话会话,并在调用模型之前检查分布式响应缓存。

开源模型通过 Ollama 提供推理服务,在配备专用 NVIDIA GPU 的 Akamai Cloud 实例上运行。模型并不在 Akamai Functions 内部运行。

Spin 应用程序可编译到 WebAssembly,具备启动速度快、工作负载隔离性强等优势,并且能够部署到 Akamai 的分布式边缘基础架构中。

该应用程序会对每个问题进行规范化处理,并在 Akamai Functions 的键值存储中查找是否已有对应的回答。如果缓存中已有回答,应用程序就会返回已保存的回答,无需再次向 GPU 发送请求。

对话历史存储在 Akamai Functions 的服务器端键值存储中,并通过安全 Cookie 中的会话标识符与对应会话关联。此示例将对话历史限制为最多 20 条消息。

此示例包含针对提示注入、二次请求跳转和代码生成请求的检查。它还会限制消息长度,并通过系统提示约束模型的回答,确保其符合应用程序的预期领域。

可以。您可以在基础架构配置中更换 Ollama 模型,但需要确保所选模型满足相应的硬件和内存要求。

该优惠仅适用于符合条件的云服务。专用 GPU 服务不在抵用范围内,因此在配置项目之前,请先查看最新的促销条款。

支持。TypeScript API 使用 LangChain.js,并通过兼容 Ollama 的端点调用模型,因此可以在此示例的基础上,引入文档加载器、检索器和向量存储,扩展静态上下文处理能力。

项目完成后,请运行 terraform destroy 命令,并确认 GPU 实例及相关资源已从帐户中删除。