用cms做網(wǎng)站怎么樣關(guān)鍵詞優(yōu)化seo
聊天機(jī)器人設(shè)計(jì)
- 以會(huì)話形式進(jìn)行交互,接受一系列消息作為輸入,并返回模型生成的消息作為輸出。
- 原本設(shè)計(jì)用于簡(jiǎn)便多輪對(duì)話,但同樣適用于單輪任務(wù)。
設(shè)計(jì)思路
- 個(gè)性化特性:通過(guò)定制模型的訓(xùn)練數(shù)據(jù)和參數(shù),使機(jī)器人擁有特定的個(gè)性化特點(diǎn)。
- 專門(mén)任務(wù)設(shè)計(jì):針對(duì)特定任務(wù)或行為進(jìn)行設(shè)計(jì),模型可針對(duì)該任務(wù)進(jìn)行Fine-tune,提高效果和準(zhǔn)確性。
優(yōu)勢(shì)
- 簡(jiǎn)化開(kāi)發(fā):減少了構(gòu)建聊天機(jī)器人所需的工作量和復(fù)雜度。
- 靈活性:模型可根據(jù)需求進(jìn)行定制,適應(yīng)不同的應(yīng)用場(chǎng)景和用戶需求。
應(yīng)用場(chǎng)景
- 客服機(jī)器人:提供自然、有效的客戶支持。
- 教育助手:幫助學(xué)生解答問(wèn)題、提供學(xué)習(xí)指導(dǎo)。
- 娛樂(lè)休閑:提供有趣的對(duì)話、游戲等娛樂(lè)內(nèi)容。
利用大型語(yǔ)言模型構(gòu)建定制聊天機(jī)器人,為用戶提供更加個(gè)性化、高效的交互體驗(yàn),是人工智能技術(shù)在對(duì)話系統(tǒng)領(lǐng)域的重要應(yīng)用之一。
一、給定身份
**get_completion**
** 方法**
- 適用于單輪對(duì)話。
- 將 Prompt 放入類似用戶消息的對(duì)話框中。
**get_completion_from_messages**
** 方法**
- 傳入一個(gè)消息列表,這些消息可以來(lái)自不同的角色。
- 第一條消息作為系統(tǒng)消息,提供總體指示。
- 系統(tǒng)消息用于設(shè)置助手的行為和角色,引導(dǎo)其回應(yīng)。
- 可以想象系統(tǒng)消息在助手的耳邊低語(yǔ),不讓用戶注意到。
- 用戶可以與助手交替,提供對(duì)話上下文。
在構(gòu)建聊天機(jī)器人時(shí),您的角色可以是:
- 用戶 (user)
- 助手 (assistant)
這些方法有助于引導(dǎo)助手的回應(yīng)并設(shè)置對(duì)話的上下文,提供更加個(gè)性化和貼切的交互體驗(yàn)。
import openai# 下文第一個(gè)函數(shù)即tool工具包中的同名函數(shù),此處展示出來(lái)以便于讀者對(duì)比
def get_completion(prompt, model="gpt-3.5-turbo"):messages = [{"role": "user", "content": prompt}]response = openai.ChatCompletion.create(model=model,messages=messages,temperature=0, # 控制模型輸出的隨機(jī)程度)return response.choices[0].message["content"]def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):response = openai.ChatCompletion.create(model=model,messages=messages,temperature=temperature, # 控制模型輸出的隨機(jī)程度)
# print(str(response.choices[0].message))return response.choices[0].message["content"]
1.1 講笑話
# 中文
messages = [
{'role':'system', 'content':'你是一個(gè)像莎士比亞一樣說(shuō)話的助手。'},
{'role':'user', 'content':'給我講個(gè)笑話'},
{'role':'assistant', 'content':'雞為什么過(guò)馬路'},
{'role':'user', 'content':'我不知道'} ]
1.2 友好的聊天機(jī)器人
# 中文
messages = [
{'role':'system', 'content':'你是個(gè)友好的聊天機(jī)器人。'},
{'role':'user', 'content':'Hi, 我是Isa。'} ]
response = get_completion_from_messages(messages, temperature=1)
print(response)
二、構(gòu)建上下文
# 中文
messages = [
{'role':'system', 'content':'你是個(gè)友好的聊天機(jī)器人。'},
{'role':'user', 'content':'Hi, 我是Isa'},
{'role':'assistant', 'content': "Hi Isa! 很高興認(rèn)識(shí)你。今天有什么可以幫到你的嗎?"},
{'role':'user', 'content':'是的,你可以提醒我, 我的名字是什么?'} ]
response = get_completion_from_messages(messages, temperature=1)
print(response)
三、訂餐機(jī)器人
這個(gè)機(jī)器人將被設(shè)計(jì)為自動(dòng)收集用戶信息,并接收來(lái)自比薩餅店的訂單。
3.1 構(gòu)建機(jī)器人
def collect_messages(_):prompt = inp.value_inputinp.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)
現(xiàn)在,我們將設(shè)置并運(yùn)行這個(gè) UI 來(lái)顯示訂單機(jī)器人。初始的上下文包含了包含菜單的系統(tǒng)消息,在每次調(diào)用時(shí)都會(huì)使用。此后隨著對(duì)話進(jìn)行,上下文也會(huì)不斷增長(zhǎng)。
!pip install panelCopy to clipboardErrorCopied
如果你還沒(méi)有安裝 panel 庫(kù)(用于可視化界面),請(qǐng)運(yùn)行上述指令以安裝該第三方庫(kù)。
# 中文
import panel as pn # GUI
pn.extension()panels = [] # collect display context = [{'role':'system', 'content':"""
你是訂餐機(jī)器人,為披薩餐廳自動(dòng)收集訂單信息。
你要首先問(wèn)候顧客。然后等待用戶回復(fù)收集訂單信息。收集完信息需確認(rèn)顧客是否還需要添加其他內(nèi)容。
最后需要詢問(wèn)是否自取或外送,如果是外送,你要詢問(wèn)地址。
最后告訴顧客訂單總金額,并送上祝福。請(qǐng)確保明確所有選項(xiàng)、附加項(xiàng)和尺寸,以便從菜單中識(shí)別出該項(xiàng)唯一的內(nèi)容。
你的回應(yīng)應(yīng)該以簡(jiǎn)短、非常隨意和友好的風(fēng)格呈現(xiàn)。菜單包括:菜品:
意式辣香腸披薩(大、中、小) 12.95、10.00、7.00
芝士披薩(大、中、小) 10.95、9.25、6.50
茄子披薩(大、中、小) 11.95、9.75、6.75
薯?xiàng)l(大、小) 4.50、3.50
希臘沙拉 7.25配料:
奶酪 2.00
蘑菇 1.50
香腸 3.00
加拿大熏肉 3.50
AI醬 1.50
辣椒 1.00飲料:
可樂(lè)(大、中、小) 3.00、2.00、1.00
雪碧(大、中、小) 3.00、2.00、1.00
瓶裝水 5.00
"""} ] # accumulate messagesinp = 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),
)dashboardCopy to clipboardErrorCopied
運(yùn)行如上代碼可以得到一個(gè)點(diǎn)餐機(jī)器人,下圖展示了一個(gè)點(diǎn)餐的完整流程:
3.2 創(chuàng)建JSON摘要
此處我們另外要求模型創(chuàng)建一個(gè) JSON 摘要,方便我們發(fā)送給訂單系統(tǒng)。
因此我們需要在上下文的基礎(chǔ)上追加另一個(gè)系統(tǒng)消息,作為另一條指示 (instruction) 。我們說(shuō)創(chuàng)建一個(gè)剛剛訂單的 JSON 摘要,列出每個(gè)項(xiàng)目的價(jià)格,字段應(yīng)包括:
- 披薩,包括尺寸
- 配料列表
- 飲料列表
- 輔菜列表,包括尺寸,
- 總價(jià)格。
此處也可以定義為用戶消息,不一定是系統(tǒng)消息。
請(qǐng)注意,這里我們使用了一個(gè)較低的溫度,因?yàn)閷?duì)于這些類型的任務(wù),我們希望輸出相對(duì)可預(yù)測(cè)。
messages = context.copy()
messages.append(
{'role':'system', 'content':
'''創(chuàng)建上一個(gè)食品訂單的 json 摘要。\
逐項(xiàng)列出每件商品的價(jià)格,字段應(yīng)該是 1) 披薩,包括大小 2) 配料列表 3) 飲料列表,包括大小 4) 配菜列表包括大小 5) 總價(jià)
你應(yīng)該給我返回一個(gè)可解析的Json對(duì)象,包括上述字段'''},
)response = get_completion_from_messages(messages, temperature=0)
print(response)Copy to clipboardErrorCopied
{"披薩": {"意式辣香腸披薩": {"大": 12.95,"中": 10.00,"小": 7.00},"芝士披薩": {"大": 10.95,"中": 9.25,"小": 6.50},"茄子披薩": {"大": 11.95,"中": 9.75,"小": 6.75}},"配料": {"奶酪": 2.00,"蘑菇": 1.50,"香腸": 3.00,"加拿大熏肉": 3.50,"AI醬": 1.50,"辣椒": 1.00},"飲料": {"可樂(lè)": {"大": 3.00,"中": 2.00,"小": 1.00},"雪碧": {"大": 3.00,"中": 2.00,"小": 1.00},"瓶裝水": 5.00}
}Copy to clipboardErrorCopied
我們已經(jīng)成功創(chuàng)建了自己的訂餐聊天機(jī)器人。你可以根據(jù)自己的喜好和需求,自由地定制和修改機(jī)器人的系統(tǒng)消息,改變它的行為,讓它扮演各種各樣的角色,賦予它豐富多彩的知識(shí)。讓我們一起探索聊天機(jī)器人的無(wú)限可能性吧!