讓ChatGPT自己調(diào)用集成功能的QQ bot
最近課比較少,閑得無聊搗鼓了一下,省流效果如下

當(dāng)然,此類QQ Bot大伙已經(jīng)見過挺多了,唯一的差別就是使用了GPT3.5的API。各個功能調(diào)用并非是關(guān)鍵字檢測,而是讓GPT自己生成指令的結(jié)果,也就是說讓Bot自己理解上下文中的內(nèi)容,并以此自己去調(diào)用接口。
語音生成是用Vits,唱歌是用Vits-svc轉(zhuǎn)換(包含人聲分離+片段截?。螺d歌曲和搜索功能使用爬蟲技術(shù)完成,Bot后端使用MiraiGo。
重點是怎么讓Bot自己去調(diào)用這些功能(當(dāng)然類似于langChain之類的項目完成得更成熟,只是不支持中文,而且比較麻煩。前些天Visual ChatGPT的代碼也是基于langChain)這里提供一個比較簡單的辦法。

我原先嘗試過在傳給api的system內(nèi)容做修改,但效果不佳,很難讓BOT學(xué)習(xí)到指令怎么用,后來發(fā)現(xiàn)傳給api的整個messages其實是可以自己定義的,也就是自己偽造一份跟gpt對話的聊天記錄發(fā)送過去,這樣它這個語言生成模型就會按特定格式輸出了。(這個方法也可以穩(wěn)定繞過openai設(shè)定的倫理墻)
效果比預(yù)想之中的要穩(wěn)定很多,而且拓展性很好。搜索功能是讓gpt調(diào)用搜索引擎搜索內(nèi)容,再反過來用system prompt喂給它,只要對于html的網(wǎng)頁信息提取做得好,應(yīng)該是可以達到類似于new bing的效果的。

除了集成功能外,還主要測試了一下如何讓它成為一個真正的群聊Bot。目前的chat llm都是基于一問一答的場景上,對于群聊場景不太適應(yīng)。如果改成手動at或者關(guān)鍵字觸發(fā),就會變成很無聊的手動調(diào)用。我嘗試如法炮制用前面的方法讓它對于跟自己無關(guān)的群聊信息就調(diào)用接口pass掉,只有叫到它它才出來說話,效果比我預(yù)想中也要好很多?,F(xiàn)在的問題是它還只能對群聊信息做出回應(yīng),而不會主動分享或發(fā)表看法。
我本身也不是計算機科班學(xué)生,只是閑得無聊做著玩的。如果有人感興趣的話就把工程開源發(fā)github上。