50行代码实现微信chatgpt接入
/ 3 min read
Table of Contents
前言
最近看到很多 chatgpt 接入微信的项目,遂自己简单实现一下
阅读须知
- node:v16.14.2
- pnpm 8.2.0
- typescript ^5.0.4
- 需要自己有 openai 的账号,以及生成 key
效果图
项目搭建
- 使用
npm init初始化项目 - 安装
pnpm i ts-node-devpnpm i wechatypnpm i wechaty-puppet-wechatpnpm i qrcode-terminalpnpm i axiospnpm i https-proxy-agentwechaty 是一个开源的的对话机器人 SDK,使用wechaty-puppet-wechat使用 uos 协议实现微信登录
qrcode-terminal 实现登录时在命令行生成二维码
axios 发送请求
https-proxy-agent 实现 axios 代理,openai 需要代理才能访问 3. 代码实现 创建 main.ts 文件,并导入
import { WechatyBuilder } from "wechaty";import Axios from "axios";import HttpsProxyAgent from "https-proxy-agent";import qrcodeTerminal from "qrcode-terminal";初始化 wechaty
const wechaty = WechatyBuilder.build({ name: "wechat-bot", puppetOptions: { uos: true }, puppet: "wechaty-puppet-wechat",});实现登录以及消息监听方法
wechaty .on("scan", (qrcode, status) => { //创建二维码,扫码登录 qrcodeTerminal.generate(qrcode, { small: true }); }) .on("login", (user) => console.log(`User ${user} logged in`)) .on("error", (error) => console.log(error)) .on('message', message => console.log(`Message: ${message}`)) });//启动wechaty.start();实现 axios 代理,以及请求 openai 方法
官方有提供 openai 包以方便 node Api 调用
const httpsAgent = HttpsProxyAgent(`http://127.0.0.1:33210`);const axios = Axios.create({ proxy: false, httpsAgent,});async function chatApi(message: string): Promise<string> { const result = await axios.post( "https://api.openai.com/v1/chat/completions", { model: "gpt-3.5-turbo", messages: [{ role: "system", content: message }], }, { headers: { Authorization: "Bearer xxxxxxxx", }, } ); console.log(result.data.choices[0].message); return result.data.choices[0].message.content;}在 message 监听中获取好友消息并实现请求调用,并返回 ai 的回复
wechaty.on("message", async (message) => { //判断一下不是自己发的消息才进行 if (message.self()) { console.log("this message is sent by myself!"); } else { //判断消息类型 if (message.type() === wechaty.Message.Type.Text) { const txt = await chatApi(message.text()); //回复消息 message.say(txt); } }});wechaty.start();4.全部代码
import { WechatyBuilder } from "wechaty";import Axios from "axios";import HttpsProxyAgent from "https-proxy-agent";import qrcodeTerminal from "qrcode-terminal";const wechaty = WechatyBuilder.build({ name: "wechat-bot", puppetOptions: { uos: true }, puppet: "wechaty-puppet-wechat",});
wechaty .on("scan", (qrcode, status) => { qrcodeTerminal.generate(qrcode, { small: true }); }) .on("login", (user) => console.log(`User ${user} logged in`)) .on("error", (error) => console.log(error)) .on("message", async (message) => { // const contact = message.talker(); // const name = contact.name(); if (message.self()) { console.log("this message is sent by myself!"); } else { if (message.type() === wechaty.Message.Type.Text) { const txt = await chatApi(message.text()); message.say(txt); } } });wechaty.start();
const httpsAgent = HttpsProxyAgent(`http://127.0.0.1:33210`);const axios = Axios.create({ proxy: false, httpsAgent,});
async function chatApi(message: string): Promise<string> { const result = await axios.post( "https://api.openai.com/v1/chat/completions", { model: "gpt-3.5-turbo", messages: [{ role: "system", content: message }], }, { headers: { Authorization: "Bearer xxxxxxxxxxx", }, } ); console.log(result.data.choices[0].message); return result.data.choices[0].message.content;}参考文档
wechaty: http://wechaty.js.org/docs/ openai:https://beta.openai.com/account/api-keys