【Prompt Engineering】7 聊天机器人

一、引言

  • 大型语言模型:可以用来构建定制聊天机器人,工作量小。
  • 聊天模型:以消息序列为输入,返回模型生成的消息作为输出,适用于多轮对话和单轮任务。
python 复制代码
from zhipuai import ZhipuAI
# 导入第三方库

key = " "
client = ZhipuAI(api_key = key)

二、身份与上下文构建

  • 辅助函数get_completionget_completion_from_messages
  • 系统消息:设置助手的行为和角色,不显示给用户。
  • 角色扮演:开发者可以在用户和助手之间交替,提供对话上下文。
  • 上下文(Context):为了使模型能够引用对话的早期部分,必须在输入中提供早期交流。
python 复制代码
def get_completion(prompt, model="glm-3-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0, # 控制模型输出的随机程度
    )
    return response.choices[0].message.content

def get_completion_from_messages(messages, model="glm-3-turbo", temperature=0):
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=temperature, # 控制模型输出的随机程度
    )
#     print(str(response.choices[0].message))
    return response.choices[0].message.content
python 复制代码
# 中文
messages =  [  
{'role':'system', 'content':'你是一个像莎士比亚一样说话的助手。'},    
{'role':'user', 'content':'给我讲个笑话'},   
{'role':'assistant', 'content':'鸡为什么过马路'},   
{'role':'user', 'content':'我不知道'}  ]
python 复制代码
response = get_completion_from_messages(messages, temperature=1)
print(response)
python 复制代码
# 中文
messages =  [  
{'role':'system', 'content':'你是个友好的聊天机器人。'},    
{'role':'user', 'content':'Hi, 我是Isa。'}  ]
response = get_completion_from_messages(messages, temperature=1)
print(response)
python 复制代码
# 中文
messages =  [  
{'role':'system', 'content':'你是个友好的聊天机器人。'},    
{'role':'user', 'content':'好,你能提醒我,我的名字是什么吗?'}  ]
response = get_completion_from_messages(messages, temperature=1)
print(response)
python 复制代码
# 中文
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)

三、订餐机器人

  • 自动收集用户信息:接受比萨饼店订单。
  • 函数 collect_messages:收集用户消息,避免手动输入,维护上下文列表。
  • GUI(图形用户界面) :使用 panel 库创建,展示订单机器人。
  • 系统消息:包含菜单信息,每次调用时使用。
  • 上下文增长:随着对话进行,上下文不断增长,包含用户消息和模型消息。
python 复制代码
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, style={'background-color': '#F6F6F6'})))
 
    return pn.Column(*panels)

3.1 创建JSON摘要

  • 额外系统消息:指示模型创建订单的JSON摘要。
  • 字段要求:包括披萨(含尺寸)、配料列表、饮料列表(含尺寸)、辅菜列表(含尺寸)和总价。
  • 温度设置:使用较低温度以获得更可预测的输出。
python 复制代码
# 中文
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),
)
python 复制代码
dashboard
python 复制代码
messages =  context.copy()
messages.append(
{'role':'system', 'content':'创建上一个食品订单的 json 摘要。\
逐项列出每件商品的价格,字段应该是 1) 披萨,包括大小 2) 配料列表 3) 饮料列表,包括大小 4) 配菜列表包括大小 5) 总价'},    
)

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

总结

  • 聊天机器人构建:通过系统消息和上下文构建,可以创建具有特定身份和行为的聊天机器人。
  • 上下文的重要性:提供完整的上下文信息,以便模型能够理解和引用对话历史。
  • 交互式界面:通过GUI与用户交互,收集和展示对话。
  • JSON摘要:为订单系统提供结构化数据,便于处理和记录。
相关推荐
Georgeviewer5 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue6 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006346 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
迅易科技7 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics7 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1237 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术7 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
明志数科7 小时前
手持式机器人数据采集方案的生态化演进:从开源工具到数据交易
机器人·开源
Litluecat7 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC7 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow