基于Cloudflare Workers的OpenAI兼容聊天API服务,具有会话持久化和数据库集成功能。
- 兼容OpenAI Chat API格式
- 使用Durable Objects实现会话持久化
- PostgreSQL数据库集成
- 支持流式响应
- 支持工具调用(如HttpTool)
- 自动加载GraphQL marketplace查询并增强提示词
- KV缓存优化数据库查询性能
- Node.js 18+
- Wrangler CLI
- PostgreSQL数据库(可选)
- 克隆仓库
git clone https://github.com/yourusername/ai-chat-api.git
cd ai-chat-api
- 安装依赖
npm install
创建一个.dev.vars
文件用于本地开发(示例):
OPENAI_API_KEY=sk-your-openai-api-key
MODEL_NAME=gpt-4o-2024-11-20
DATABASE_URL=postgresql://username:password@host:port/database
对于生产环境,使用Wrangler CLI设置秘密:
# 设置OpenAI API密钥
wrangler secret put OPENAI_API_KEY
# 设置数据库连接字符串
wrangler secret put DATABASE_URL
npm run dev
访问 http://localhost:8787
测试API。
- 登录Cloudflare(如果尚未登录)
wrangler login
- 部署Worker
npm run deploy
发送POST请求到API端点,格式与OpenAI Chat API兼容:
{
"messages": [
{"role": "system", "content": "你是一个有用的AI助手。"},
{"role": "user", "content": "你好,请告诉我今天是星期几?"}
],
"stream": true
}
使用Bearer令牌进行身份验证:
Authorization: Bearer your-token-here
本服务使用PostgreSQL存储和检索数据。数据库连接配置通过DATABASE_URL
环境变量提供。
本服务使用pg
库直接连接PostgreSQL数据库,采用连接池方式优化性能:
// 创建连接池
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 5, // 最大连接数
idleTimeoutMillis: 30000, // 连接最大空闲时间
connectionTimeoutMillis: 5000 // 连接超时
});
服务会自动从数据库的marketplaces
表中加载GraphQL查询数据,并将其添加到AI的提示词中。这样AI能够了解可用的GraphQL查询字段,并在对话中使用它们。
数据结构如下:
interface Marketplace {
id: string;
name: string;
description?: string;
endpoint: string;
headers: Record<string, string>;
rootFields: {
name: string;
description?: string;
}[];
createdAt?: string;
}
为了提高性能,marketplace数据会被缓存到Cloudflare KV中,默认缓存时间为1小时。要设置KV:
- 创建KV命名空间:
wrangler kv namespace create CHAT_CACHE
wrangler kv namespace create CHAT_CACHE --preview
- 将创建的ID更新到
wrangler.toml
中:
[[kv_namespaces]]
binding = "CHAT_CACHE"
id = "your-kv-id-here"
preview_id = "your-preview-kv-id-here"
要在生产环境中使用PostgreSQL:
- 创建PostgreSQL数据库并获取连接字符串
- 使用Wrangler设置DATABASE_URL秘密:
wrangler secret put DATABASE_URL
- 在
tools
目录中创建新的工具模块 - 在
Chat.ts
中导入并注册工具
在.dev.vars
或通过Wrangler secret设置MODEL_NAME
变量来切换不同的模型。