- 具有 Akamai Functions 访问权限 的 Akamai Cloud 帐户
- Akamai Cloud 个人访问令牌
- 对 Linodes 和防火墙的读写权限
- 对事件的读取权限
- 本地安装 Terraform
- 本地安装 Spin CLI
- 为 Spin 安装 aka 插件
- 本地安装 Node.js
- SSH 密钥对
开始之前
验证 Ollama 部署时,您需要通过 SSH 连接到 GPU 实例,因此请提前准备好 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 推理后端通信。
确认边缘处理机制能够减少不必要的模型调用。
使用新问题和重复问题来测试应用程序。
对于新问题,应用程序会:
- 验证收到的消息。
- 应用输入和话题安全护栏。
- 加载会话历史记录。
- 检查响应缓存。
- 如果缓存中没有可用的响应,则将请求发送给 Ollama。
- 存储生成的回答,以便后续调用。
- 更新会话历史记录。
对于相同的重复问题,应用程序会直接从边缘节点的缓存中返回已有回答,无需再次调用 GPU 推理。
测试完成后,请删除不再需要的基础架构:
cd infrastructure
terraform destroy
专用 GPU 资源在删除前会持续产生费用。
常见问题
常见问题
开源模型通过 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 实例及相关资源已从帐户中删除。