《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人
课程
《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己-CSDN博客
我们希望你创建一个定制的服务机器人。
您可以想出任何您希望机器人执行的任务,例如,一个可以解决简单的数学问题的机器人0
一个机器人,它总是输出用户输入单词的反义词



以下是用 API2D 调用 openAI 'model': 'gpt-4o-mini' url = "https://openai.api2d.net/v1/chat/completions"
import requests
import gradio as gr
import jsondef get_response(input_text, prompt_text, chat_history): # 修改函数定义,增加prompt_text参数"""根据用户输入、额外的提示文本以及已有的对话历史获取语言模型的回复,并更新对话历史。:param input_text: 当前用户输入的文本内容。:param prompt_text: 额外的提示文本内容,比如固定的任务引导等。:param chat_history: 之前的对话历史,是一个包含二元组的列表,每个二元组分别是 (用户消息, 模型回复)。:return: 返回更新后的对话历史,包含本次交互后的结果以及包含模型相关信息及回复内容和token数量信息的格式化字符串,若JSON解析出错则返回相应错误提示以及更新后的对话历史。"""url = "https://openai.api2d.net/v1/chat/completions"headers = {'Content-Type': 'application/json','Authorization': 'Bearer fk2****' # <-- 把 fkxxxxx 替换成你自己的 Forward Key,注意前面的 Bearer 要保留,并且和 Key 中间有一个空格。}messages = []# 将之前的对话历史添加到消息列表中,格式需符合API要求for user_msg, bot_msg in chat_history:messages.append({"role": "user", "content": user_msg})messages.append({"role": "assistant", "content": bot_msg})# 添加当前用户输入的消息以及额外的提示文本消息(按照合适的格式添加,这里示例为添加在开头)messages.append({"role": "user", "content": prompt_text + " " + input_text})data = {'model': 'gpt-4o-mini', # 'gpt-3.5-turbo','messages': messages}response = requests.post(url, headers=headers, json=data)status_code = response.status_codetry:json_data = response.json()# 提取模型名称model_name = json_data.get('model', '未知模型')# 提取助手回复的内容assistant_content = json_data.get('choices', [])[0].get('message', {}).get('content', '无回复内容')# 提取各类token数量prompt_tokens = json_data.get('usage', {}).get('prompt_tokens', 0)completion_tokens = json_data.get('usage', {}).get('completion_tokens', 0)total_tokens = json_data.get('usage', {}).get('total_tokens', 0)# 将本次的用户输入和模型回复添加到对话历史中chat_history.append((input_text, assistant_content))return chat_history, f"模型: {model_name}\n回复内容: {assistant_content}\n提示词token数: {prompt_tokens}\n回复内容token数: {completion_tokens}\n总token数: {total_tokens}"except json.JSONDecodeError:# 即使解析JSON出错,也更新对话历史(可以为空回复等情况)chat_history.append((input_text, "解析JSON出错"))return chat_history, "解析JSON出错"# 假设这里的prompt_for_task是你预先定义好的提示文本内容,可根据实际情况赋值
prompt_for_task = "Give me the antonym of the following words"
with gr.Blocks() as demo:chatbot = gr.Chatbot()user_input = gr.Textbox(lines=2, placeholder="请输入你想发送的内容")state = gr.State([]) # 创建一个状态变量,用于存储对话历史,初始化为空列表prompt_textbox = gr.Textbox(label="Prompt", value=prompt_for_task, visible=True) # 添加Prompt文本框,设置为可见# 通过按钮点击事件触发获取回复和更新对话历史等操作send_button = gr.Button("发送")send_button.click(fn=get_response,inputs=[user_input,prompt_textbox, state],outputs=[chatbot, gr.Textbox(label="解析后的响应内容")])demo.launch(debug=True)
输出如下
gpt4 很厉害的翻译了英文 并且中输出
何处无芳草 "Where is there no fragrant grass?" ==>
反义词 无处有刺 nowhere has thorns
你觉得怎么样呢?

相关文章:
《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人
课程 《生成式 AI》课程 第3講:訓練不了人工智慧嗎?你可以訓練你自己-CSDN博客 我们希望你创建一个定制的服务机器人。 您可以想出任何您希望机器人执行的任务,例如,一个可以解决简单的数学问题的机器人0 一个机器人,…...
反转链表、链表内指定区间反转
反转链表 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 如当输入链表{1,2,3}时,经反转后,原链表变…...
Debezium系列之:Debezium3版本使用快照过程中的指标
Debezium系列之:Debezium3版本使用快照过程中的指标 一、背景二、技术原理三、增量快照四、阻塞快照指标一、背景 使用快照技术的过程中可以观察指标,从而确定快照的进度二、技术原理 Debezium系列之:Debezium 中的增量快照Debezium系列之:Incremental snapshotting设计原理…...
第一讲,Opencv计算机视觉基础之计算机视觉概述
深度剖析计算机视觉:定义、任务及未来发展趋势 引言 计算机视觉(Computer Vision)是人工智能的重要分支之一,旨在让机器通过视觉感知和理解环境。随着深度学习的快速发展,计算机视觉在自动驾驶、安防监控、医疗影像等…...
数据结构(双向链表——c语言实现)
双向链表相比于单向链表的优势: 1. 双向遍历的灵活性 双向链表:由于每个节点都包含指向前一个节点和下一个节点的指针,因此可以从头节点遍历到尾节点,也可以从尾节点遍历到头节点。这种双向遍历的灵活性使得在某些算法和操作中&a…...
【新人系列】Python 入门(十一):控制结构
✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…...
群核科技首次公开“双核技术引擎”,发布多模态CAD大模型
11月20日,群核科技在杭州举办了第九届酷科技峰会。现场,群核科技首次正式介绍其技术底层核心:基于GPU高性能计算的物理世界模拟器。并对外公开了两大技术引擎:群核启真(渲染)引擎和群核矩阵(CAD…...
【AI大模型引领变革】探索AI如何重塑软件开发流程与未来趋势
文章目录 每日一句正能量前言流程与模式介绍【传统软件开发 VS AI参与的软件开发】一、传统软件开发流程与模式二、AI参与的软件开发流程与模式三、AI带来的不同之处 结论 AI在软件开发流程中的优势、挑战及应对策略AI在软件开发流程中的优势面临的挑战及应对策略 结论 后记 每…...
linux 常用命令指南(存储分区、存储挂载、docker迁移)
前言:由于目前机器存储空间不够,所以‘斥巨资’加了一块2T的机械硬盘,下面是对linux扩容的一系列操作,包含了磁盘空间的创建、删除;存储挂载;docker迁移;anaconda3迁移等。 一、存储分区 1.1 …...
用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错
首先看一下我们的示例代码 import os from pyspark.sql import SparkSession import pyspark.sql.functions as F """ ------------------------------------------Description : TODO:SourceFile : etl_stream_kafkaAuthor : zxxDate : 2024/11/…...
Redis的过期删除策略和内存淘汰机制以及如何保证双写的一致性
Redis的过期删除策略和内存淘汰机制以及如何保证双写的一致性 过期删除策略内存淘汰机制怎么保证redis双写的一致性?更新策略先删除缓存后更新数据库先更新数据库后删除缓存如何选择?如何保证先更新数据库后删除缓存的线程安全问题? 过期删除策略 为了…...
异常处理:import cv2时候报错No module named ‘numpy.core.multiarray‘
问题描述 执行一个将视频变成二值视频输出时候,报错。No module named numpy.core.multiarray,因为应安装过了numpy,所以比较不解。试了卸载numpy和重新安装numpy多次操作,也进行了numpy升级的操作,但是都没有用。 解…...
C++手写PCD文件
前言 一般pcd读写只需要调pcl库接口,直接用pcl的结构写就好了 这里是不依赖pcl库的写入方法 主要是开头写一个header 注意字段大小,类型不要写错 结构定义 写入点需要与header中定义一致 这里用的RoboSense的结构写demo 加了个1字节对齐 stru…...
优选算法(双指针)
1.双指针介绍 双指针算法是一种常用的算法思想,特别适用于处理涉及阵列、链表或字符串等线性数据结构的问题。通过操作两个一个指针来进行导航或操作数据结构,双指针可以最大程度优化解决方案的效率。提高效率并减少空间复杂度。 在Java中使用双指针的核…...
【保姆级】Mac上IDEA卡顿优化
保姆级操作,跟着操作即可~~~ 优化内存 在你的应用程序中,找到你的idea 按住control键+单击 然后点击“显示包内容” </...
python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具
python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具 文章目录 python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具项目背景技术栈用户界面核心功能实现结果展示完整代码总结 在现代软件开发中,测试接口的有效性与响应情况变得尤为重要。本文将指导…...
pytest 接口串联场景
在编写接口测试时,如果有多个接口需要串联在一起调用,并且这些接口共同构成了一个业务场景,通常可以使用以下几种方法来组织代码,使其更具可读性和维护性。以下是一些规范的建议: 1. 使用 pytest 的 fixture 来管理接…...
Springboot项目搭建(2)-用户详细信息查询
1. 提要信息 1.1 java四类八种 在Java中,四类指的是Java中的基本数据类型和引用数据类型: 基本数据类型:Java提供了八种基本数据类型,包括整数型、浮点型、字符型和布尔型。引用数据类型:指向对象的引用,…...
Stable Diffusion的加噪和去噪详解
SD模型原理: Stable Diffusion概要讲解Stable diffusion详细讲解Stable Diffusion的加噪和去噪详解Diffusion ModelStable Diffusion核心网络结构——VAEStable Diffusion核心网络结构——CLIP Text EncoderStable Diffusion核心网络结构——U-NetStable Diffusion中…...
解决 Gradle 报错:`Plugin with id ‘maven‘ not found` 在 SDK 开发中的问题
在 SDK 开发过程中,使用 Gradle 构建和发布 SDK 是常见的任务。在将 SDK 发布为 AAR 或 JAR 包时,你可能会使用 apply plugin: maven 来发布到本地或远程的 Maven 仓库。但是,随着 Gradle 版本的更新,特别是从 Gradle 7 版本开始&…...
Windows 10下Cesium Terrain Builder编译踩坑实录(VS2015+GDAL环境配置)
Windows 10下Cesium Terrain Builder编译实战指南(VS2015GDAL环境配置) 在三维GIS开发领域,Cesium Terrain Builder(CTB)作为生成量化网格地形瓦片的核心工具,其编译过程却常让开发者望而生畏。特别是在Win…...
10BASE-T1S PLCA参数配置避坑指南:从Node ID重复到Burst Timer设置,这些坑你踩过几个?
10BASE-T1S PLCA参数配置避坑指南:从Node ID重复到Burst Timer设置,这些坑你踩过几个? 在车载以太网的实际部署中,10BASE-T1S因其单对线缆实现多节点通信的特性,正逐渐成为智能座舱和传感器网络的热门选择。但当我们真…...
FreeRTOS内存管理实战:如何在Xilinx Zynq上正确配置堆大小避免Malloc失败
FreeRTOS内存管理实战:Xilinx Zynq平台堆配置与优化指南 在嵌入式系统开发中,内存管理往往是决定系统稳定性的关键因素之一。当你在Xilinx Zynq平台上使用FreeRTOS时,突然遇到vApplicationMallocFailedHook()被调用的错误提示,这就…...
实战演练:基于快马平台仿claude code开发可拖拽任务管理看板应用
今天想和大家分享一个实战项目:基于InsCode(快马)平台开发一个可拖拽的任务管理看板应用。这个项目模拟了类似claude code处理复杂场景的能力,特别适合需要快速验证产品可行性的场景。 项目背景与需求分析 任务管理看板是团队协作中非常实用的工具。我们…...
TWS耳机充电仓硬件设计全解析:从Type-C接口到NTC保护的7大核心模块
TWS耳机充电仓硬件设计全解析:从Type-C接口到NTC保护的7大核心模块 当你在咖啡馆掏出AirPods时,可能不会想到那个小巧的充电仓里藏着多少精密电路。作为硬件工程师,我们眼中的充电仓不是简单的塑料盒子,而是一个由七大核心模块组成…...
EB Tresos里XDM文件详解:不只是配置界面,更是你定制MCAL模块的‘源代码’
EB Tresos中XDM文件的深度解析:从配置界面到MCAL模块定制化开发 在AUTOSAR开发领域,EB Tresos Studio作为行业标准的MCAL配置工具,其核心机制往往隐藏在那些看似普通的配置文件中。XDM文件就是这样一个关键角色——它远不止是配置界面的数据源…...
学生党必备:AutoDL服务器+Pycharm远程开发极简配置(含学生认证技巧)
学生党高效开发指南:AutoDLPycharm远程开发全攻略 1. 低成本深度学习开发环境搭建 作为一名深度学习爱好者,最头疼的莫过于硬件资源不足。显卡价格居高不下,笔记本跑个MNIST都卡顿,更别提训练复杂模型了。好在云服务器为我们提供了…...
滴滴盖亚计划ETA数据集实战:如何用Python处理智能交通数据(附完整代码)
滴滴盖亚ETA数据集实战:Python智能交通数据处理全流程解析 引言:智能交通时代的ETA技术价值 在早高峰的深圳深南大道上,网约车司机王师傅刚接单就面临抉择:系统推荐的三条路线中,哪一条能最快到达乘客上车点…...
GoodbyeDPI完全上手指南:从架构到实操的进阶之路
GoodbyeDPI完全上手指南:从架构到实操的进阶之路 【免费下载链接】GoodbyeDPI GoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows) 项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI 开源项目使用涉及对项目结构的深入…...
OpenClaw+GLM-4.7-Flash:个人财务数据处理自动化方案
OpenClawGLM-4.7-Flash:个人财务数据处理自动化方案 1. 为什么需要自动化财务处理 每个月末,我都会面对一堆散乱的银行流水、电子发票和Excel表格。手动整理这些数据不仅耗时,还容易出错。直到我发现OpenClaw这个开源自动化框架,…...
