自助手增加ChatGPT功能以来,每当有新的大语言模型出现,总有人问插件什么时候支持某某模型,其实呢,助手一直都支持接入其它大语言模型,不过这需要你懂一点点代码,不懂也没关系,这不是有ChatGPT吗,它懂。下面的示例代码也是我一步步问ChatGPT整合而来。毕竟都什么年代了,谁还写传统的代码呢。
利用助手的反向代理功能,通过自己的代理服务器将助手发送过来的消息丢给其它语言模型,你唯一需要做的就是对数据格式进行转换。参考下面的示例代码,可以接入任何大语言模型。
以下是接入Gemini(谷歌推出的大模型)的参考代码,实际应用的话你还可以对错误进行处理,比如出错后自动重试,保证每次都可以返回内容。或者通过判断请求参数中的模型名称接入对应大模型。
const express = require('express');const axios = require('axios');const app = express();const port = 9000;const API_KEY = ''; // 配置Gemini的APIKEYconst url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${API_KEY}`;app.use(express.json());app.use('/', async (req,res) => {// console.log(req.body);// 助手提交过来的数据// {// messages: [// {// content: '你是ChatGPT,是懒猫将你开发成了微信插件,请以对话方式回应,不要以用户身份回答。',// role: 'system'// },// { content: '你好', role: 'user' }// ],// top_p: 1,// model: 'gpt-3.5-turbo',// stream: false//}const messages = req.body.messages;if (!messages) {// 没有参数直接访问链接res.status(400).json({ error: '出错啦,请把代理地址填入助手中访问' });return;}let contents = [];messages.forEach((item,index) => {// 插件传递过来的第一条消息是预设,Gemini第一条消息要求是用户,所以当设置预设后添加上一条模型回复的内容if (index === 0) {contents.push({'role':'user','parts':[{'text' :item.content}]},{'role':'model','parts':[{'text' :'好的'}]})}else if(index === 1 && item.role === 'assistant') {// 由于Gemini接收对话的格式必须是user/model/user/model...,多条对话时插件传递过来的第二条可能会变成assistant所以忽略掉}else{if (item.role === 'assistant') {contents.push({'role':'model','parts':[{'text' :item.content}]});}else{contents.push({'role':'user','parts':[{'text' :item.content}]});}}});try {const response = await axios.post(url, {'contents':contents});if (response.data.candidates) {// 返回数据给助手res.json({'choices': [{'message': {'role': 'assistant','content': response.data.candidates[0].content.parts[0].text}}]});}else{res.status(400).json({ error: '出错啦' });}}catch (error) {res.status(400).json({ error: '出错啦' });}})app.listen(port,() =>{console.log(`服务启动成功http://localhost:${port}`);})
上面的代码已打包在我的TG频道https://t.me/lanmaoshare。下载后填入自己的apikey就可以直接部署到腾讯云函数或自己的服务器。部署教程链接频道内也有分享。