廣州網(wǎng)站提升排名百度指數(shù)使用指南
角色扮演應(yīng)用案例RolePlay
0.項目信息
- 日期: 2023-12-2
- 作者:小知
- 課題: 通過設(shè)置角色模板并結(jié)合在線搜索、記憶和知識庫功能,實現(xiàn)典型的對話應(yīng)用功能。這個功能是大模型應(yīng)用的基礎(chǔ)功能,在后續(xù)其它RAG等功能中都會用到這個功能。
- 功能與作用:RolePlay角色扮演是一種基礎(chǔ)功能,也是重要的功能?,F(xiàn)在在各大大模型企業(yè)的APP中可以看到很多關(guān)于短視頻文案、小紅書文案、高情商朋友圈等這些功能的底層邏輯是基于角色扮演中設(shè)置不同的角色模板實現(xiàn)的。
- GitHub:https://github.com/52phm/pylmkit
- PyLMKit官網(wǎng)教程
- PyLMKit應(yīng)用(online application)
- English document
- 中文文檔
PyLMKit RolePlay
1.下載安裝
# 下載安裝
pip install pylmkit -U --user
2.設(shè)置API KEY
應(yīng)用哪個大模型,就提前設(shè)置好該大模型對應(yīng)的 API KEY
import os# openai chatgpt
os.environ['openai_api_key'] = ""# 百度
os.environ['qianfan_ak'] = ""
os.environ['qianfan_sk'] = ""# 阿里
os.environ["DASHSCOPE_API_KEY"] = ""# 科大訊飛-星火
os.environ["spark_appid"] = ""
os.environ["spark_apikey"] = ""
os.environ["spark_apisecret"] = ""
os.environ["spark_domain"] = "generalv3"# 智譜AI
os.environ['zhipu_apikey'] = ""
或者在.env
文件中批量加載設(shè)置好的API KEY
,加載方法如下:
from dotenv import load_dotenv# load .env
load_dotenv()
3.加載大語言模型
導(dǎo)入大語言模型,在本案例中使用百度千帆
大模型作為例子進行介紹。
from pylmkit.llms import ChatQianfan # 百度-千帆
from pylmkit.llms import ChatSpark # 訊飛-星火
from pylmkit.llms import ChatZhipu # 清華-智譜
from pylmkit.llms import ChatHunyuan # 騰訊-混元
from pylmkit.llms import ChatBaichuan # 百川
from pylmkit.llms import ChatTongyi # 阿里-通義
from pylmkit.llms import ChatOpenAI # OpenAImodel = ChatQianfan()
4.選擇記憶功能
PyLMKit 設(shè)計了四種記憶功能,分別如下:
- MemoryHistoryLength:記憶歷史長度,強調(diào)使用近期多長的記憶內(nèi)容;
- MemoryConversationsNumber:記憶對數(shù)數(shù),強調(diào)使用近期N組對話作為記憶的內(nèi)容;
- MemorySummary:記憶摘要,強調(diào)精簡提取記憶;
- 暫未公布
本案例使用MemoryHistoryLength
記憶功能,使得大語言模型能到根據(jù)該歷史記憶記住上下文內(nèi)容,以便連貫回答用戶的問題。(更多關(guān)于記憶的用法,可以在后續(xù)memory專題中查閱)
from pylmkit.memory import MemoryHistoryLengthmemory = MemoryHistoryLength(memory_length=500, streamlit_web=False) # 在python中運行
# memory2 = MemoryHistoryLength(memory_length=500, streamlit_web=True) # 在streamlit web中運行
5.設(shè)計角色模板
大語言模型是一種一對多
關(guān)系的模型架構(gòu),其中一
表示大語言模型,而多
表示下游任務(wù),比如寫作、客服、分析數(shù)據(jù)等這些都屬于下游任務(wù)。
因此需要我們通過設(shè)計提示詞模板去引導(dǎo)大語言模型高效且有質(zhì)量地完成指定下游任務(wù)
。
在設(shè)計角色模板之前,我們先來了解PyLMKit
中一些必須固定的關(guān)鍵詞:
- {query}:表示這是用戶輸入的提問內(nèi)容;
- {search}:表示線上實時搜索引擎搜索返回的內(nèi)容;
- {memory}:表示記憶的內(nèi)容;
- {ra}:表示知識庫搜索返回的內(nèi)容。
下面我們來看一個角色模板的例子:
# 它們所在的位置,表示它們內(nèi)容所嵌入的位置
role_template = "{memory}\n {search}\n 用戶提問:{query}"# 當(dāng)然,你還可以進一步設(shè)計模板
role_template = "歷史對話內(nèi)容:{memory}\n 搜索的相似內(nèi)容:{search} {ra}\n 請結(jié)合上述內(nèi)容回答問題:{query}"model.invoke(query="如何學(xué)習(xí)python?")
角色模板決定大語言模型回答的質(zhì)量,因此角色模板需要反復(fù)打磨,以設(shè)計一個高質(zhì)量的角色模板,對問題的解決效果可以達(dá)到事半功倍。
另外,值得注意的是,如果你設(shè)計的角色模板的關(guān)鍵詞,不在[query, search, ra, memory]
中,那么你需要額外添加新的變量和變量值,例如:
role_template = "{memory}\n 請為我推薦{query}的{topic}"# 額外的關(guān)鍵字,可以像 topic="美食" 一樣添加,多個也是一樣的步驟進行添加
model.invoke(query='北京', topic="美食")
role_template = "{memory}\n 請為我推薦{query}的{topic}"
6.加載角色扮演應(yīng)用
RolePlay角色扮演是一種基礎(chǔ)功能,也是重要的功能。現(xiàn)在在各大大模型企業(yè)的APP中可以看到很多關(guān)于短視頻文案、小紅書文案、高情商朋友圈
等這些功能的底層邏輯是基于角色扮演中設(shè)置不同的角色模板實現(xiàn)的。
from pylmkit.app import RolePlayrp = RolePlay(role_template=role_template, # 角色模板llm_model=model, # 大語言模型memory=memory, # 記憶# online_search_kwargs={},online_search_kwargs={'topk': 2, 'timeout': 20}, # 搜索引擎配置,不開啟則可以設(shè)置為 online_search_kwargs={}return_language="中文"
)
7.在python中運行
while True:query = input("User query:")topic = input("User topic:")response, refer = rp.invoke(query, topic=topic)print("\nAI:", response)print("\nRefer\n:", refer)
User query:北京
User topic:美食2023-12-02 01:28:27 - httpx - INFO - HTTP Request: POST https://duckduckgo.com "HTTP/2 200 OK"
2023-12-02 01:28:29 - httpx - INFO - HTTP Request: GET https://links.duckduckgo.com/d.js?q=%E5%8C%97%E4%BA%AC&kl=wt-wt&l=wt-wt&s=0&df=&vqd=4-45222965241755774163610013696327482249&o=json&sp=0&ex=-1 "HTTP/2 200 OK"AI: 北京有很多美食,以下是為您推薦的一些美食:1. 北京烤鴨:是北京最著名的傳統(tǒng)美食,具有獨特的皮脆肉嫩、肥而不膩的口味。2. 炸醬面:是一道非常受歡迎的主食,面條勁道,炸醬味道濃郁,可以搭配各種蔬菜和肉類。3. 炒肝:是一種傳統(tǒng)早點,主要原料是豬大腸和豬肝,口感鮮美,適合早餐食用。4. 羊肉串:是北京街頭巷尾最常見的燒烤之一,肉質(zhì)鮮嫩,味道鮮美。5. 豆汁兒:是北京傳統(tǒng)特色小吃之一,由綠豆制作而成,味道獨特,需要慢慢品嘗。6. 爆肚:是北京傳統(tǒng)小吃,口感鮮美,特別適合夏天食用。7. 涮羊肉:是一種傳統(tǒng)的火鍋美食,口感鮮美,涮出的羊肉非常嫩滑。除此之外,北京還有各種烤肉、燒麥、餃子、包子、餛飩等美食,您可以根據(jù)自己的口味選擇嘗試。Refer
: [1] **https://zh.wikipedia.org/wiki/北京市** 北京古跡眾多,著名的有紫禁城、天壇、頤和園、圓明園、北海公園等;胡同和四合院作為北京老城的典型民居形式,已經(jīng)是北京歷史重要的文化符號 。北京是中國重要的旅游城鎮(zhèn),被《米其林旅游指南》評為"三星級旅游推薦"(最高級別)目的地 。[2] **https://baike.baidu.com/item/北京市/126069** 北京市(Beijing),簡稱"京",古稱燕京、北平,中華民族的發(fā)祥地之一,是中華人民共和國首都、直轄市、國家中心城市、超大城市,國務(wù)院批復(fù)確定的中國政治中心、文化中心、國際交往中心、科技創(chuàng)新中心,中國歷史文化名城和古都之一,世界一線城市。截至2023年10月,北京市下轄16個區(qū),總 ...
在streamlit web中運行
要在終端中運行:假設(shè)你的.py
文件名為main.py
,那么在終端運行:
streamlit run main.py
# main.py
from pylmkit.core.base import BaseWebUI
from pylmkit.memory import MemoryHistoryLengthweb = BaseWebUI(language='zh') # 使用中文網(wǎng)站
memory = MemoryHistoryLength(memory_length=web.param(label="記憶長度", type='int', value=500), # 添加頁面交互參數(shù)streamlit_web=True)web.run(obj=rp.invoke,input_param=[{"name": "query", "label": "地點", "type": "chat"},{"name": "topic", "label": "主題", "type": "text"},],output_param=[{'label': '結(jié)果', 'name': 'response', 'type': 'chat'},{'label': '參考', 'name': 'refer', 'type': 'refer'}]
)