【LLM】-07-提示工程-聊天机器人

目录

1、给定身份

1.1、基础代码

1.2、聊天机器人

2、构建上下文

3、订餐机器人

3.1、窗口可视化

3.2、构建机器人

3.3、创建JSON摘要


 

利用会话形式,与具有个性化特性(或专门为特定任务或行为设计)的聊天机器人进行深度对话。

在 Chat 网页界面中,我们的消息称为用户消息,而ChatGPT 的消息称为助手消息。

但在构建聊天机器人时,在发送了系统消息之后,您的角色可以仅作为用户 (user) ;也可以在用户和助手 (assistant) 之间交替,从而提供对话上下文。

1、给定身份

第一条消息中,我们以系统身份发送系统消息 (system message) ,它提供了一个总体的指示。

系统消息则有助于设置助手的行为和角色,并作为对话的高级指示。

1.1、基础代码

import openai

openai.api_key = "EMPTY"
openai.api_base = "http://192.168.1.1:20000/v1"


def get_completion_from_messages(messages, model="chatglm3-6b", temperature=0):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, # 控制模型输出的随机程度
    )
    #     print(str(response.choices[0].message))
    return response.choices[0].message["content"]


# 中文
messages =  [
    {'role':'system', 'content':'你是一个像小孩子一样说话的助手。'},
    {'role':'user', 'content':'给我讲个笑话'},
    {'role':'assistant', 'content':'鸡为什么过马路'},
    {'role':'user', 'content':'我不知道'}  ]

response = get_completion_from_messages(messages, temperature=1)
print(response)

1.2、聊天机器人

系统消息来定义:“你是一个友好的聊天机器人”,第一个用户消息:“嗨,我叫Isa。”

# 中文
messages =  [  
{'role':'system', 'content':'你是个友好的聊天机器人。'},    
{'role':'user', 'content':'Hi, 我是Isa。'}  ]

response = get_completion_from_messages(messages, temperature=1)
print(response)

你好,Isa!很高兴认识你。有什么我可以帮忙的吗?

 

2、构建上下文

当我们想gpt询问一个它不知道的问题,由于缺少上下文,他无法给出一个正确的答案。

messages =  [
    {'role':'system', 'content':'你是个友好的聊天机器人。需要真实的回答问题'},
    {'role':'user', 'content':'好,你能提醒我,我的名字是什么吗?'}
]

response = get_completion_from_messages(messages, temperature=1)

print(response)

当你提到“我的名字是什么时”,我理解你是想问你自己叫什么名字。但是作为人工智能,我无法知道你的个人信息。请告诉我你的名字,我会尽量帮助你回答问题。

 添加上下文内容

messages =  [
    {'role':'system', 'content':'你是个友好的聊天机器人。注意区分人物的你我他含义'},
    {'role':'user', 'content':'Hi, 我是Isa'},
    {'role':'assistant', 'content': "Hi Isa! 很高兴认识你。今天有什么可以帮到你的吗?"},
    {'role':'user', 'content':'是的,你可以提醒我, 我的名字是什么?'}  ]

response = get_completion_from_messages(messages, temperature=1)

print(response)

当然可以,你的名字是Isa。有什么我可以帮你记住的吗?

 

3、订餐机器人

3.1、窗口可视化

pip install panel

import panel as pn
import numpy as np
import pandas as pd

# 创建随机数据
np.random.seed(0)
data = pd.DataFrame(np.random.randn(100, 2), columns=["A", "B"])

# 创建一个散点图
scatter = pn.pane.DataFrame(data, width=800, height=400)

# 显示散点图
scatter.show()

Launching server at http://localhost:62221 

a76db54fdd1b4e99b26d9a39aa7c044e.png

3.2、构建机器人

# 中文
import panel as pn  # GUI
import openai

openai.api_key = "EMPTY"
openai.api_base = "http://192.168.1.1:20000/v1"


def get_completion_from_messages(messages, model="chatglm3-6b", temperature=0.7):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature,  # 控制模型输出的随机程度
    )
    # print(str(response.choices[0].message))
    return response.choices[0].message["content"]


def collect_messages(_):
    prompt = inp.value_input
    inp.value = ''
    context.append({'role': 'user', 'content': f"{prompt}"})
    response = get_completion_from_messages(context)
    context.append({'role': 'assistant', 'content': f"{response}"})
    panels.append(
        pn.Row('User:', pn.pane.Markdown(prompt, width=600))
    )
    panels.append(
        pn.Row('Assistant:', pn.pane.Markdown(response, width=600, css_classes=['custom-markdown']))
    )

    return pn.Column(*panels)


# 在适当的位置添加自定义CSS
html_code = """
<style>
.custom-markdown {
    background-color: #F6F6F6;
}
</style>
"""
pn.extension(raw_css=[html_code])

panels = []  # collect display

context = [{'role': 'system', 'content': """ 
你是订餐机器人,为披萨餐厅自动收集订单信息。
你要首先问候顾客。然后等待用户回复收集订单信息。收集完信息需确认顾客是否还需要添加其他内容。
最后需要询问是否自取或外送,如果是外送,你要询问地址。
最后告诉顾客订单总金额,并送上祝福。

请确保明确所有选项、附加项和尺寸,以便从菜单中识别出该项唯一的内容。
你的回应应该以简短、非常随意和友好的风格呈现。

菜单包括:

菜品:
意式辣香肠披萨(大、中、小) 12.95、10.00、7.00
芝士披萨(大、中、小) 10.95、9.25、6.50
茄子披萨(大、中、小) 11.95、9.75、6.75
薯条(大、小) 4.50、3.50
希腊沙拉 7.25

配料:
奶酪 2.00
蘑菇 1.50
香肠 3.00
加拿大熏肉 3.50
AI酱 1.50
辣椒 1.00

饮料:
可乐(大、中、小) 3.00、2.00、1.00
雪碧(大、中、小) 3.00、2.00、1.00
瓶装水 5.00
"""}]  # accumulate messages

inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')

button_conversation = pn.widgets.Button(name="Chat!")

interactive_conversation = pn.bind(collect_messages, button_conversation)

dashboard = pn.Column(
    inp,
    pn.Row(button_conversation),
    pn.panel(interactive_conversation, loading_indicator=True, height=300),
)

dashboard.show()

页面显示效果,及部分回复内容 

777e700dda3143d59d894a74512ecc46.png

3.3、创建JSON摘要

temperature=0 ,每次生成相同内容,保证结果可预测

# context 参考 3.2内容
messages =  context.copy()
messages.append(
    {'role':'system', 'content':
        '''创建上一个食品订单的 json 摘要。\
        逐项列出每件商品的价格,字段应该是 1) 披萨,包括大小 2) 配料列表 3) 饮料列表,包括大小 4) 配菜列表包括大小 5) 总价
        你应该给我返回一个可解析的Json对象,包括上述字段'''},
)

response = get_completion_from_messages(messages, temperature=0)
print(response)
{
  "披萨": {
    "大尺寸": 15.0,
    "小尺寸": 12.0
  },
  "配料": [
    {
      "名称": "切片奶酪",
      "大小": "大尺寸"
    },
    {
      "名称": "番茄酱",
      "大小": "小尺寸"
    }
  ],
  "饮料": [
    {
      "名称": "可乐",
      "大小": "大尺寸"
    },
    {
      "名称": "果汁",
      "大小": "小尺寸"
    }
  ],
  "配菜": [
    {
      "名称": "洋葱",
      "大小": "大尺寸"
    },
    {
      "名称": "蘑菇",
      "大小": "小尺寸"
    }
  ],
  "总价": 42.0
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊聊基于Alink库的主成分分析(PCA)

概述 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种常用的数据降维和特征提取技术&#xff0c;用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量&#xff0c;这些新变量称为主成分&…

基于opencv[python]的人脸检测

1 图片爬虫 这里的代码转载自&#xff1a;http://t.csdnimg.cn/T4R4F # 获取图片数据 import os.path import fake_useragent import requests from lxml import etree# UA伪装 head {"User-Agent": fake_useragent.UserAgent().random}pic_name 0 def request_pic…

idea springBoot启动时覆盖apollo配置中心的参数

vm options -Dorder.stat.corn“0/1 * * * * ?” 只有vm options, -D参数才能覆盖apollo参数 program arguments –key01val01 --key02val02 environment varibales envFAT;key02val02;key03val03

BGP选路之Preferred value

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由&#xff0c;然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较&#xff0c;从而决定是否将该最优…

在 VM 虚拟机中安装 openEuler + 桌面

在 VM 虚拟机中安装 openEuler 1 介绍2 步骤语言Root 账户安装位置网络和主机名自动检索到【推荐】手动配置网络 软件选择安装完成登录测试网络curl ip / ping ipip link show / ip a如网络不通&#xff0c;可检查网卡状态和dns配置 安装命令设置以图形界面的方式启动【dde】第…

【屏显MCU】多媒体接口总结

本文主要介绍【屏显MCU】的基本概念&#xff0c;用于开发过程中的理解 以下是图层叠加示例 【屏显MCU】多媒体接口总结 0. 个人简介 && 授权须知1. 三大引擎1.1 【显示引擎】Display Engine1.1.1 【UI】 图层的概念1.1.2 【Video】 图层的概念1.1.3 图层的 Blending 的…

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

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

【OpenCV C++20 学习笔记】图片处理基础

OpenCV C20 图片处理基础 VS 2022 C20 标准库导入的问题头文件包含以及命名空间声明main函数读取图片读取检查显式图片写入图片 完整代码bug VS 2022 C20 标准库导入的问题 VS还没有完全兼容C20。C20的import语句不一定能正确导入标准库&#xff0c;所以必须要新建一个头文件专…

实时同步:使用 Canal 和 Kafka 解决 MySQL 与缓存的数据一致性问题

目录 1. 准备工作 2. 将需要缓存的数据存储 Redis 3. 监听 canal 存储在 Kafka Topic 中数据 1. 准备工作 1. 开启并配置MySQL的 BinLog&#xff08;MySQL 8.0 默认开启&#xff09; 修改配置&#xff1a;C:\ProgramData\MySQL\MySQL Server 8.0\my.ini log-bin"HELO…

Github个人网站搭建详细教程【Github+Jekyll模板】

文章目录 前言一、介绍1 Github Pages是什么2 静态网站生成工具3 Jekyll简介Jekyll 和 GitHub 的关系 4 Mac系统Jekyll的安装及使用安装Jekyll的简单使用 二、快速搭建第一个Github Pages网站三、静态网站模板——Chirpy1 个人定制 四、WordPress迁移到Github参考资料 前言 23…

机器学习笔记——决策树

定义 决策树是一种可以用来解决回归和分类的问题的算法 决策树使用树形结构&#xff0c;通过叶子节点上的条件层层推理&#xff0c;得到最终的结果 例如&#xff1a;通过上面的简单决策&#xff0c;我们可以通过形状这一条件决策出水果属于哪一类。 决策树的学习结果和取什么规…

在Windows安装、部署Tomcat的方法

本文介绍在Windows操作系统中&#xff0c;下载、配置Tomcat的方法。 Tomcat是一个开源的Servlet容器&#xff0c;由Apache软件基金会的Jakarta项目开发和维护&#xff1b;其提供了执行Servlet和Java Server Pages&#xff08;JSP&#xff09;所需的所有功能。其中&#xff0c;S…

ROS配置并同时驱动多个UVC相机(含功能包)

配置并同时驱动多个UVC相机&#xff0c;并将数据保存为ROS话题形式的bag文件。 ROS可以同时驱动多个UVC相机。要实现这个目标并将数据保存成ROS话题的形式&#xff0c;再保存为bag文件&#xff0c;可以按照以下步骤操作&#xff1a; 1. 安装必要的包 sudo apt-get update sud…

环境搭建-Docker搭建ClickHouse

Docker搭建ClickHouse 一、前言二、ClickHouse安装2.1 拉取镜像运行ClickHouse服务 三、测试安装3.1 进入clickhouse容器3.2 命令补充说明 四、测试连接五、设置CK的用户名密码 一、前言 本文使用的Docker使用Windows搭建&#xff0c;Linux版本的搭建方式一样。 Windows系统搭…

【笔记:3D航路规划算法】二、RRT*

目录 RRT*于RRT的不同之处1、路径优化&#xff1a;2、成本计算&#xff1a;3、重连线步骤&#xff1a; 图解1、初始化2、路径搜索3、效果展示 总结 3D路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、虚拟现实等领…

前台文本直接取数据库值doFieldSQL插入SQL

实现功能&#xff1a;根据选择的车间主任带出角色。 实现步骤&#xff1a;OA的“字段联动”功能下拉选项带不出表“hrmrolemembers”&#xff0c;所以采用此方法。 doFieldSQL("select roleid from HrmResource as a inner join hrmrolemembers as b on a.id b.resource…

c++笔记2

目录 2.2 栈底&#xff08;bottom&#xff09; } 大数乘大数 节点&#xff1a;包含一个数据元素及若干指向子树分支的信息 。 节点的度&#xff1a;一个节点拥有子树的数目称为节点的度 。 叶子节点&#xff1a;也称为终端节点&#xff0c;没有子树的节点或者度为零的节点…

环信+亚马逊云科技服务:助力出海AI社交应用扬帆起航

随着大模型技术的飞速发展&#xff0c;AI智能体的社交体验得到了显著提升&#xff0c;AI社交类应用在全球范围内持续火热。尤其是年轻一代对新技术和新体验的热情&#xff0c;使得AI社交产品在海外市场迅速崛起。作为领先的即时通讯解决方案提供商&#xff0c;环信与亚马逊云科…

【Python】sqlite加密库pysqlcipher3编译安装步骤

目录 说明准备工作openssl编译sqlitetcl setup.py修改quote_argumentopenssl路径 安装加密示例代码测试附录参考 说明 pysqlcipher3是针对Python 3使用的pysqlcipher的一个分支&#xff0c; 尽管仍然维护对Python 2的支持。它仍然处于测试阶段&#xff0c; 尽管这个库包含的最…

uniapp集成安卓原生录屏插件以及使用

概述 我们知道UniApp的出现简化了开发者的工作流程&#xff0c;并减少了代码的重复编写。开发者可以使用一套代码编译到iOS、Android、以及各种小程序的应用&#xff0c;节省了人力和时间成本&#xff0c;但是涉及到与系统交互的时候&#xff0c;比如录屏、录音、录像、文件操…