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

news2024/9/21 22:57:10

目录

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
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

钉钉 ai卡片 stream模式联调

sdk连接 新建卡片模板下载node.js sdkconfig.json 配置应用信息 启动项目npm i npm run build npm run start连接成功 获取卡片回调 注册卡片回调事件调用https://api.dingtalk.com/v1.0/card/instances 创建卡片实例&#xff0c;返回实例Id //参数结构 {"cardTempla…

同花顺股票数据逆向:Cookie加密和Hook注入

&#x1f50d; 思路与步骤详解 &#x1f310; 抓包解析接口 首先&#xff0c;我们使用抓包工具对同花顺的股票数据接口进行分析&#xff0c;发现其中的Cookie参数经过了加密处理。 接下来&#xff0c;我们需要深入挖掘这些加密参数的生成位置。 &#x1f6e0; hook注入 对于…

信号的运算

信号实现运算&#xff0c;首先要明确&#xff0c;电路此时为负反馈电路&#xff0c;当处于深度负反馈时&#xff0c;可直接使用虚短虚断。负反馈相关内容可见&#xff1a;放大电路中的反馈_基极反馈-CSDN博客https://blog.csdn.net/qq_63796876/article/details/140438759 一、…

【深度学习总结】基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据

基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据 【深度学习总结】基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据U-Mamba介绍数据集下载环境准备数据集准备运行其他2D网络结构UMambaBot的模型结构UMambaEnc的模型结构 【深度学习总结】基于U-Mamba使用nnUNetv2处理BraTS挑战赛数据 …

matlab仿真 数字基带传输(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第六章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all Fd1;%符号采样频率 Fs10;%滤波器采样频率 r0.2;%滤波器滚降系数 delay4;%滤波器时延 [num,den]rcosine(Fd,Fs,defau…

使用LLaMA-Factory对Llama3-8B-Chinese-Chat进行微调

文章目录 模型及数据&#xff1a;模型下载数据 LLaMA-Factory启动拉取代码启动webui 模型训练数据导入数据预览设置模型路径配置参数及参数的保存开始训练 过程观察加载模型、对话模型导出、再次加载 模型及数据&#xff1a; 模型下载 使用基于中文数据训练过的 LLaMA3 8B 模…

Java基本数据类型与String类型的转换

目录 基本数据类型和Strng类型的转换 第一种方法 第二种方法 将字符串转成字符 注意事项 本章练习题 题1 题2 基本数据类型和Strng类型的转换 第一种方法 使用号和" "即可完成转换 第二种方法 第二种方法是通过基本类型的包装类调用parsexx方法 将字符…

计算机视觉与图像分类:技术原理、应用与发展前景

引言 随着科技的不断进步&#xff0c;计算机视觉逐渐成为了人工智能领域的重要分支之一。计算机视觉旨在让计算机具备“看懂”图像和视频的能力&#xff0c;从而理解和分析视觉信息。作为计算机视觉中的一个关键任务&#xff0c;图像分类涉及将输入的图像归类到预定义的类别中&…

Ubuntu20.04安装Elasticsearch

简介 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;是一套开源的日志管理和分析工具&#xff0c;用于收集、存储、分析和可视化日志数据。以下是如何在Ubuntu服务器上安装和配置ELK堆栈以便发送和分析日志信息的步骤。 安装Elasticsearch 首先&#xff0c;安…

使用 vSphere vCenter 管理 ESXi

使用 vSphere vCenter 管理 ESXi 1、新建数据中心 在 vSphere Client 中&#xff0c;左上角图标&#xff0c;进入 “清单”&#xff0c;鼠标右键名称&#xff0c;新建数据中心。 输入数据中心名称&#xff0c;我这里直接使用默认值&#xff0c;点击确定。 2、往数据中心中添加…

html+css 边框滑动按钮效果

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

QT:控件圆角设置、固定窗口大小

实现控件圆角度设置//使用的是setStyleSheet方法 //改变的控件是QTextEdit&#xff0c;如果你想改变其他控件&#xff0c;将QTextEdit进行更换 this->setStyleSheet("QTextEdit{background-color:#FFFFFF;border-top-left-radius:15px;border-top-right-radius:15px;bo…

Qt多语言功能实现

本文介绍Qt多语言功能实现。 应用程序多语言支持是常用功能&#xff0c;比如产品需要出口到不同语种的国家。采用Qt的多语言支持工具可以方便实现应用程序的多语言功能。本文以中英文语言切换为例&#xff0c;简要介绍Qt的多语言功能实现。 1.界面设计 界面设计需要考虑使用…

AWS 中国区同账号0etl integration配置步骤

中国区的AWS支持0etl integration已经一段时间了&#xff0c;目前北京区和宁夏区均支持。中文翻译为零ETL集成。 当前支持的引擎是Aurora MySQL数据托管式导出到Redshift. Global区域支持Aurora PostgreSQL. 中国区后续也会陆续出现此功能的。 功能介绍文档&#xff1a; 【1…

读取DS18B20温度、测量环境温度信息(单只DS18B20写法)

一、前言 1.1 功能介绍 随着工业自动化和智能家居技术的不断发展&#xff0c;精确测量和监控环境温度变得尤为重要。在许多应用场景中&#xff0c;如仓库管理、温室控制、空调系统以及工业制造过程中&#xff0c;实时准确地获取环境温度信息对于保障设备正常运行、提高能源利…

Python面试宝典第19题:最小路径和

题目 给定一个包含非负整数的m x n网格grid&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1, 3, 1], [1, 5, 1], [4, 2, 1]] 输出&…

【帆软报表开发】决策系统挂载报表

登陆决策系统 点击服务器->报表平台管理登陆或者输入网址http://IP:端口号/webroot/decision登陆&#xff08;默认端口号&#xff1a;8075&#xff09; 第一次需要输入超级管理员的用户名和密码&#xff0c;然后登陆决策系统 成功登陆决策系统 报表模板所在位置 制作好的报…

PHP安全编程宝典:30000字精细解析

文章目录 基础语法单双引号的区别前后端分离数据类型PHP常量函数var_dump函数count函数print_r函数**readfile&#xff08;&#xff09;函数****file_get_contents()函数****file_put_contents()函数**header函数fopen函数fread 函数rename函数copy&#xff08;&#xff09;函数…

生活实用英语口语“拆迁”用英文怎么说?柯桥成人学英语到蓝天广场

● 1. “拆迁”英语怎么说&#xff1f; ● 01. 其实国外也有拆迁 但国外的拆迁&#xff0c;只管拆 不管安置&#xff0c;你爱去哪去哪 英文可以说 housing removal 02. 但我们中国的“拆迁” 既管“拆”也管“迁” &#xff08;还是中国人幸福~&#xff09; 英文可以说 housin…

C语言 ——— 函数指针的定义 函数指针的使用

目录 何为函数指针 打印 函数名的地址 及 &函数名的地址 函数指针的代码&#xff08;如何正确存储函数地址&#xff09; 函数指针的使用 何为函数指针 类比&#xff1a; 整型指针 - 指向整型数据的指针&#xff0c;整型指针存放的是整型数据的地址 字符指针 - 指向字…