使用go创建tgbot,并实现调用chatgpt的通用接口

技术博客--Go语言调用ChatGPT AI接口 关于使用Go语言调用ChatGPT API接口,在我们需要与机器人聊天,语言翻译,文本生成,等各种Prompt时需要调用ChatGPT API接口。其中我认为的难点是数据结构的构建和转换,ChatGPT接口所需的格式,通常是JSON,可能需要进行结构体定义、字段映射和JSON序列化等操作。调用API接口,是本次团队作业后端部分的主要技术,通过这次的学习API接口的调用深入我心,首先需要仔细的阅读API文档,理解API的工作原理和如何使用它,然后需要有正确的APIKey,验证APIKey的正确性也是必要的。 阅读详情

可以使用go搭建一个api后端,用于转发chatgpt的结果,但同时也可以在该后端新建一个路由用于设置webhook
实际上,我的这个项目就是

  • post路由:https://your-website/post
  • webhook路由:https://your-website/tgbot/{your bot token}
    部署在paas平台,自带https

main

这是23/12月完成的,tgbotapi要使用v5,有很多结构体和函数都有变化,注意后续的tgbot官方的更新。
接下来说明一下实现过程,直接上main函数的代码:

func main() {
	var port = os.Getenv("PORT")

	// 设置 /post 路径的 HTTP 处理函数
	http.HandleFunc("/post", handlePost)

	// 启动 Web 服务器监听 port 端口
	go func() {
		err := http.ListenAndServe(":"+port, nil)
		if err != nil {
			log.Println("Error starting HTTP server:", err)
		}
		log.Println("HTTP server is running on port", port)
	}()

	//创建一个tgbot
	tgbot.CreateTgbot()
}

其中定义了两个函数,handlePost和CreateTgbot。
前者处理post请求,后者用于设置一个webhook,进而进行tgbot的通信。

handlePost

提取post中的msg字符串,调用chatgpt api,返回响应回答。
我使用了postform的方式发送post请求,故我再此使用了表单结构。

func handlePost(w http.ResponseWriter, r *http.Request) {
	if r.Method == http.MethodPost {
		// 获取表单数据
		err := r.ParseForm()
		if err != nil {
			http.Error(w, "Error parsing form data", http.StatusInternalServerError)
			return
		}
		// 读取请求体
		postmsg := r.Form.Get("usermsg")
		if postmsg != "" {
			log.Println("POST request,the usersmg:", postmsg)
		} else {
			http.Error(w, "Error:Don`t find the key:usersmg in the POST", http.StatusBadRequest)
		}
		// 调用ChatGPT API
		gptResponse, err := chatgpt.InvokeChatGPTAPI(postmsg)
		if err != nil {
			log.Printf("Error calling ChatGPT API: %v", err)
			gptResponse = "gpt调用失败了😥 错误信息:\n" + err.Error()
		}
		fmt.Fprintln(w, gptResponse)
	} else {
		http.Error(w, "Error: wrong HTTP method:"+r.Method+",required POST.", http.StatusMethodNotAllowed)
	}
}

CreateTgbot

这个函数来源于tgbot关于go的库的官方示例,我对其进行了必要的修改。
在设置webhook的过程中,不要设置监听端口,因为外层的main函数中已经在监听port端口了,这里只需要监听webhook就好了

func CreateTgbot() {
	// 初始化bot
	bot, err := tgbotapi.NewBotAPI(BOT_TOKEN)
	if err != nil {
		log.Fatal(err)
	}
	bot.Debug = true
	log.Printf("Authorized on account %s", bot.Self.UserName)
	//创建webhook,指向你的URL
	wh, _ := tgbotapi.NewWebhook(TG_WEBHOOK_URL + bot.Token)
	_, err = bot.Request(wh)
	if err != nil {
		log.Fatal(err)
	}
	//输出webhook信息,判断是否建立成功
	info, err := bot.GetWebhookInfo()
	if err != nil {
		log.Fatal(err)
	}
	if info.LastErrorDate != 0 {
		log.Printf("Telegram callback failed: %s", info.LastErrorMessage)
	}
	// 监听webhook是否有更新,更新存放到updates中
	// 此处的/tgbot/,是为了和URL匹配,URL:https://your-website/tgbot/
	updates := bot.ListenForWebhook("/tgbot/" + bot.Token)

	// 对监听到的updates遍历,并作出回应
	for update := range updates {
		log.Printf("get the message:%v", update.Message)
		if update.Message == nil {
			continue
		}
		//回复信息,定义你自己的消息处理函数
		HandleIncomingMessage(bot, update.Message)
	}
}

InvokeChatGPTAPI

使用了go-openai库,注意设置自己的必要变量,如:chatGPTAPIKey等

func InvokeChatGPTAPI(text string) (string, error) {
	config := openai.DefaultConfig(chatGPTAPIKey)
	config.BaseURL = chatGPTURL_broker

	client := openai.NewClientWithConfig(config)
	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: openai.GPT3Dot5Turbo,
			Messages: []openai.ChatCompletionMessage{
				{
					Role:    openai.ChatMessageRoleUser,
					Content: text,
				},
			},
		},
	)
	if err != nil {
		return "", err
	}

	return resp.Choices[0].Message.Content, err
}

目前我已经成功部署了,并且微信公众号和tg都可以正常返回结果,更多细节内容还在完善中,源码可以查看:Gobot-vio

Go实现自动回复的Tg bot机器人 1.准备工作 首先我们先从Botfather机器人之父那里创建一个 bot,然后保存好token。 把创建好的bot 拉进去群组,并把bot 设置成管理员。 2.开始Go代码 首先我们在go.mod 里 引用包: github.com/go-telegram-bot-api/telegram-bot-api 这个 telegram-bot-api 是集成好的telegram 的接口API,方便我们调用。 初始化... 阅读详情

相关推荐

TG机器人搭建与部署全攻略:源码搭建技巧与实战教学

TG机器人因其高度的可定制性和广泛的应用场景,成为了开发者和创业者的热门选择。本文将提供一份全面的TG机器人搭建与部署攻略,涵盖源码搭建技巧与实战教学,帮助读者快速掌握TG机器人的开发与上线。

2401_85720680的博客 7578

【ChatGPT】基于GO语言实现的微信聊天和图片生成机器人

🎨基于GO语言实现的微信聊天和图片生成机器人🎨个人微信接入ChatGPT,实现和GPT机器人互动聊天,同时支持基于文本生成图像。支持私聊回复和群聊艾特回复。

weixin_41099712的博客 7810

Telegram-bot-api 部署到Windows,上传2G文件

最终得到一个exe单文件,可以移动到任意位置执行。按照顺序一条条执行就行了,编译大概要十几分钟。bot 需要先从官方服务器上logout。使用命令行运行程序,先看看有哪些命令。工作目录下的bot目录。使用本地路径上传文件。

xiaobai_0的博客 1777

ChatGPT 体验 - 写代码(GoLang)

大家对于ChatGPT写代码怎么看?

yangshifeng的博客 1024

Line-bot Webhook 创建与部署

Line-bot Webhook 创建与部署前言  最近在研究LINE bot,通过搭建环境,编写webhook,终于实现bot与line 用户的对话。此过程并不是一帆风顺,期间遇到很多问题,咨询了很多朋友,在此表示感谢,特别感谢line-bot-sdk-python 的维护者。 line-bot 实现reply功能的关键在于Webhook 的编写。本文使用了flask框架来编写Webhook.

高筑墙,广积粮,缓称王 4091

ChatGPT上线了!请使用go语言写一个bert模型结构?

BERT 结构体还包含了两个方法:Forward 和 Backward。Forward 方法实现了模型的前向传播,Backward 方法实现了模型的反向传播。在 Forward 方法中,输入的整数切片会经过嵌入层得到嵌入向量,然后经过编码器层得到输出。在 Backward 方法中,梯度会从编码器层反向传播到嵌入层。在这个示例中,BERT 结构体包含两个字段:embedding 和 encoder。请使用go语言写一个bert模型结构?这只是一个简单的示例,实际的 BERT 模型结构可能会更加复杂。

源代码杀手的博客 1094

6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

从上图可以看到全局变量n是存在main包的静态基地址上(SB),被不同的函数和代码块共享访问,SB 是静态基地址的缩写,它是指向静态基地址的寄存器。可以看到上述汇编指令中,第一行从参数p中取地址值的操作没变化,只是从AX寄存器中取值的时候,命令有MOVQ(8字节)变为MOVL(4字节),可见不同类型的指针地址本身是一样的类型(无符号整型)LEAQ 指令将全局变量 n 的有效地址存储到 AX 寄存器中,这样 AX 寄存器就包含了 n 变量的地址,可以用于读取或写入该变量的值。

qq_38937634的博客 1059

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1116

golang 调用chatgpt api

【代码】golang 调用chatgpt api。

weixin_38385580的博客 931

STM32F103用软件I2C读取IP2366电量数据,实测避坑指南(附完整源码)

本文详细介绍了如何使用STM32F103的软件I2C驱动读取IP2366电池管理芯片的电量数据,包括GPIO初始化、I2C时序实现、关键延时优化及常见问题解决方案。通过实测避坑指南和完整源码,帮助开发者快速实现稳定的电量数据读取,适用于嵌入式电池管理系统开发。

weixin_33725722的博客 514

别再自己写消息提示了!5分钟用WPF+Material Design打造专业级Snackbar(支持.NET 6)

本文为WPF开发者提供了一份快速集成专业级Snackbar消息提示的实战指南。通过引入MaterialDesignThemes开源库,在.NET 6 WPF项目中,仅需5分钟即可告别传统的MessageBox,实现遵循Material Design规范、动画流畅、支持队列管理的非侵入式Snackbar控件,显著提升应用的用户体验与现代化交互水平。

year5的博客 172

ChatGPT生成单元测试实践(Golang)

目前gpt本质上是续写,所以在待测函数定义清晰的情况下,单元测试可以适当依赖ChatGPT进行生成。本文实践场景:企业微信美图鉴赏机器人。下面的部分,我按照工作流的繁杂程度,简单区分了下easy/normal/hard情况。

qq_42739587的博客 8279

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 327

tg使用教程 自动回复、增加/修改机器人菜单

修改

m0_37367981的博客 6632

【SpringBoot笔记44】SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置)

在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源。

✅ Java 开发工程师 1117

S32K144 UDSdoCAN 升级刷写实现笔记

本篇旨在描述如何开发“车规级”的软件升级程序,通过在S32K144平台上实现基于UDSdoCAN的刷写升级功能,带你一步步建立安全升级的“工程思维”,在这里既能收获经验还能获得工程源码、测试脚本,助你起飞,避坑提速!

汽车电子软件领域知识分享 811

解决telegram_bot设置webhook无响应

最近在研究telegram的机器人技术,然后在设置webhook的时候出了些问题,期初以为是代码问题,后来进入 https://api.telegram.org/bot[token]/getWebhookInfo 后发现有个报错,报错代码如下: "last_error_message": "SSL error {337047686, error:1416F086:SSL routines: tls_process_server_certificate:certificate verify fail

瑾辞的博客 8304

【软件使用】向日葵网络连接错误

一直报这个错误,尝试了修改版本无果,各种密码都正确,最后得出结轮是时间没有同步,查看代理是否更改了时间,做一下同步即可。

andeyeluguo的博客 7973

用Go编写ChatGPT插件

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。我用Go语言开发了API程序,这是很自然的选择,Go非常适合API。

残星说梦话 805

自主探索型AI Agent:LLM驱动的好奇心与学习动机

随着人工智能技术的飞速发展,传统的AI系统往往依赖于预设的规则和大量的标注数据,其自主学习和适应新环境的能力有限。自主探索型AI Agent旨在打破这种局限,能够在复杂、未知的环境中自主地进行探索、学习和决策。本文的目的是深入研究在大语言模型(LLM)驱动下,AI Agent如何产生好奇心和学习动机,以及如何实现自主探索的能力。范围涵盖了核心概念、算法原理、数学模型、项目实战、应用场景等多个方面,为读者提供一个全面的技术视角。本文将按照以下结构进行阐述:首先介绍相关背景知识,包括目的、读者和文档结构;

大模型应用工坊 997

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Golang使用ChatGPT生成单元测试实践例子解析

为了生成有效的单元测试,你需要提供一个详细且清晰的提示,告诉ChatGPT你想要测试的函数或代码段。:结合ChatGPT和Golang实现自动生成单元测试是一个值得尝试的方法,随着技术的不断进步,未来可能会出现更加成熟和高效的自动生成单元测试工具。:尽管使用ChatGPT生成单元测试有很多优势,但也存在一些挑战,如数据集的质量、模型调优以及验证和修复自动生成的测试用例。:将ChatGPT生成的单元测试集成到你的持续集成/持续部署流程中,以确保每次代码提交都能自动运行测试。命令安装,并获取一个API密钥。

IT老农民的博客 1083

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Go最新ChatGPT写POC,拿下漏洞!_goby poc分享,2024年最新真的太香了

ChatGPT(Chat Generative Pre-trained Transformer)是当今备受瞩目的智能AI聊天机器人之一。它不仅能够实现基本的语言交流,还具备许多强大的功能,例如文章撰写、代码脚本编写、翻译等等。那么我们是否可以利用 ChatGpt 去辅助我们完成一些工作呢?比如当一个产品存在安全风险需要漏洞检测时,我们就需要编写对应的POC来实现。

2401_84910817的博客 874

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

开发个人Ollama-Chat--2 环境搭建

这里使用 `Docker Compose` 来编排管理我们的容器,`docker-compose.yaml

qq_36652517的博客 504

ChatGPT的模型介绍及GO语言实现API

GO语言的实现以及4个模型的特点

深度学习领域优质创作者,优快云博客专家 7700

【goframe】(1)API相关接口技术调研,使用新框架goframe非常简单就能实现chatgpt接口调用,同时封装对象结果返回并解析

goframe里面有很多非常实用的工具类,可以非常方便的解决开发中遇到的问题。类似spring 库和 apache 库,都哟非常丰富的基础类,同时文档非常强大。可以直接使用即可。

freewebsys的专栏 1743

[Golang实战]如何快速接入chatgpt/openai?[引入go-gpt3][新手开箱可用]

ChatGPT-OpenAI注册使用保姆级教程?[开箱可用][免费使用]先看官网推荐的项目。

学生董格 9758
上一篇: Web框架和跨平台应用未来
下一篇: 使用配置文件启动go项目
空气力学先驱
博客等级 码龄6年 154粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值