使用Cloudflare Workers搭建Telegram Bot并调用讯飞星火大模型来实现个人GPT,涉及以下几个步骤:

  1. 创建和配置Cloudflare Workers
  2. 设置Telegram Bot
  3. 实现与讯飞星火大模型的API交互
  4. 修改环境变量
  5. 部署和测试
  6. 确保Webhook设置正确

创建和配置Cloudflare Workers

首先,确保你有一个Cloudflare账户,并且已经创建了一个新的Worker。

创建Worker

  1. 登录到Cloudflare账户。
  2. 在仪表板中导航到Workers选项。
  3. 创建一个新的Worker。

设置Telegram Bot

你需要创建一个新的Telegram Bot,并获取它的Token。

创建Telegram Bot

  1. 在Telegram中搜索并启动@BotFather。
  2. 使用命令/newbot创建一个新的Bot,并按照指示设置名称和用户名。
  3. 记录下生成的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 });
}
}

// 调用讯飞星火大模型API
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; // 假设返回的文本在 `choices[0].message.content` 字段中
} catch (error) {
console.error('Error calling XunFei API:', error.message, error.stack);
throw error;
}
}

// 通过Telegram API发送消息
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

  1. 在Cloudflare Workers仪表板中打开你的Worker。
  2. 将上述代码粘贴到编辑器中。
  3. 保存并部署你的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。