最近ChatGPT
那么ChatGPT
1. 效果展示
- 连续对话
- 手动输入
2. 云函数实现
我们仍然使用Laf云平台来实现,如何注册Laf和安装依赖,见上篇文章 使用Laf云平台,两步将ChatGPT接入微信公众号(含代码)
- 创建Siri云函数
// siri.js
// 引入必要的库
import cloud from &39;@lafjs/cloud&39;;
const { v4: uuidv4 } = require(&39;uuid&39;);
const axios = require(&39;axios&39;);
// 创建数据库连接
const db = cloud.database();
const ChatTable = db.collection(&39;siri&39;)
// 设置key和模型
const OPENAI_KEY = process.env.OPENAI_KEY || &34;YOUR API-KEY&34;;
const OPENAI_MODEL = process.env.MODEL || &34;gpt-3.5-turbo&34;;
const MAX_MESSAGES_PER_CHAT = 40;
export async function main(params, context) {
console.log(&39;siri入参:&39;, params);
const { question, cid } = params.body;
// 创建一个id
const chatId = cid ? cid : uuidv4();
// 保存用户问题
await ChatTable.add({ chatId, role: &39;user&39;, content: question });
// 获取历史信息
const chats = await ChatTable
.where({ chatId })
.orderBy(&34;createdAt&34;, &34;desc&34;).limit(MAX_MESSAGES_PER_CHAT).get();
// 组装问题prompt
const messages = [
{ role: &39;system&39;, content: &39;You are a helpful assistant.&39; },
...chats.data.map(one => ({ role: one.role, content: one.content })),
];
const data = JSON.stringify({
model: OPENAI_MODEL,
messages: messages
});
const config: any = {
method: &39;post&39;,
maxBodyLength: Infinity,
url: &39;https://api.openai.com/v1/chat/completions&39;,
headers: {
Authorization: `Bearer ${OPENAI_KEY}`,
&34;Content-Type&34;: &34;application/json&34;,
},
data: data,
timeout: 50000
};
try {
// 发送请求
const completion = await axios(config);
const responseMessage = completion.data.choices[0].message;
// 保存返回结果
await ChatTable.add({ chatId, ...responseMessage });
// 返回结果
return { reply: responseMessage.content, cid: chatId };
} catch (error) {
// 打印错误日志
console.log(&39;error&39;, error.response || error);
let errorMessage;
// 处理返回报错信息
if (error.response) {
const { status, statusText, data } = error.response;
if (status === 401) {
errorMessage = &39;Unauthorized: Invalid OpenAI API key, please check your API key in the AirCode Environments tab.&39;;
} else if (data.error && data.error.message) {
errorMessage = data.error.message;
} else {
errorMessage = `Request failed with status code ${status}: ${statusText}`;
}
} else if (error.request) {
errorMessage = &39;No response received from the server&39;;
} else if (error.code === &39;ENOTFOUND&39; || error.code === &39;ECONNREFUSED&39;) {
errorMessage = `Network error: ${error.message}`;
} else {
errorMessage = `Request setup error: ${error.message}`;
}
return { error: errorMessage };
}
};
最新代码可见:https://github.com/husanr/siri_gpt_laf
3. 添加快捷指令
获取捷径添加快捷指令
- 添加过之后,在快捷指令中找到刚添加打开机器人快捷指令,点击右上角三个点进入编辑页面,然后把上边发布的Siri云函数的地址复制粘贴到文本的位置,然后点击完成。
嘿 Siri,打开机器人
大功告成!
关注我的公众号,更多精彩内容等你来看!