dev.to #ai短讯
在 Cloudflare 免费层级构建自托管 AI 智能体:从零到生产环境
文章指出尽管 AI 智能体工程师需求激增,但多数岗位依赖昂贵云基础设施。Cloudflare Workers 提供每日 10 万次请求的免费额度,足以运行功能完整的 AI 智能体且无供应商锁定或月费。本指南演示如何利用 Ollama 调用开源模型,在 Cloudflare 免费架构上部署生产级智能体,并解决推理成本问题。
根据2024年第四季度LinkedIn的招聘数据,AI代理工程师岗位同比增长了340%,但大多数岗位要求部署在昂贵的云基础设施上。Cloudflare Workers 提供免费套餐,每天支持10万次请求——足以运行一个功能完善的AI代理,且无需供应商锁定或支付月费。本指南将引导你构建一个完全运行在Cloudflare免费基础设施上的生产就绪型代理,通过Ollama使用开源模型,并将推理成本控制在每千个token不到0.01美元。## 在每月5美元的服务器上部署Ollama,并通过Cloudflare连接
Ollama 可在本地运行量化后的LLM。首先启动一台小型VPS(Linode、Hetzner或DigitalOcean,每月5–6美元),配备4GB内存并安装Ollama:
curl https://ollama.ai/install.sh | sh
ollama pull mistral:7b-instruct-q4_K_M量化为Q4格式的Mistral 7B模型约占用4GB显存,请求响应速度约为每秒10个token。只需拉取一次模型;后续调用将从磁盘复用该模型。通过Cloudflare Tunnel暴露Ollama服务,以避免端口转发:
wget https://github.com/cloudflare/cloudflared/releases/download/2024.1.0/cloudflared-linux-amd64.deb
dpkg -i cloudflared-linux-amd64.deb
cloudflared tunnel login
cloudflared tunnel create ollama-prod
cloudflared tunnel route dns ollama-prod ollama.yourname.workers.dev然后创建 ~/.cloudflared/config.yml 文件:
tunnel: ollama-prod
ingress:
- hostname: ollama.yourname.workers.dev
service: http://localhost:11434
- service: http_status:404运行 cloudflared tunnel run ollama-prod,你的Ollama实例即可从任何地方访问,而无需暴露SSH或打开防火墙端口。因此,该隧道是端到端加密的,且在Cloudflare计划中免费。要点:一台5美元的VPS加上免费的Cloudflare Tunnel,可替代每月30–50美元的管理式推理API。使用以下命令测试连通性:curl https://ollama.yourname.workers.dev/api/generate -d '{"model": "mistral:7b-instruct-q4_K_M", "prompt": "test"}'。## 构建路由任务的Agent Worker
Cloudflare Workers 在边缘以亚50毫秒延迟运行JavaScript。创建一个新的Worker项目:
npm create cloudflare@latest my-ai-agent -- --type javascript
cd my-ai-agent用以下代码替换 src/index.js,实现一个对用户意图进行分类并调用Ollama的代理:
export default {
async fetch(request, env) {
if (request.method !== 'POST') {
return new Response('POST only', { status: 405 });
}
const { message } = await request.json();
const ollamaUrl = env.OLLAMA_ENDPOINT;
// 路由:先分类意图
const classifyResponse = await fetch(`${ollamaUrl}/api/generate`, {
method: 'POST',
body: JSON.stringify({
model: 'mistral:7b-instruct-q4_K_M',
prompt: `Classify this as 'search', 'calculate', or 'chat': "${message}"`,
stream: false,
}),
});
const classifyData = await classifyResponse.json();
const intent = classifyData.response.split('\n')[0].toLowerCase();
// 路由逻辑
let result;
if (intent.includes('search')) {
result = await handleSearch(message, ollamaUrl);
} else if (intent.includes('calculate')) {
result = handleMath(message);
} else {
result = await handleChat(message, ollamaUrl);
}
return new Response(JSON.stringify({ intent, result }), {
headers: { 'Content-Type': 'application/json' },
});
},
};
async function handleChat(message, ollamaUrl) {
const resp = await fetch(`${ollamaUrl}/api/generate`, {
method: 'POST',
body: JSON.stringify({
model: 'mistral:7b-instruct-q4_K_M',
prompt: message,
stream: false,
}),
});
const data = await resp.json();
return data.response;
}
function handleMath(message) {
// 仅用于算术的安全eval
try {
const result = Function('"use strict"; return (' + message + ')')();
return `Result: ${result}`;
} catch {
return 'Math parsing failed';
}
}
async function handleSearch(message, ollamaUrl) {
// 在生产环境中,应调用真实的搜索API或向量数据库
return `Search for: ${message}`;
}在 wrangler.toml 中设置你的Ollama端点:
[env.production]
vars = { OLLAMA_ENDPOINT = "https://ollama.yourname.workers.dev" }使用 npm run deploy 进行部署。每次请求在 Cloudflare Compute 上的成本约为 0.1 美分;免费套餐每天可覆盖 100,000 次请求。要点:在边缘构建代理逻辑,其执行时间仅为 30–50 毫秒。Worker 充当无状态路由器;昂贵的推理过程在你的 Ollama 服务器上完成。使用 curl -X POST https://my-ai-agent.workers.dev -H 'Content-Type: application/json' -d '{"message": "What is 2+2?"}' 进行测试。## 使用 Durable Objects 添加记忆功能
Cloudflare Durable Objects 在全球存在点提供持久化状态。使用它们来跟踪对话历史:
export class AgentMemory {
constructor(state) {
this.state = state;
this.storage = state.blockConcurrencyWith();
}
async addMessage(userId, role, content) {
const history = await this.storage.get(`history-${userId}`) || [];
history.push({ role, content, timestamp: Date.now() });
await this.storage.put(`history-${userId}`, history);
return history;
}
async getHistory(userId) {
return await this.storage.get(`history-${userId}`) || [];
}
}在 Worker 中绑定它:
export default {
async fetch(request, env) {
const url = new URL(request.url);
const userId = url.searchParams.get('user') || 'default';
const id = env.MEMORY.idFromName(userId);
const memory = env.MEMORY.get(id);
const history = await memory.getHistory(userId);
// 在 LLM 调用中使用历史作为上下文
},
};Durable Objects 的免费套餐每月可覆盖 300 万次请求;无需外部数据库即可保持对话状态。要点:Durable Objects 替代 Redis 用于代理记忆。每个用户获得隔离的状态;读写操作是原子的。请求之间没有冷启动。## 在生产环境中监控成本和性能
使用 Cloudflare Analytics 跟踪请求量。创建一个简单的仪表板脚本,如果推理延迟超过 5 秒则发出警报:
watch -n 60 'curl -s https://api.cloudflare.com/client/v4/graphql -H "Authorization: Bearer $CF_TOKEN" -d
'{"query": "query { viewer { zones(first: 1) { nodes { httpRequests1dGroups(limit: 1) { avg { clientRequestDuration } } } } } }"}
| jq .'设置 Ollama 的最大并发请求数以防止过载:
export OLLAMA_NUM_PARALLEL=2
ollama serve使用 2 个并行请求和 Mistral 7B,你可以处理每分钟约 50–100 次请求。在 Cloudflare Cache 中缓存常见查询,可将后端命中减少 60–70%。要点:每周监控延迟。如果 Ollama 遇到瓶颈,可扩展至每月 12 美元的实例。大多数代理的总运营成本低于每月 15 美元(VPS + 存储),比托管方案便宜 99%。## 今天就开始使用一个简单的 HTTP 端点
今天部署一个调用你 Ollama 实例的 Worker:
- 创建 Cloudflare 账户(免费)。2. SSH 到一台 5 美元的 VPS 并运行 curl https://ollama.ai/install.sh | sh && ollama pull mistral:7b-instruct-q4_K_M。3. 通过 Cloudflare Tunnel 暴露它:cloudflared tunnel create my-agent && cloudflared tunnel route dns my-agent api.myname.workers.dev。4. 创建一个向 https://api.myname.workers.dev/api/generate 发送 POST 请求的 Worker。5. 部署并使用真实消息进行测试。你将在不到 30 分钟内拥有一个运行中的 AI 代理,前期成本为 0 美元/月。当你需要多轮对话时,再添加 Durable Objects 以支持记忆功能。只有当请求量超过每分钟 500 次时,才扩展到你的第二台 VPS。
本文草稿由 AI 辅助完成。
译文已达到本站中文翻译的字数上限,剩余内容请查看原文。