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

手把手教你搭建微信聊天機器人系列(三):搭建對接文心一言(ERNIE-Bot大模型)接口的微信聊天機器人

這篇具有很好參考價值的文章主要介紹了手把手教你搭建微信聊天機器人系列(三):搭建對接文心一言(ERNIE-Bot大模型)接口的微信聊天機器人。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????上一章介紹了eggjs+wechaty搭建一個簡單的微信聊天機器人,只是實現(xiàn)了簡單的回復(fù),這一章我們將對接ERNIE-Bot接口,實現(xiàn)智能回復(fù)。

access_token的請求

config.default.js配置

????????我們在上一章代碼基礎(chǔ)上進行調(diào)整,首先我們要加入access_token的請求邏輯。第一章我們說過,請求需要使用應(yīng)用對應(yīng)的API Key,Secret Key作為入?yún)?。eggjs規(guī)定了配置的寫法,我們可以將其配置在config/config.default.js里面。

自建微信聊天機器人,chatgpt,文心一言,機器人,node.js,chatgpt

//配置ernie
	config.ernie = {
		client_id: '填入您的API Key', //API Key
		client_secret: '填入您的Secret Key',//Secret Key
		access_token: '',//先置空,后續(xù)由程序填充
		expire_day: 30 //access_token過期時長(天)
	}

ernie.js定義getAccessToken

????????我們在app/service目錄增加ernie.js。

自建微信聊天機器人,chatgpt,文心一言,機器人,node.js,chatgpt

????????ernie.js文件專門用來和ERNIE-Bot接口進行交互,代碼如下:

const {
	Service
} = require('egg');


class ErnieService extends Service {
	async getAccessToken() {
		console.log('===================ErnieService getAccessToken=====================');
		let ctx = this.ctx;

		try {
			const res = await ctx.curl(
				`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${ctx.app.config.ernie.client_id}&client_secret=${ctx.app.config.ernie.client_secret}`, {
					method: 'GET',
					rejectUnauthorized: false,
					data: {},
					headers: {},
					timeout: 30000,
					contentType: 'json',
					dataType: 'json',
				})
			console.log(res)

			if (res.data.access_token) {
				ctx.app.config.ernie.access_token = res.data.access_token;
				console.log('access_token', ctx.app.config.ernie.access_token)
			}

		} catch (error) {
			console.log(error)
		}
	}
}

module.exports = ErnieService;

我們按eggjs的service的寫法,定義了一個方法,用來請求access_token,但是這樣寫并不能執(zhí)行,我們需要有個邏輯,在應(yīng)用啟動完畢后會調(diào)用這個方法。

app.js執(zhí)行g(shù)etAccessToken

????????我們在根目錄增加app.js。

自建微信聊天機器人,chatgpt,文心一言,機器人,node.js,chatgpt

app.js代碼如下:

module.exports = app => {

	app.beforeStart(async () => {
		// 應(yīng)用會等待這個函數(shù)執(zhí)行完成才啟動
		console.log("==app beforeStart==");
	});

	app.ready(async () => {
		console.log("==app ready==");
		let ctx = app.createAnonymousContext();
		ctx.service.ernie.getAccessToken(); //請求AccessToken
	})

	app.beforeClose(async () => {
		console.log("==app beforeClose==");
	})
};

我們執(zhí)行命令npm run dev啟動項目,看到最終會打印出access_token,有了access_token我們繼續(xù)開發(fā)接口請求函數(shù)sendMsg。

對話請求

ernie.js定義sendMsg

sendMsg函數(shù)用于調(diào)用ERNIE-Bot會話接口,傳入對話內(nèi)容并返回對話結(jié)果。在class ErnieService中加入以下代碼:

	async sendMsg(msg) {
		console.log('===================ErnieService sendMsg=====================');
		let ctx = this.ctx;
		try {
			const res = await ctx.curl(
				`https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=${ctx.app.config.ernie.access_token}`, {
					method: 'POST',
					rejectUnauthorized: false,
					data: {
						"messages": msg
					},
					timeout: 30000,
					contentType: 'json',
					dataType: 'json',
				})
			console.log(res)
	
			if (res.data) {
				return res.data;
			}
			return null;
		} catch (error) {
			console.log(error)
			return null;
		}
	}

wechat.js

我們在wechat.js中,將原先的邏輯調(diào)整一下,主要是改兩個地方,

1、我們在之前的代碼中經(jīng)常有看到ctx這個變量,可以通過他獲取配置文件的參數(shù)值。但Service文件中的ctx的獲取只能通過app.js調(diào)用Service中函數(shù)的方式來獲得。所以我們將機器人初始化的操作定義在startBot()方法中,由app.js來執(zhí)行這個方法,就可以接收到ctx的值。

2、原先回復(fù)是直接扔回用戶發(fā)的信息的,現(xiàn)在將其對接到ernie.js中的sendMsg方法。

wechat.js全部代碼如下:

const {
	Service
} = require('egg');


const {
	WechatyBuilder,
	ScanStatus
} = require("wechaty");
const qrcode = require("qrcode-terminal");

let ctx;
let wechaty;
let startStatus = false;

const onMessage = async (message) => {
	console.log(`收到消息: ${message}`);
	if (message.type() === wechaty.Message.Type.Text) {
		const userMsg = await message.text();

		try {
			let msgRecord = [{
				"role": "user",
				"content": userMsg
			}];
			let res = await ctx.service.ernie.sendMsg(msgRecord);
			if (res) {
				if (res.error_code) {
					message.say(JSON.stringify(res));
					console.log(`報錯: ${JSON.stringify(res)}`);
				} else {
					if (res.result) {
						message.say(res.result);
						console.log(`回復(fù): ${res.result}`);
					}
				}
			}
		} catch (error) {
			console.log(error);
			message.say(JSON.stringify(error));
		}
	}
};

const onLogout = (user) => {
	console.log(`用戶 ${user} 退出成功`);
};
const onLogin = async (user) => {
	console.log(`用戶 ${user} 登錄成功`);
};
const onError = console.error;
const onScan = (code, status) => {
	// status: 2代表鏈接等待調(diào)用,3代表鏈接已打開,這個鏈接實際上是提供一個登錄的二維碼供掃描
	if (status === ScanStatus.Waiting) {
		// status: 2代表等待,3代表掃碼完成
		qrcode.generate(code, {
			small: true
		}, console.log)
	}
};

class WechatService extends Service {
	async startBot() {
		console.log('===================WechatService startBot=====================');
		ctx = this.ctx;
		if (startStatus && wechaty) {
			if (wechaty.isLoggedIn) {
				await wechaty.logout();
			}
			await wechaty.stop();
			startStatus = false;
			wechaty = null;
		}
		wechaty = await WechatyBuilder.build();
		wechaty
			.on("scan", onScan)
			.on("login", onLogin)
			.on("logout", onLogout)
			.on("error", onError)
			.on("message", onMessage);
		await wechaty.start();
		startStatus = true;
	}
}

module.exports = WechatService;

app.js執(zhí)行startBot

在AccessToken請求后加入初始化BOT

app.ready(async () => {
		console.log("==app ready==");
		let ctx = app.createAnonymousContext();
		await ctx.service.ernie.getAccessToken(); //請求AccessToken
		await ctx.service.wechat.startBot(); //初始化BOT
	})

自建微信聊天機器人,chatgpt,文心一言,機器人,node.js,chatgpt

至此,我們已經(jīng)實現(xiàn)了一次會話的功能。多輪對話的功能等下一章再詳述。

本章完整代碼在這里???????下載。運行前請配置好config/config.default.js里面config.ernie下的client_id和client_secret配置項。文章來源地址http://www.zghlxwxcb.cn/news/detail-771406.html

到了這里,關(guān)于手把手教你搭建微信聊天機器人系列(三):搭建對接文心一言(ERNIE-Bot大模型)接口的微信聊天機器人的文章就介紹完了。如果您還想了解更多內(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)文章

  • 手把手教你,本地RabbitMQ服務(wù)搭建(windows)

    手把手教你,本地RabbitMQ服務(wù)搭建(windows)

    前面已經(jīng)對RabbitMQ介紹了很多內(nèi)容,今天主要是和大家搭建一個可用的RabbitMQ服務(wù)端,方便后續(xù)進一步實操與細節(jié)分析 跟我們跑java項目,要裝jdk類似。rabbitMQ是基于Erlang開發(fā)的,因此安裝rabbitMQ服務(wù)器之前,需要先安裝Erlang環(huán)境。 【PS: 我已經(jīng)上傳了對應(yīng)資源,windows可直接下載

    2024年02月14日
    瀏覽(38)
  • 手把手教你搭建自己本地的ChatGLM

    手把手教你搭建自己本地的ChatGLM

    如果能夠本地自己搭建一個ChatGPT的話,訓(xùn)練一個屬于自己知識庫體系的人工智能AI對話系統(tǒng),那么能夠高效的處理應(yīng)對所屬領(lǐng)域的專業(yè)知識,甚至加入職業(yè)思維的意識,訓(xùn)練出能夠結(jié)合行業(yè)領(lǐng)域知識高效產(chǎn)出的AI。這必定是十分高效的生產(chǎn)力工具,且本地部署能夠保護個人數(shù)

    2024年02月03日
    瀏覽(92)
  • 手把手教你5分鐘搭建RabbitMq開發(fā)環(huán)境

    手把手教你5分鐘搭建RabbitMq開發(fā)環(huán)境

    演示環(huán)境 1、使用Vagrant 和 VirtualBox創(chuàng)建linux虛擬機 不知道Vagrant怎么使用的可以看這里。 ①在cmd窗口執(zhí)行命令 vagrant init generic/centos7 ,初始化linux啟動環(huán)境 ②執(zhí)行啟動命令 vagrant up 啟動Linux虛擬機 ③修改當(dāng)前目錄的Vagrantfile文件,為虛擬機配置內(nèi)網(wǎng)ip,后面登錄的時候會用到

    2023年04月12日
    瀏覽(27)
  • 手把手教你搭建ARM32 QEMU環(huán)境

    手把手教你搭建ARM32 QEMU環(huán)境

    我們知道嵌入式開發(fā)調(diào)試就要和各種硬件打交道,所以學(xué)習(xí)就要專門購買各種開發(fā)版,浪費資金,開會演示效果還需要攜帶一大串的板子和電線,不勝其煩。然而Qemu的使用可以避免頻繁在開發(fā)板上燒寫版本,如果進行的調(diào)試工作與外設(shè)無關(guān),僅僅是內(nèi)核方面的調(diào)試,Qemu模擬

    2024年02月19日
    瀏覽(31)
  • 手把手教你搭建一個Minecraft 服務(wù)器

    手把手教你搭建一個Minecraft 服務(wù)器

    這次,我們教大家如何搭建一個我的世界服務(wù)器 首先,我們來到這個網(wǎng)站 MCVersions.net - Minecraft Versions Download List MCVersions.net offers an archive of Minecraft Client and Server jars to download, for both current and old releases! https://mcversions.net/ ? 在這里,我們點擊對應(yīng)的版本,從左到右依次是穩(wěn)定版

    2024年02月09日
    瀏覽(33)
  • 手把手教你搭建 Webpack 5 + React 項目

    手把手教你搭建 Webpack 5 + React 項目

    在平時工作中,為減少開發(fā)成本,一般都會使用腳手架來進行開發(fā),比如 create-react-app 。腳手架都會幫我們配置好了 webpack,但如果想自己搭建 webpack 項目要怎么做呢?這邊文章將介紹如何使用 webpack 5 來搭建 react 項目,項目地址在文末。 1.1 Webpack 的好處 試想在不使用任何打

    2024年02月08日
    瀏覽(32)
  • 手把手教你接入網(wǎng)站微信支付

    手把手教你接入網(wǎng)站微信支付

    小攤小販們在線下交易一般無需接入微信支付,只需要向別人出示自己的付款碼就行。為什么?因為一手交錢,一手交貨,你不付錢,人家不會給你商品。 但在網(wǎng)上,要實現(xiàn)無人值守,別人掃碼付了款,平臺得自動知道,然后再發(fā)貨。所以必須接入微信支付。 微信支付必須

    2024年02月07日
    瀏覽(25)
  • 手把手教你搭建內(nèi)網(wǎng)穿透服務(wù)器

    手把手教你搭建內(nèi)網(wǎng)穿透服務(wù)器

    有時候我們需要把外網(wǎng)可以訪問自己的內(nèi)網(wǎng),比如在微信公眾號開發(fā)調(diào)用接口時為了方便調(diào)試就需要配置回調(diào)地址或者是想把自己的nas可以在不在家就能訪問,這時候就需要內(nèi)網(wǎng)穿透。使用內(nèi)網(wǎng)穿透主要有幾種方式,1.使用內(nèi)網(wǎng)穿透服務(wù)商提供的服務(wù),但是這種需要付費,免

    2024年04月23日
    瀏覽(32)
  • 手把手教你在Windows下搭建Vue開發(fā)環(huán)境

    手把手教你在Windows下搭建Vue開發(fā)環(huán)境

    最近有小伙伴不會Vue環(huán)境的部署,小孟親自測試了下,大家有需要的可以按照下面的學(xué)習(xí)。 如果想看視頻的,也可以看視頻的教程: https://www.bilibili.com/video/BV1if4y1X7BS/?spm_id_from=333.788.recommend_more_video.-1vd_source=e64f225fc5daf048d2687502cb23bb3b 在Windows下搭建Vue開發(fā)環(huán)境: 官網(wǎng)https://n

    2024年02月08日
    瀏覽(27)
  • Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)

    Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)

    ?紅色的點就是我在sinx函數(shù)上取的已知點作為網(wǎng)絡(luò)的訓(xùn)練點。 ?訓(xùn)練過程如上,時間我這里設(shè)置的比較簡單,除了分鐘,之后的時間沒有按照60進制規(guī)定。 可以看到收斂的還是比較好的。 這里紅色的點為訓(xùn)練用的數(shù)據(jù),藍色為我們的預(yù)測曲線,可以看到整體上擬合的是比較好

    2024年02月07日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包