轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南

说明

我之前实现了简单UI来跟OriginBot交互,可以参考这里:古月居 - ROS机器人知识分享社区  但是由于我不是专业的前端开发,写UI还是比较耗时的,所以最近想修改一下这部分。

还有一个原因是,自己开发前端,如果想实现远程交互(不在同一wifi下),就一定需要一个云服务器来中转一下,这个是比较麻烦的。

我期望的交互效果是可以双向发送文字、图片和语音,找了一圈发现钉钉的「单聊机器人」可以满足所有要求,所以这篇博客记录一下如何为OriginBot接入钉钉单聊机器人。

创建钉钉单聊机器人

创建单聊机器人的步骤其实不复杂,可以参考:单聊机器人概述 - 钉钉开放平台

唯一需要注意的是消息接收模式要选择Stream模式,不要选择http模式即可。

如何实现收发消息

在钉钉开放平台上创建好单聊机器人后,还需要有一个服务来收发消息。

在OriginBot上创建一个文件dingtalk_runtime.py, 内容如下:

"""
用于钉钉单聊机器人收发消息
"""from dingtalk_stream import AckMessage
import dingtalk_stream
import osfrom prompts import base_prompt
from llms import azure_gpt4oclass DingtalkMsgHandler(dingtalk_stream.ChatbotHandler):def __init__(self):super(dingtalk_stream.ChatbotHandler, self).__init__()async def process(self, callback: dingtalk_stream.CallbackMessage):incoming_message = dingtalk_stream.ChatbotMessage.from_dict(callback.data)message_type = incoming_message.message_typeif message_type not in ("text"):self.reply_text("您发送的消息类型不合法,目前只支持文本。", incoming_message)return AckMessage.STATUS_OK, "OK"if message_type == "text":text = incoming_message.text.content.strip()self.reply_text(text, incoming_message)return AckMessage.STATUS_OK, "OK"def main():credential = dingtalk_stream.Credential(os.getenv("DINGTALK_CLIENTID"),os.getenv("DINGTALK_CLIENTSECRET"),)client = dingtalk_stream.DingTalkStreamClient(credential)client.register_callback_handler(dingtalk_stream.chatbot.ChatbotMessage.TOPIC, DingtalkMsgHandler())client.start_forever()if __name__ == "__main__":main()

运行这个脚本后,在钉钉中给“originbot_home_assistant”这个机器人发送消息后,它会给你回复一样的内容。

到这里就已经实现了最基础的交互功能了。

大家在代码中可以看到,我目前限定了只能接收文本格式的消息,其他类型暂时都不允许,这主要是为了降低一开始的开发难度,不用考虑所有可能。

但实际上,钉钉的单聊机器人支持很丰富的消息类型,可以看下面的说明:企业机器人发送单聊消息 - 钉钉开放平台

我会在后面需要的时候添加其他消息类型。

集成GPT4o

上面给出的通过钉钉单聊机器人跟智能小车交互的代码是非常简单的,它只能把你发给小车的消息原样返回,但实际使用过程中肯定不会这样使用。我在这里是希望通过在交互过程中集成GPT4o来让其更加智能化。

具体可以看下面的代码:

"""
大模型相关的封装和调用, 文件名是llms.py
"""import os
import requests
import json
import base64from logger import logger# 读取图片并编码为 Base64 字符串
def encode_image_to_base64(image_path=None, image_bytes=None):if image_path and image_bytes:raise ValueError("image_path and image_bytes cannot be both provided.")if image_path:with open(image_path, "rb") as image_file:encoded_string = base64.b64encode(image_file.read()).decode("utf-8")if image_bytes:encoded_string = base64.b64encode(image_bytes).decode("utf-8")return encoded_stringdef azure_gpt4o(message):api_key = os.getenv("API_KEY")headers = {"Content-Type": "application/json", "api-key": api_key}data = {"messages": message,"max_tokens": 4096,"temperature": 0.8,"frequency_penalty": 0,"presence_penalty": 0,"top_p": 0.95,"stop": None,}url = os.environ.get("GPT4O_ENDPOINT")try:response = requests.post(url, headers=headers, data=json.dumps(data))if response.status_code == 200:return response.json()["choices"][0]["message"]["content"]else:logger.info(f"LLM 调用失败,状态码:{response.status_code},错误信息:{response.text}")except requests.RequestException as e:logger.error(f"请求发生错误:{e}")except Exception as e:logger.error(f"发生未知错误:{e}")

点击轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南——古月居可查看全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386673.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式锁的三种实现方式:Redis、基于数据库和Zookeeper

分布式锁的实现 操作共享资源:例如操作数据库中的唯一用户数据、订单系统、优惠券系统、积分系统等,这些系统需要修改用户数据,而多个系统可能同时修改同一份数据,这时就需要使用分布式锁来控制访问,防止数据不一致。…

angular入门基础教程(九)依赖注入(DI)

依赖注入 Angular 中的依赖注入(DI)是框架最强大的特性之一。可以将依赖注入视为 Angular 在运行时为你的应用 提供所需资源的能力。依赖项可以是服务或其他资源。 使用服务的一种方式是作为与数据和 API 交互的方式。为了使服务可重用,应该…

实战:ZooKeeper 操作命令和集群部署

ZooKeeper 操作命令 ZooKeeper的操作命令主要用于对ZooKeeper服务中的节点进行创建、查看、修改和删除等操作。以下是一些常用的ZooKeeper操作命令及其说明: 一、启动与连接 启动ZooKeeper服务器: ./zkServer.sh start这个命令用于启动ZooKeeper服务器…

SSM学习9:SpringBoot简介、创建项目、配置文件、多环节配置

简介 SpringBoot式用来简化Spring应用的初始搭建以及开发过程的一个框架 项目搭建 File -> New -> Project 选中pom.xml文件,设置为maven项目 项目启动成功 可以访问BasicController中的路径 配置文件 在resources目录下 application.properties 默…

Linux——管理本地用户和组(详细介绍了Linux中用户和组的概念及用法)

目录 一、用户和组概念 (一)、用户的概念 (二)、组的概念 补充组 主要组 二、获取超级用户访问权限 (一)、su 命令和su -命令 ( 二)、sudo命令 三、管理本地用户账户 &…

WPF---Prism视图传参

Prism视图传参方式。 实际应用场景 点击tabitem中的列表数据,同步更新到ListStatic Region对应的界面。目前用两种方式实现了传参数据同步。 第一,事件聚合器(EventAggregator) 1. 定义事件 创建一个事件类,用于传…

微信小程序配置访问服务器失败所发现的问题及解决方案

目录 事前现象问题1:问题现象:问题分析: 问题2:问题现象:问题分析:解决方案: 事后现象 事前现象 问题1: 问题现象: 在本地调试时,一切顺利,但一…

JAVA开源的html转pdf、png转pdf项目

总览 Open HTML to PDF是一个纯Java库,用于使用CSS 2.1(以及更高版本的标准)对合理子集的格式良好的XML/XHTML(甚至一些HTML5)进行布局和格式化,输出为PDF或图像。 使用该库生成漂亮的PDF文档。但请注意,您不能将现代HTML5+直接应用于该引擎并期望获得出色的结果。您必…

妈吖,看过这个大厂的oracle主键自增,我的信心暴增!信创,国产数据库也能行。

创作不易 只因热爱!! 热衷分享,一起成长! “你的鼓励就是我努力付出的动力” 1.数据库oracle自增主键字段思维导图 在Oracle数据库中,可以通过创建序列(SEQUENCE)来实现自增功能。但也可以不在数据库中实现,而是通过程…

Docker中使用自定义网络方式实现Redis集群部署与测试流程

场景 Docker中Docker网络-理解Docker0与自定义网络的使用示例: Docker中Docker网络-理解Docker0与自定义网络的使用示例-CSDN博客 参考上面的流程实现自定义网络的实现。 下面记录其应用实例,使用Docker的自定义网络实现redis集群部署。 注&#xf…

vue3数据结构的渲染01

处理数据: //现有原始数据showCertificateUrl “url01;url02” 使用以下代码将两条通过分号";"分割的url进行处理 const parseUrls () > {urls.value [];// 每次重新赋值前一定要清空之前的旧数据!if (!showCertificateUrl.value) {retu…

数模打怪(八)之图论模型

一、作图 图的数学语言描述: G( V(G), E(G) ),G(graph):图,V(vertex):顶点集,E(edge):边集 1、在线作图 https://csac…

自闭症儿童能否上学:家长的选择与困惑

在自闭症儿童的成长旅程中,上学这一关键议题常常使家长陷入异常艰难的抉择和无尽的困惑之中。对于自闭症儿童究竟能否上学,家长们不得不面对众多纷繁复杂且至关重要的考量因素。 一方面,家长们怀揣着美好的期望,渴望孩子能够融入正…

C# 使用pythonnet 迁入 python 初始化错误解决办法

pythonnet 从 3.0 版本开始,必须设置Runtime.PythonDLL属性或环境变量 例如: string pathToVirtualEnv ".\\envs\\pythonnetTest"; Runtime.PythonDLL Path.Combine(pathToVirtualEnv, "python39.dll"); PythonEngine.PythonHom…

知识图谱增强的RAG(KG-RAG)详细解析

转自:知识图谱科技 这是一个与任务无关的框架,它将知识图谱(KG)的显性知识与大型语言模型(LLM)的隐含知识结合起来。这是该工作的arXiv预印本 https://arxiv.org/abs/2311.17330 。 我们在这里利用一个名为…

linux中mysql的安装使用(普通版版本+docker版本)

linux中mysql的安装使用 一、普通安装1.下载安装包2.流程 二、用docker安装1.拉取mysql镜像2.启动镜像3.开启权限第一种情况第二种情况 三、用Navicat连接 一、普通安装 1.下载安装包 挑选个你喜欢的目录,用wget下载并且解压 wget http://dev.mysql.com/get/Down…

Java人力资源招聘社会校招类型招聘系统PC端

🔍【揭秘】人力资源新利器!社会校招一站式PC端招聘系统全攻略🚀 🌈 开篇引言:招聘新纪元,效率为王! Hey小伙伴们,你是否还在为繁琐的招聘流程头疼不已?🤯 面…

京东商品详情API:多规格商品的返回值处理

处理京东商品详情API中关于多规格商品的返回值,首先需要了解京东API的返回数据结构。通常,对于多规格商品(如不同颜色、尺寸等选项的商品),API会返回一个包含多个规格选项和对应价格、库存等信息的复杂数据结构。 以下…

【“微软蓝屏”事件暴露了网络安全哪些问题?】建设安全稳固的网络基础设施

目录 前言一、软件更新流程中的风险管理和质量控制机制(一)测试流程及风险识别(二)风险管理策略(三)质量控制措施 二、预防类似大规模故障的最佳方案或应急响应对策(一)冗余系统设计…

.NET 一款获取主流浏览器存储密码的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…