对话聊天(Chatbot)
低成本构建利用大语言模型只需很少的工作量就能构建出定制的聊天机器人。个性化与多轮交互通过特定的聊天格式接口可以实现与机器人的延伸对话使其能够针对特定任务或行为进行个性化定制。一个优秀的 Chatbot 包含三种消息角色系统消息System、用户消息User和助手消息Assistant用户和助手消息代表对话双方的交替发言。系统消息用于设定助手的行为、角色和全局指令。它时刻引导模型且对用户不可见使开发者能在不干扰用户对话的前提下精准控制机器人的属性。1. 基础对话角色设定与上下文记忆通过传入消息列表让模型扮演特定角色且不具备上下文记忆能力。如果想让模型引用或 “记住” 对话的早期部分则必须在模型的输入中提供早期的交流。messages [ {role:system, content:你是个友好的聊天机器人。}, {role:user, content:Hi, 我是Isa}, {role:assistant, content: Hi Isa! 很高兴认识你。今天有什么可以帮到你的吗?}, {role:user, content:是的你可以提醒我, 我的名字是什么?} ] response get_completion_from_messages(messages, temperature1) print(response)输出2. 复杂任务构建业务型 Chatbot如订餐机器人将 Chatbot 应用于实际业务需要设定严格的业务流程和知识库如菜单。在System Prompt中详细规定机器人的行为准则问候 - 收集订单 - 确认 - 询问地址 - 结算并将完整的菜单数据直接写入系统消息中。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(valueHi, placeholderEnter text here…) button_conversation pn.widgets.Button(nameChat!) interactive_conversation pn.bind(collect_messages, button_conversation) dashboard pn.Column( inp, pn.Row(button_conversation), pn.panel(interactive_conversation, loading_indicatorTrue, height300), ) dashboard messages context.copy() messages.append( {role:system, content:创建上一个食品订单的 json 摘要。\ 逐项列出每件商品的价格字段应该是 1) 披萨包括大小 2) 配料列表 3) 饮料列表包括大小 4) 配菜列表包括大小 5) 总价}, ) response get_completion_from_messages(messages, temperature0) print(response)Chatbot 收集完用户的自然语言需求后通常需要将其转换为后端系统能处理的数据格式。在对话结束时追加一条新的 System 消息要求模型基于之前的对话生成 JSON 摘要。关键点此时必须将 temperature 设为 0以确保输出格式的绝对稳定和可预测。