PyLMKit(3):基于角色扮演的应用案例

2024-03-21 09:30

本文主要是介绍PyLMKit(3):基于角色扮演的应用案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

角色扮演应用案例RolePlay

0.项目信息

  • 日期: 2023-12-2
  • 作者:小知
  • 课题: 通过设置角色模板并结合在线搜索、记忆和知识库功能,实现典型的对话应用功能。这个功能是大模型应用的基础功能,在后续其它RAG等功能中都会用到这个功能。
  • 功能与作用:RolePlay角色扮演是一种基础功能,也是重要的功能。现在在各大大模型企业的APP中可以看到很多关于短视频文案、小红书文案、高情商朋友圈等这些功能的底层逻辑是基于角色扮演中设置不同的角色模板实现的。
  • GitHub:https://github.com/52phm/pylmkit
  • PyLMKit官网教程
    • PyLMKit应用(online application)
    • English document
    • 中文文档

PyLMKit RolePlay
在这里插入图片描述

1.下载安装

# 下载安装
pip install pylmkit -U --user

2.设置API KEY

应用哪个大模型,就提前设置好该大模型对应的 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文件中批量加载设置好的API KEY,加载方法如下:

from dotenv import load_dotenv# load .env
load_dotenv()

3.加载大语言模型

导入大语言模型,在本案例中使用百度千帆大模型作为例子进行介绍。

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 设计了四种记忆功能,分别如下:

  • MemoryHistoryLength:记忆历史长度,强调使用近期多长的记忆内容;
  • MemoryConversationsNumber:记忆对数数,强调使用近期N组对话作为记忆的内容;
  • MemorySummary:记忆摘要,强调精简提取记忆;
  • 暂未公布

本案例使用MemoryHistoryLength记忆功能,使得大语言模型能到根据该历史记忆记住上下文内容,以便连贯回答用户的问题。(更多关于记忆的用法,可以在后续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.设计角色模板

大语言模型是一种一对多关系的模型架构,其中表示大语言模型,而表示下游任务,比如写作、客服、分析数据等这些都属于下游任务。
因此需要我们通过设计提示词模板去引导大语言模型高效且有质量地完成指定下游任务

在设计角色模板之前,我们先来了解PyLMKit中一些必须固定的关键词:

  • {query}:表示这是用户输入的提问内容;
  • {search}:表示线上实时搜索引擎搜索返回的内容;
  • {memory}:表示记忆的内容;
  • {ra}:表示知识库搜索返回的内容。

下面我们来看一个角色模板的例子:

# 它们所在的位置,表示它们内容所嵌入的位置
role_template = "{memory}\n {search}\n 用户提问:{query}"# 当然,你还可以进一步设计模板
role_template = "历史对话内容:{memory}\n 搜索的相似内容:{search} {ra}\n 请结合上述内容回答问题:{query}"model.invoke(query="如何学习python?")

角色模板决定大语言模型回答的质量,因此角色模板需要反复打磨,以设计一个高质量的角色模板,对问题的解决效果可以达到事半功倍。

另外,值得注意的是,如果你设计的角色模板的关键词,不在[query, search, ra, memory]中,那么你需要额外添加新的变量和变量值,例如:

role_template = "{memory}\n 请为我推荐{query}的{topic}"# 额外的关键字,可以像 topic="美食" 一样添加,多个也是一样的步骤进行添加
model.invoke(query='北京', topic="美食")
role_template = "{memory}\n 请为我推荐{query}的{topic}"

6.加载角色扮演应用

RolePlay角色扮演是一种基础功能,也是重要的功能。现在在各大大模型企业的APP中可以看到很多关于短视频文案、小红书文案、高情商朋友圈等这些功能的底层逻辑是基于角色扮演中设置不同的角色模板实现的。

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},  # 搜索引擎配置,不开启则可以设置为 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. 北京烤鸭:是北京最著名的传统美食,具有独特的皮脆肉嫩、肥而不腻的口味。2. 炸酱面:是一道非常受欢迎的主食,面条劲道,炸酱味道浓郁,可以搭配各种蔬菜和肉类。3. 炒肝:是一种传统早点,主要原料是猪大肠和猪肝,口感鲜美,适合早餐食用。4. 羊肉串:是北京街头巷尾最常见的烧烤之一,肉质鲜嫩,味道鲜美。5. 豆汁儿:是北京传统特色小吃之一,由绿豆制作而成,味道独特,需要慢慢品尝。6. 爆肚:是北京传统小吃,口感鲜美,特别适合夏天食用。7. 涮羊肉:是一种传统的火锅美食,口感鲜美,涮出的羊肉非常嫩滑。除此之外,北京还有各种烤肉、烧麦、饺子、包子、馄饨等美食,您可以根据自己的口味选择尝试。Refer
: [1] **https://zh.wikipedia.org/wiki/北京市**  北京古迹众多,著名的有紫禁城、天坛、颐和园、圆明园、北海公园等;胡同和四合院作为北京老城的典型民居形式,已经是北京历史重要的文化符号 。北京是中国重要的旅游城镇,被《米其林旅游指南》评为"三星级旅游推荐"(最高级别)目的地 。[2] **https://baike.baidu.com/item/北京市/126069**  北京市(Beijing),简称"京",古称燕京、北平,中华民族的发祥地之一,是中华人民共和国首都、直辖市、国家中心城市、超大城市,国务院批复确定的中国政治中心、文化中心、国际交往中心、科技创新中心,中国历史文化名城和古都之一,世界一线城市。截至2023年10月,北京市下辖16个区,总 ...

8.在streamlit web中运行

要在终端中运行:假设你的.py文件名为main.py,那么在终端运行:

streamlit run main.py

main.py

# main.py
# main.py
from pylmkit import BaseWebUI
from dotenv import load_dotenv
from pylmkit.app import RolePlay
from pylmkit.llms import ChatOpenAI
from pylmkit.memory import MemoryHistoryLength
from pylmkit.llms import ChatQianfanload_dotenv()
web = BaseWebUI(language='zh')  # 中文网站model = ChatQianfan(model="ERNIE-Bot-turbo")
memory = MemoryHistoryLength(memory_length=web.param(label="记忆长度", type='int', value=500),  # 添加页面交互参数streamlit_web=True)
role_template = "{memory}\n 请为我推荐{query}的{topic}"
rp = RolePlay(role_template=role_template,  # 角色模板llm_model=model,  # 大语言模型memory=memory,  # 记忆# online_search_kwargs={},online_search_kwargs={'topk': 2, 'timeout': 20},  # 搜索引擎配置,不开启则可以设置为 online_search_kwargs={}return_language="中文"
)web.run(obj=rp.invoke,input_param=[{"name": "query", "label": "地点", "type": "chat"},{"name": "topic", "label": "主题", "type": "text"},],output_param=[{'label': '结果', 'name': 'response', 'type': 'chat'},{'label': '参考', 'name': 'refer', 'type': 'refer'}]
)

页面效果如下:
在这里插入图片描述


9.GitHub项目地址

觉得不错,可以帮忙点个 star 哦

GitHub - 52phm/pylmkit: pylmkit: Help users quickly build practical large model applications!





这篇关于PyLMKit(3):基于角色扮演的应用案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832333

相关文章

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用。如果你看不懂,请留言。 完整代码: <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><ti

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述。以下是从不同角度对气象站的种类和应用范围的介绍: 一、气象站的种类 根据用途和安装环境分类: 农业气象站:专为农业生产服务,监测土壤温度、湿度等参数,为农业生产提供科学依据。交通气象站:用于公路、铁路、机场等交通场所的气象监测,提供实时气象数据以支持交通运营和调度。林业气象站:监测林区风速、湿度、温度等气象要素,为林区保护和

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

哺乳细胞重组表达人鼠嵌合抗体:制备与应用

重组抗体是一类具有广泛应用价值的蛋白质,在药物研发和生物医学研究中发挥着重要作用。本文将介绍重组抗体的表达方式,重点关注嵌合抗体制备和哺乳细胞重组表达人鼠嵌合抗体的技术原理和应用。 重组抗体表达的原理和方法 重组抗体表达是通过将人或动物源的免疫球蛋白基因导入表达宿主细胞,并使其表达出特异性抗体蛋白质。常用的表达系统包括细菌、哺乳细胞和真核微生物等。 嵌合抗体制备的步骤和优势 选择适当的抗原

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

【Qt6.3 基础教程 16】 掌握Qt中的时间和日期:QTimer和QDateTime的高效应用

文章目录 前言QTimer:定时任务的强大工具QTimer的基本用法高级特性:单次定时器 QDateTime:处理日期和时间获取当前日期和时间日期和时间的格式化输出日期和时间计算 用例:创建一个倒计时应用结论 前言 在开发桌面应用程序时,处理时间和日期是一个常见且重要的任务。Qt框架提供了强大的工具来处理与时间相关的功能,其中QTimer和QDateTime是最核心的类。本

基于Spring Boot的企业级应用架构设计

基于Spring Boot的企业级应用架构设计 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我想和大家分享一下基于Spring Boot的企业级应用架构设计,希望对大家有所帮助。 一、Spring Boot概述 Spring Boot是由Pivotal团队提供的全新框架,它简化了Spring应用程序的创建和开发过程。

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读