首页 > 其他分享 >LLM大模型实践10-聊天机器人

LLM大模型实践10-聊天机器人

时间:2025-01-12 22:29:05浏览次数:3  
标签:10 temperature 机器人 messages content role LLM pn response

大型语言模型带给我们的激动人心的一种可能性是,我们可以通过它构建定制的聊天机器人 (Chatbot),而且只需很少的工作量。在这一章节的探索中,我们将带你了解如何利用会话形式,与具 有个性化特性(或专门为特定任务或行为设计)的聊天机器人进行深度对话。

像 ChatGPT 这样的聊天模型实际上是组装成以一系列消息作为输入,并返回一个模型生成的消息作为输 出的。这种聊天格式原本的设计目标是简便多轮对话,但我们通过之前的学习可以知道,它对于不会涉 及任何对话的单轮任务也同样有用。

给定身份

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

定义对话函数

def get_completion_v2(prompt, model="gpt-3.5-turbo"):

    openai.api_key = "sk-xxx"

    

    openai.base_url = "https:xxxx"

    messages = [{"role": "user", "content": prompt}]

    response = openai.chat.completions.create(

    model=model,

    messages=messages,

    temperature=0, # 控制模型输出的随机程度

    )

    return response.choices[0].message.content

def get_completion_temperature_v2(messages, model="gpt-3.5-turbo", temperature=0):

    openai.api_key = "sk-xxxx"

    

    openai.base_url = "https://axxxx"

    response = openai.chat.completions.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_temperature_v2(messages, temperature=1)

print(response)

友好的聊天机器人

# 中文

messages =  [  

{'role':'system', 'content':'你是个友好的聊天机器人。'},    

{'role':'user', 'content':'Hi, 我是Isa。'}  ]

response = get_completion_temperature_v2(messages, temperature=1)

print(response)

构建上下文

 # 中文

messages =  [  

{'role':'system', 'content':'你是个友好的聊天机器人。'},    

{'role':'user', 'content':'好,你能提醒我,我的名字是什么吗?'}  ]

response = get_completion_temperature_v2(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_temperature_v2(messages, temperature=1)

print(response)

订餐机器人

构建机器人

def collect_messages(_):

    prompt = inp.value_input

    inp.value = ''

    context.append({'role':'user', 'content':f"{prompt}"})

    response = get_completion_temperature_v2(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)))

return pn.Column(*panels)

!pip install panel

# 中文

import panel as pn  # GUI

pn.extension()

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

初始效果

创建json摘要

messages =  context.copy()

messages.append(

{'role':'system', 'content':

'''创建上一个食品订单的 json 摘要。\

逐项列出每件商品的价格,字段应该是 1) 披萨,包括大小 2) 配料列表 3) 饮料列表,包括大小 4) 配菜

列表包括大小 5) 总价

你应该给我返回一个可解析的Json对象,包括上述字段'''},    

)

response = get_completion_temperature_v2(messages, temperature=0)

print(response)

标签:10,temperature,机器人,messages,content,role,LLM,pn,response
From: https://blog.csdn.net/u010479989/article/details/145000428

相关文章

  • Win32汇编学习笔记10.OD插件
    筛选器异常插件Win32汇编学习笔记10.OD插件-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区-BpSend.net被调试程序: ......
  • Windows10中安装了ubuntu虚拟机后xshell无法连接到ubuntu
    Windows10中安装了ubuntu虚拟机后xshell无法连接到ubuntu安装了ubuntu虚拟机后发现shell无法连接到ubuntu的排查步骤:步骤1:检查虚拟机网络配置确认虚拟机网络模式:确认虚拟机的网络模式是否设置为桥接模式或NAT模式。桥接模式可以让你的虚拟机在网络中拥有独立的IP地址,而NAT模式......
  • 探讨人工智能机器人学之路径规划与导航:A*算法、Dijkstra算法等路径规划方法
    引言在人工智能(AI)和机器人学中,路径规划与导航是一个至关重要的课题。机器人在复杂的环境中,必须能够根据环境信息和目标要求,自动计算一条从起始位置到目标位置的最优或可行的路径。路径规划不仅仅是关于如何找到目标位置,还涉及如何在多变、动态的环境中避免障碍、实现效率和安......
  • 浅析人工智能机器人学之运动控制与感知:机器人运动规划、传感器数据处理
    人工智能机器人学之运动控制与感知:机器人运动规划、传感器数据处理机器人学(Robotics)是人工智能(AI)最为重要且富有挑战性的应用领域之一。在这一领域,机器人需要能够与物理世界进行有效交互,以完成任务并确保操作的精确性与安全性。为了实现这一目标,机器人学结合了多个子领域,其中......
  • [PCIE5.0] 4.2.8 Compliance Pattern in 8b/10b Encoding
    这段文字描述的是在PCIe或类似高速接口协议中,Polling.Compliance子状态的具体要求,特别是合规模式(CompliancePattern)在传输过程中的处理方式。这个过程主要是通过SKPOrderedSet来验证链路的合规性,确保链路在高频率下的稳定性、可靠性和时序准确性。我们来逐步解读这......
  • LeetCode:102.二叉树的层序遍历
    LeetCode:102.二叉树的层序遍历解题思路层序遍历顺序就是广度优先遍历。不过在遍历时候需要记录当前节点所处的层级,方便将其添加到不同的数组中。/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undefined?0:......
  • 【Flutter&Dart】tolyui_feedback组件例子效果(23 /100)
    上效果图有12种位置展示效果;很能满足大部分需要代码如下:import'package:flutter/material.dart';import'package:tolyui_feedback/tolyui_feedback.dart';classTolyTooltipDemoextendsStatelessWidget{constTolyTooltipDemo({super.key});@override......
  • 【抖音】抖音将建立安全与信任中心,推进算法和平台治理透明化的10项措施
    抖音致力于打造一个开放、积极、多元、友善的平台,帮助用户记录自我,分享美好生活。为了回应社会关切,抖音拟推出10项措施,切实推动平台工作透明化,创建安全与信任的平台环境,打造更良好的网络生态:1.推进算法透明化。2025年,抖音将建设安全与信任中心网站和线下公示展厅,面向社会全面深......
  • 数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)
    将有序数组转换为二叉搜索树https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/描述给你一个整数数组nums,其中元素已经按升序排列请你将其转换为一棵平衡二叉搜索树示例1输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,nul......
  • 数据结构与算法之二叉树: LeetCode 110. 平衡二叉树 (Ts版)
    平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/description/描述给定一个二叉树,判断它是否是平衡二叉树示例1输入:root=[3,9,20,null,null,15,7]输出:true示例2输入:root=[1,2,2,3,3,null,null,4,4]输出:false示例3输入:root=[]输......