国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

3分鐘自定義你的chatGPT聊天微信機器人

這篇具有很好參考價值的文章主要介紹了3分鐘自定義你的chatGPT聊天微信機器人。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景

最近chatGPT實在太火了,不談下都不好意思說自己在技術(shù)圈混了,剛好前段時間公司里面在舉辦一個企業(yè)微信機器人比賽,然后就用注冊了openai的一個賬號,用python寫了一個玩玩,但是想想不過癮只能公司內(nèi)部體驗,于是乎又花了2個小時寫了一個基于微信的聊天機器人,這里和大家交流下。

現(xiàn)實步驟

  1. 首先要能繞開openai 國內(nèi)的訪問限制,這一步驟大家自己想辦法;
  2. 需要注冊openai賬號,這一步驟大家也自己想辦法;
  3. 實現(xiàn)模擬登錄微信賬號,找到一個不錯的開源代碼,在我的github里面有;
  4. 在接收到微信信息時調(diào)用openai的api,這里我使用了go sdk 開源地址也在在我的github里。

相關(guān)功能

我的簡單demo代碼開源拉了github地址點這里
功能介紹:

  • 支持回復(fù)微信文本消息
  • 支持文本回復(fù)圖片消息
  • 支持群消息at回復(fù)
  • 支持上下文記憶
  • 支持基于網(wǎng)頁鏈接地址讀取總結(jié)文件

演示圖片

群里時at它
3分鐘自定義你的chatGPT聊天微信機器人
單聊時直接發(fā)送消息,支持根據(jù)語義來返回圖片
3分鐘自定義你的chatGPT聊天微信機器人文章來源地址http://www.zghlxwxcb.cn/news/detail-428005.html

實現(xiàn)原理

  1. 調(diào)用微信桌面客戶端協(xié)議登錄微信號
  2. 監(jiān)聽微信文本消息進行回復(fù)
  3. 在回復(fù)消息之前對消息進行語義識別,這里單獨寫了一個prompt來識別文本的語義是來生成圖片還是進行文本回復(fù)就行,如果是生成圖片的話,就直接回復(fù)圖片。

源碼

package main

import (
	"bytes"
	"context"
	"encoding/base64"
	"fmt"
	"image/png"
	"os"
	"strings"
	"time"

	"github.com/eatmoreapple/openwechat"
	openai "github.com/sashabaranov/go-openai"
)

// OpenaiWechat
type OpenaiWechat struct {
	ChatBot      *openwechat.Bot                           // chat bot
	Openai       *openai.Client                            // openai client
	userDialogue map[string][]openai.ChatCompletionMessage // save user gialogue context
}

var singleton *OpenaiWechat

// firstUserDialogue
var firstUserDialogue = []openai.ChatCompletionMessage{
	{
		Role:    openai.ChatMessageRoleSystem,
		Content: "你是一個非常有幫助的助手",
	},
	{
		Role:    openai.ChatMessageRoleUser,
		Content: "請問我怎么規(guī)劃我的職業(yè)發(fā)展呢?",
	},
	{
		Role: openai.ChatMessageRoleAssistant,
		Content: `你好,我很高興能幫助你。職業(yè)發(fā)展是一個非常重要的話題,你可以從以下幾個方面考慮:
		你的興趣愛好和技能:你可以考慮你的興趣愛好和技能,看看哪些職業(yè)與你的興趣愛好和技能相匹配。這樣可以讓你在工作中感到更有成就感和滿足感。
		行業(yè)前景:你可以考慮一些行業(yè)的前景,看看哪些行業(yè)在未來幾年內(nèi)會有更好的發(fā)展前景。這樣可以讓你在職業(yè)發(fā)展中更有保障。
		學(xué)歷和培訓(xùn):你可以考慮你的學(xué)歷和培訓(xùn),看看哪些職業(yè)需要更高的學(xué)歷和培訓(xùn)。這樣可以讓你更好地規(guī)劃你的職業(yè)發(fā)展。
		希望這些建議能幫到你。你還有其他問題嗎?`,
	},
}

func init() {
	//bot := openwechat.DefaultBot()
	bot := openwechat.DefaultBot(openwechat.Desktop) // deskop mode,you can switch deskop mode if defualt can not login

	// Register message handler function
	bot.MessageHandler = func(msg *openwechat.Message) {
		replyChatMsg(msg)
	}

	// Register login QR code callback
	bot.UUIDCallback = openwechat.PrintlnQrcodeUrl

	// login
	if err := bot.Login(); err != nil {
		fmt.Println(err)
		return
	}

	client := openai.NewClient(os.Getenv("OPENAI_KEY")) // your openai key
	//client := openai.NewClient("")
	singleton = &OpenaiWechat{
		Openai:  client,
		ChatBot: bot,
	}
	singleton.userDialogue = make(map[string][]openai.ChatCompletionMessage)

	// lock goroutine, until an exception occurs or the user actively exits
	bot.Block()
}
func main() {
}

// replyChatMsg
func replyChatMsg(msg *openwechat.Message) error {

	if msg.IsSendByGroup() { // only accept group messages and send them to yourself
		if !msg.IsAt() {
			return nil
		}
	} else if !msg.IsSendByFriend() { // non-group messages only accept messages from your own friends
		return nil
	}

	if msg.IsSendBySelf() { // self sent to self no reply
		return nil
	}
	// only handle text messages
	if msg.IsText() {
		msg.Content = strings.Replace(msg.Content, "@GPT3.5?", "", 1)
		fmt.Println(msg.Content)
		// simple match processing
		if isImage, _ := isImageContent(msg.Content); isImage {
			return replyImage(msg)
		}
		return replyText(msg)
	}
	return nil

}

// 圖片生成校驗
var imageMessage = []openai.ChatCompletionMessage{
	{
		Role:    openai.ChatMessageRoleSystem,
		Content: "你現(xiàn)在是一個語義識別助手,用戶輸入一個文本,你根據(jù)文本的內(nèi)容來判斷用戶是不是想生成圖片,是的話你就回復(fù)是,不是的話你就回復(fù)否,記住只能回復(fù):是 或者 否",
	},
	{
		Role:    openai.ChatMessageRoleUser,
		Content: "我想生成一張小花貓的圖片",
	},
	{
		Role:    openai.ChatMessageRoleAssistant,
		Content: "是",
	},
	{
		Role:    openai.ChatMessageRoleUser,
		Content: "請問冬天下雨我該穿什么衣服",
	},
	{
		Role:    openai.ChatMessageRoleAssistant,
		Content: "否",
	},
}

// isImageConntent
func isImageContent(content string) (bool, error) {
	temp := append(imageMessage, openai.ChatCompletionMessage{
		Role:    openai.ChatMessageRoleUser,
		Content: content,
	})
	result, err := callOpenaiChat(temp)
	if err != nil {
		fmt.Printf("isImageConntent callOpenaiChat error: %v\n", err)
		return false, err
	}
	fmt.Printf("isImageContent result: %s", result)
	if strings.TrimSpace(result) == "是" {
		return true, nil
	}
	return false, nil

}

// replyImage
func replyImage(msg *openwechat.Message) error {
	path, err := generateImage(msg)
	if err != nil {
		fmt.Printf("replyImage generateImage error: %v\n", err)
		return err
	}
	img, err := os.Open(path)
	if err != nil {
		fmt.Printf("replyImage Open error: %v\n", err)
		return err
	}
	defer img.Close()
	msg.ReplyImage(img)
	return nil
}

// replyText
func replyText(msg *openwechat.Message) error {
	messages, err := genMessage(msg)
	if err != nil {
		return err
	}
	result, err := callOpenaiChat(messages)
	if err != nil {
		fmt.Println(err)
		return err
	}
	msg.ReplyText(result)
	addResultToMessage(result, msg)
	return nil
}

// dialogue context max length
const maxLength = 33

// temporary folder to save pictures
const filePath = "./images/"

// genMessage
func genMessage(msg *openwechat.Message) ([]openai.ChatCompletionMessage, error) {
	// TODO
	if _, ok := singleton.userDialogue[msg.FromUserName]; !ok {
		singleton.userDialogue[msg.FromUserName] = firstUserDialogue
	} else if len(singleton.userDialogue[msg.FromUserName]) >= maxLength {
		singleton.userDialogue[msg.FromUserName] = singleton.userDialogue[msg.FromUserName][2:]
	}
	element := openai.ChatCompletionMessage{
		Role:    openai.ChatMessageRoleUser,
		Content: msg.Content,
	}
	singleton.userDialogue[msg.FromUserName] = append(singleton.userDialogue[msg.FromUserName], element)
	return singleton.userDialogue[msg.FromUserName], nil
}

// addResultToMessage
func addResultToMessage(result string, msg *openwechat.Message) error {
	element := openai.ChatCompletionMessage{
		Role:    openai.ChatMessageRoleAssistant,
		Content: result,
	}
	singleton.userDialogue[msg.FromUserName] = append(singleton.userDialogue[msg.FromUserName], element)
	return nil
}

// generateImage
func generateImage(msg *openwechat.Message) (string, error) {
	ctx := context.Background()

	// Sample image by link
	reqUrl := openai.ImageRequest{
		Prompt:         msg.Content,
		Size:           openai.CreateImageSize512x512,
		ResponseFormat: openai.CreateImageResponseFormatB64JSON,
		N:              1,
	}

	respBase64, err := singleton.Openai.CreateImage(ctx, reqUrl)
	if err != nil {
		fmt.Printf("Image creation error: %v\n", err)
		return "", err
	}
	imgBytes, err := base64.StdEncoding.DecodeString(respBase64.Data[0].B64JSON)
	if err != nil {
		fmt.Printf("Base64 decode error: %v\n", err)
		return "", err
	}

	r := bytes.NewReader(imgBytes)
	imgData, err := png.Decode(r)
	if err != nil {
		fmt.Printf("PNG decode error: %v\n", err)
		return "", err
	}
	filePath := fmt.Sprintf("%s%d.png", filePath, time.Now().UnixMicro())
	file, err := os.Create(filePath)
	if err != nil {
		fmt.Printf("File creation error: %v\n", err)
		return "", err
	}
	defer file.Close()

	if err := png.Encode(file, imgData); err != nil {
		fmt.Printf("PNG encode error: %v\n", err)
		return "", err
	}
	return filePath, nil
}

// callOpenaiChat
func callOpenaiChat(messages []openai.ChatCompletionMessage) (string, error) {
	resp, err := singleton.Openai.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model:     openai.GPT3Dot5Turbo,
			Messages:  messages,
			MaxTokens: 512,
		},
	)
	if err != nil {
		fmt.Printf("ChatCompletion error: %v\n", err)
		return "", err
	}
	fmt.Println(resp.Choices[0].Message.Content)
	return resp.Choices[0].Message.Content, nil
}

注意

  1. 微信號最好不要用自己常用的微信號,因為模擬登錄微信屬于作弊行為很有可能會被封號;
  2. 注冊的新的微信號可能無法馬上模擬登錄成功微信,需要實名認證之后,過一段時間才能成功登錄。
  3. 注冊的openai賬號里面默認有18刀,調(diào)用不同的模型話費的tokens不一樣,測試的時候注意測試自己的消耗速度,圖片比文本更耗錢。

到了這里,關(guān)于3分鐘自定義你的chatGPT聊天微信機器人的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 十分鐘快速部署一個自己的AI聊天機器人

    十分鐘快速部署一個自己的AI聊天機器人

    個人名片: ?? 作者簡介:一名大二在校生,喜歡編程?? ????? 個人主頁??: 落798. ?? 個人WeChat:見文末 ??? 系列專欄:??? 零基礎(chǔ)學(xué)Java——小白入門必備 重識C語言——復(fù)習(xí)回顧 計算機網(wǎng)絡(luò)體系———深度詳講 微信小程序開發(fā)——實戰(zhàn)開發(fā) ?? 每日一句:??

    2024年02月14日
    瀏覽(106)
  • 利用GPTs,打造你的專屬AI聊天機器人

    在2023年11月的「OpenAI Devday」大會上,OpenAI再度帶來了一系列令人矚目的新功能,其中ChatGPT方面的突破尤為引人關(guān)注。而GPTs的亮相,不僅標志著個性化AI時代的到來,更為開發(fā)者和普通用戶提供了前所未有的便利。接下來,我們一起深入了解GPTs是什么,能幫助我們做什么。

    2024年04月08日
    瀏覽(22)
  • ChatGPT聊天機器人搭建全攻略精心整理匯總:微信 Discord 小愛同學(xué) VSCode QQ 飛書 Siri OpenAI Translato翻譯插件

    一、ChatGPT接入微信: ChatGPT接入微信 ChatGPT近期以強大的對話和信息整合能力風(fēng)靡全網(wǎng),可以寫代碼、改論文、講故事,幾乎無所不能,這讓人不禁有個大膽的想法,能否用他的對話模型把我們的微信打造成一個智能機器人,可以在與好友對話中給出意想不到的回應(yīng),而且再

    2024年02月04日
    瀏覽(21)
  • ChatGPT聊天機器人問答實錄

    最近ChatGPT爆火,我也在網(wǎng)上找到一個ChatGPT的接口(文末附鏈接),嘗試了一下與人工智能對話的樂趣。我下載的這個應(yīng)用是基于GPT-3的聊天機器人,我與它的幾個問答對話實際記錄如下: 答:百度和谷歌是世界上最大的搜索引擎之一,雖然它們在不同的市場中運營,但它們

    2024年02月01日
    瀏覽(26)
  • ChatGPT聊天機器人如何發(fā)圖片????

    ChatGPT聊天機器人如何發(fā)圖片????

    問題一、怎么讓聊天機器人ChatGPT回復(fù)你一張圖片? 有問題可以在評論區(qū)留言。

    2024年02月11日
    瀏覽(28)
  • ChatGPT 4.0:AI 聊天機器人

    ChatGPT 4.0:AI 聊天機器人

    當(dāng) ChatGPT 問世時,人們對它作為 AI 聊天機器人的自然語言能力印象深刻,人們感到敬畏。但是,當(dāng)備受期待的 GPT-4 大型語言模型問世時,它揭開了我們認為 AI 可能實現(xiàn)的蓋子,有人稱其為 AGI(通用人工智能)的早期一瞥。 該模型的創(chuàng)建者OpenAI稱其為該公司“最先進的系統(tǒng)

    2024年02月02日
    瀏覽(38)
  • ai聊天機器人chatgpt收費版

    ai聊天機器人chatgpt收費版

    ? ? AI聊天機器人的功能通常包括以下幾個方面: ? ? 自然語言理解。該功能可以識別并理解用戶輸入的自然語言,如文本、語音等,以便進行后續(xù)的處理和回復(fù)。 ? ? 對話管理。該功能可以管理對話的上下文和流程,并根據(jù)用戶的輸入和意圖來產(chǎn)生相應(yīng)的回復(fù)和行為。 ?

    2024年02月03日
    瀏覽(27)
  • 中文版ChatGPT:智能中文聊天機器人

    中文版ChatGPT:智能中文聊天機器人

    2017年,AlphaGo在與世界冠軍柯潔的人機大戰(zhàn)中獲勝,引發(fā)了人們對人工智能的激烈討論。 如果說,對于AlphaGo,人們更多是圍觀者的角色,而最新的人工智能爆款程序ChatGPT,更多人已經(jīng)參與其中,上線短短兩個月內(nèi),ChatGPT收獲了一億用戶。而且此刻,國內(nèi)版的ChatGPT也已經(jīng)正式

    2024年02月12日
    瀏覽(97)
  • 基于小程序制作一個ChatGPT聊天機器人

    基于小程序制作一個ChatGPT聊天機器人

    在AI技術(shù)日新月異的浪潮中,將ChatGPT與實戰(zhàn)開發(fā)相結(jié)合,制作一個隨身攜帶的聊天機器人,緊貼前沿的同時穩(wěn)固基礎(chǔ)。

    2023年04月11日
    瀏覽(24)
  • AIGC: 關(guān)于ChatGPT中實現(xiàn)一個聊天機器人

    規(guī)劃一個聊天機器人 智能化完全于依托于GPT, 而產(chǎn)品化是我們需要考慮的事情 比如,如何去構(gòu)建一個聊天機器人 聊天機器人它的處理邏輯其實非常的清晰 我們輸入問題調(diào)用 GPT 然后,GPT 給我們生成回答就可以了 需要注意的是,聊天機器人不同于調(diào)用API進行一個簡單的測試

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包