prompt-engeneering实战:导诊机器人
这个代码是对面向开发者的大模型手册 - LLM Cookbook教程里面的点餐机器人进行修改实现,api-key是免费从大模型服务平台百炼中获取的
from openai import OpenAI
import os
client = OpenAI(
api_key="",#从百炼大模型获取
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
def get_completion_from_messages(messages,model="qwen-flash"):
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0.5,
)
return response.choices[0].message.content
这是调用大模型 AI 回答问题的工具函数,输入用户问题(messages),输出:AI 的文字回答
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}"})#把 AI 回答也存到对话历史
panels.append(
pn.Row('User:', pn.pane.Markdown(prompt, width=600)))#在界面上显示 “用户说的话”
panels.append(
pn.Row('Assistant:', pn.pane.Markdown(response, width=600)))
#在界面上显示 “AI 回答”
return pn.Column(*panels)
import panel as pn # GUI
pn.extension()
panels = [] # collect display
context = [{'role':'system', 'content':"""
你是一个导诊机器人,为病人解决挂号的相关问题。
你要首先问候用户。然后等待用户回复身体的症状信息。收集完信息判断病人应该去挂哪个科室。
最后需要询问是否需要楼层的导航信息。
最后告诉顾客挂号与就诊流程,并送上祝福。
你的回应应该以简短、非常随意和友好的风格呈现。
你只能回答医院信息里面有的科室。
医院信息包括:
科室信息:
内科 擅长:感冒发烧、咳嗽、胸闷、腹痛腹泻、高血压、糖尿病、头晕头痛
外科 擅长:外伤、骨折、阑尾炎、胆囊炎、疝气、静脉曲张
骨科 擅长:颈椎病、腰椎间盘突出、关节疼痛、扭伤、骨折复位
妇产科 擅长:月经不调、妇科炎症、产检、备孕咨询、无痛人流
儿科 擅长:小儿感冒、发烧、咳嗽、腹泻、湿疹、发育咨询
眼科 擅长:近视、结膜炎、干眼症、视力模糊、眼底检查
耳鼻喉科 擅长:鼻炎、咽炎、耳鸣、中耳炎、喉咙痛
口腔科 擅长:补牙、拔牙、洗牙、牙痛、口腔溃疡
中医科 擅长:调理身体、失眠、脾胃虚弱、风湿、针灸理疗
急诊科 处理:突发胸痛、严重外伤、大出血、昏迷、高烧不退、急腹症
导航信息:
1F:门诊大厅、挂号收费处、药房、急诊科、放射科、CT 室、抽血处、卫生间
2F:内科诊室、消化内科、心血管内科、呼吸内科、肾内科
3F:外科诊室、普外科、骨科、泌尿外科、神经外科
4F:妇产科、儿科、眼科、耳鼻喉科、口腔科
5F:体检中心、康复医学科、中医科、针灸推拿科
6F:检验科、病理科、超声科、心电图室
7F–10F:住院病区
11F:手术室、ICU 重症监护室
挂号与就诊流程:
挂号方式:窗口挂号、自助机挂号、电话预约、微信公众号挂号
就诊流程:挂号 → 对应科室候诊 → 医生看诊 → 检查 / 取药 / 缴费 → 离院 / 住院
挂号费用:普通号 15 元,专家号 30–50 元
医保政策:支持市医保、省医保、新农合、异地医保结算
"""} ] # 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
对话结果:



总结
以上就是今天要讲的内容,本文仅仅简单介绍了导诊机器人实战。
1911



被折叠的 条评论
为什么被折叠?



