使用Cloudflare Workers搭建Telegram Bot并调用讯飞星火大模型来实现个人GPT,涉及以下几个步骤:
创建和配置Cloudflare Workers
设置Telegram Bot
实现与讯飞星火大模型的API交互
修改环境变量
部署和测试
确保Webhook设置正确
创建和配置Cloudflare Workers 首先,确保你有一个Cloudflare账户,并且已经创建了一个新的Worker。
创建Worker
登录到Cloudflare账户。
在仪表板中导航到Workers选项。
创建一个新的Worker。
设置Telegram Bot 你需要创建一个新的Telegram Bot,并获取它的Token。
创建Telegram Bot
在Telegram中搜索并启动@BotFather。
使用命令/newbot
创建一个新的Bot,并按照指示设置名称和用户名。
记录下生成的Bot Token。
实现与讯飞星火大模型的API交互 以下是完整的示例代码,实现了从Telegram接收消息、调用讯飞星火大模型生成回复并发送回Telegram的功能。
worker.js
示例代码1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 addEventListener ('fetch' , event => { event.respondWith (handleRequest (event.request )); }); async function handleRequest (request ) { try { const { method, url } = request; console .log (`Received request: ${method} ${url} ` ); if (method === 'POST' ) { const data = await request.json (); console .log ('Request JSON:' , JSON .stringify (data)); const { message } = data; if (!message || !message.chat || !message.chat .id || !message.text ) { console .error ('Invalid request payload:' , JSON .stringify (data)); throw new Error ('Invalid request payload' ); } const chatId = message.chat .id ; const userMessage = message.text ; console .log (`User message: ${userMessage} from chat ID: ${chatId} ` ); const aiResponse = await callXunFeiStarFireAPI (userMessage); console .log (`AI response: ${aiResponse} ` ); const sendMessageResult = await sendMessageToTelegram (chatId, aiResponse); console .log (`Send message result: ${JSON .stringify(sendMessageResult)} ` ); return new Response ('OK' , { status : 200 }); } else { console .log ('Method not allowed:' , method); return new Response ('Method not allowed' , { status : 405 }); } } catch (error) { console .error ('Error handling request:' , error.message , error.stack ); return new Response ('Internal Server Error: ' + error.message , { status : 500 }); } } async function callXunFeiStarFireAPI (message ) { try { const response = await fetch (ENV .XUNFEI_API_ENDPOINT , { method : 'POST' , headers : { 'Content-Type' : 'application/json' , 'Authorization' : `Bearer ${ENV.XUNFEI_API_KEY} ` }, body : JSON .stringify ({ model : ENV .XUNFEI_CHAT_MODEL , messages : [ { role : 'user' , content : message } ] }) }); if (!response.ok ) { const errorText = await response.text (); console .error (`Failed to call XunFei StarFire API: ${response.status} ${response.statusText} - ${errorText} ` ); throw new Error (`Failed to call XunFei StarFire API: ${response.status} ${response.statusText} ` ); } const data = await response.json (); console .log ('XunFei API response:' , JSON .stringify (data)); return data.choices [0 ].message .content ; } catch (error) { console .error ('Error calling XunFei API:' , error.message , error.stack ); throw error; } } async function sendMessageToTelegram (chatId, text ) { try { const TELEGRAM_API_URL = `https://api.telegram.org/bot${ENV.TELEGRAM_BOT_TOKEN} /sendMessage` ; const response = await fetch (TELEGRAM_API_URL , { method : 'POST' , headers : { 'Content-Type' : 'application/json' }, body : JSON .stringify ({ chat_id : chatId, text : text, parse_mode : 'Markdown' }) }); if (!response.ok ) { const errorText = await response.text (); console .error (`Failed to send message to Telegram: ${response.status} ${response.statusText} - ${errorText} ` ); throw new Error (`Failed to send message to Telegram: ${response.status} ${response.statusText} ` ); } const data = await response.json (); console .log ('Telegram API response:' , JSON .stringify (data)); return data; } catch (error) { console .error ('Error sending message to Telegram:' , error.message , error.stack ); throw error; } } const ENV = { XUNFEI_API_KEY : 'your_xunfei_api_key' , TELEGRAM_BOT_TOKEN : 'your_telegram_bot_token' , XUNFEI_API_ENDPOINT : 'https://api.xfyun.cn/v1/service/v1' , XUNFEI_CHAT_MODEL : 'xfyun-starfire-large' };
修改环境变量 XUNFEI_API_KEY: ‘key:secret’ # 注意中间冒号连接key和secret
TELEGRAM_BOT_TOKEN:’’ # 上面获取的telegram bot token
XUNFEI_API_ENDPOINT: ‘https://spark-api-open.xf-yun.com/v1/chat/completions ‘
XUNFEI_CHAT_MODEL: ‘general’ # 选择模型版本
general指向Lite版本; generalv2指向V2.0版本; generalv3指向Pro版本; generalv3.5指向Max版本;
部署和测试 部署到Cloudflare Workers
在Cloudflare Workers仪表板中打开你的Worker。
将上述代码粘贴到编辑器中。
保存并部署你的Worker。
配置Telegram Webhook 在浏览器中访问以下URL以设置Webhook:
1 https://api.telegram.org/bot<your_telegram_bot_token>/setWebhook?url=https://<your-worker-subdomain>.workers.dev
替换<your_telegram_bot_token>
和<your-worker-subdomain>
为实际值。
验证功能 在Telegram中发送消息到你的Bot,Bot应该会调用讯飞星火大模型生成回复并发送回你的聊天。
确保Webhook设置正确 确认你已经正确设置了Telegram Webhook,可以用如下命令:
1 https://api.telegram.org/bot<your_telegram_bot_token>/getWebhookInfo
替换<your_telegram_bot_token>
为实际值。
注意事项
API Key 安全 :确保API Key安全,不要在公共仓库中暴露。
错误处理 :实际应用中需要更多的错误处理和日志记录。
响应格式 :根据讯飞星火大模型的实际响应格式,调整代码解析响应部分。
通过这些步骤,你就可以在Cloudflare Workers上成功搭建一个调用讯飞星火大模型的Telegram Bot,实现个人GPT。