Skip to content

写一个聊天机器人吧

创建项目

bash
mkdir nsxai
cd ./nsxai
go mod init nsxai

添加依赖

bash
go get -u github.com/nsxdevx/nsxbot

连接到OneBot

这里采用的是将OneBot实现作为WServer, 我们主动去连接.

go
package main

import (
	"context"
	"time"

	nsx "github.com/nsxdevx/nsxbot"
	"github.com/nsxdevx/nsxbot/driver"
)

func main() {
	driver := driver.NewWSClient(1*time.Second, driver.WSnode{
		Url: "localhost:4000",
	})
	bot := nsx.Default(driver)
	bot.Run(context.Background())
}

运行,应该在控制台看到如下输出

测试消息交互

go
func main() {
	driver := driver.NewWSClient(1*time.Second, driver.WSnode{
		Url: "localhost:4000",
	})
	bot := nsx.Default(driver)
	pvt := nsx.OnEvent[event.PrivateMessage](bot)

	adminuin, _ := strconv.ParseInt(os.Getenv("ADMIN_UIN"), 10, 64)
	pvt.Handle(func(ctx *nsx.Context[event.PrivateMessage]) {
		ctx.Msg.Reply(ctx, "测试")
	}, filter.OnlyUsers(adminuin))

	bot.Run(context.Background())
}

现在尝试使用admin的qq发送一条消息到你的Bot,正常的话,你会收到“测试”的回复

对接大语言模型

安装openai-go

bash
go get -u github.com/openai/openai-go

对接到Reply

go
func main() {
	driver := driver.NewWSClient(1*time.Second, driver.WSnode{
		Url: "localhost:4000",
	})
	bot := nsx.Default(driver)
	pvt := nsx.OnEvent[event.PrivateMessage](bot)

	adminuin, _ := strconv.ParseInt(os.Getenv("ADMIN_UIN"), 10, 64)
	baseUrl := os.Getenv("NEWAPI_BASEURL")
	key := os.Getenv("NEWAPI_KEY")

	client := openai.NewClient(option.WithAPIKey(key), option.WithBaseURL(baseUrl))

	pvt.Handle(func(ctx *nsx.Context[event.PrivateMessage]) {
		msg := ctx.Msg
		text, err := msg.TextFirst()
		if err != nil {
			msg.Reply(ctx, "请输入文本")
			return
		}
		chatCompletion, err := client.Chat.Completions.New(ctx, openai.ChatCompletionNewParams{
			Messages: []openai.ChatCompletionMessageParamUnion{
				openai.UserMessage(text.Text),
			},
			Model: "deepseek-v3",
		})
		if err != nil {
			msg.Reply(ctx, "openai出错了!"+err.Error())
			return
		}
		msg.Reply(ctx, chatCompletion.Choices[0].Message.Content)
	}, filter.OnlyUsers(adminuin))

	bot.Run(context.Background())
}

完成!