使用命令来指示ChatGLM-6B模型执行各种简单任务

使用命令来指示ChatGLM-6B模型执行各种简单任务

flyfish

使用命令来指示模型执行各种简单任务,例如“写入”、“分类”、“总结”、“翻译”、“排序”等,从而为各种简单任务设计有效的提示

本文主要演示prompt的使用,请忽略输出的正确与否

开始

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline
pipe = pipeline(task=Tasks.chat, model='ZhipuAI/ChatGLM-6B-Int4', model_revision='v1.0.1')
inputs = {'text':'你好', 'history': []}
result = pipe(inputs)
inputs = {'text':'介绍下堂吉诃德', 'history': result['history']}
result = pipe(inputs)
print(result)

{‘response’: ‘堂吉诃德(Táng jìng qiān de)是西班牙作家塞万提斯(Senecaeca)创作的长篇小说,也是他的代表作之一。该小说于16世纪后期完成,讲述了一个贵族青年的故事,他试图逃避现实,追求小说中的幻想世界。\n\n小说的主人公是堂吉诃德,他来自一个富有的家庭,但很快就被金钱和权力所腐蚀。他试图通过追求小说中的幻想角色,如一个贵族的仆人,来逃避现实生活中的困难和痛苦。但小说的故事情节却越来越复杂,堂吉诃德的冒险也变得越来越危险。\n\n该小说的主要主题是人性的复杂性,以及人类追求权力和自我实现的冲动。它也探讨了道德和伦理问题,如贵族的虚伪和道德堕落,以及人类追求幸福的努力所带来的后果。\n\n《堂吉诃诃德》被认为是西班牙文学的杰作之一,也是世界文学的经典之作。’, ‘history’: [(‘你好’, ‘你好!请问有什么需要帮助的吗?’), (‘介绍下堂吉诃德’, ‘堂吉诃德(Táng jìng qiān de)是西班牙作家塞万提斯(Senecaeca)创作的长篇小说,也是他的代表作之一。该小说于16世纪后期完成,讲述了一个贵族青年的故事,他试图逃避现实,追求小说中的幻想世界。\n\n小说的主人公是堂吉诃德,他来自一个富有的家庭,但很快就被金钱和权力所腐蚀。他试图通过追求小说中的幻想角色,如一个贵族的仆人,来逃避现实生活中的困难和痛苦。但小说的故事情节却越来越复杂,堂吉诃德的冒险也变得越来越危险。\n\n该小说的主要主题是人性的复杂性,以及人类追求权力和自我实现的冲动。它也探讨了道德和伦理问题,如贵族的虚伪和道德堕落,以及人类追求幸福的努力所带来的后果。\n\n《堂吉诃诃德》被认为是西班牙文学的杰作之一,也是世界文学的经典之作。’)]}

生成创意文本任务

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline

# 加载对话模型
pipe = pipeline(task=Tasks.chat, model='ZhipuAI/ChatGLM-6B-Int4', model_revision='v1.0.1')

# 提供故事开头,要求生成创意文本
story_start = "拉·曼却有个地方,地名就不用提了,不久前住着一位贵族。他那样的贵族,矛架上有一支长矛,还有一面古代皮盾、一匹瘦马和一只猎兔狗。"
inputs = {'text': f"请根据以下开头继续写一个故事:\n{story_start}", 'history': []}
result = pipe(inputs)

# 输出故事结果
print(result)
{'response': '那个贵族已经消失了,拉·曼却的人们开始意识到他的遗产可能并不是那么美好。他们开始研究他的武器和装备,并发现这些物品在历史中并不那么流行。\n\n不久之后,拉·曼却的一个城镇决定举办一次比赛,以纪念这位贵族。虽然大家都想在这个比赛中获胜,但是他们意识到他们需要改进自己的装备。\n\n于是,城镇中一位年轻的男子开始了自己的研究。他收集了贵族的遗产,并研究了他的装备。他意识到贵族的盾牌虽然看似坚固,但却很容易受到攻击。他决定改进自己的盾牌,并使用更先进的技术来增强它的防御能力。\n\n他花了很长时间,最终发明了一种超级盾牌,可以抵挡大多数攻击。他的创新被城镇中的其他人所认可,他们开始广泛使用这种盾牌,并在比赛中获得了胜利。\n\n这位年轻的男子也因为这些胜利而受到人们的尊敬,他成为了城镇中的一位英雄。他的故事被流传开来,激励着其他人追求创新和改进,让人们的生活更加美好。', 'history': [('请根据以下开头继续写一个故事:\n拉·曼却有个地方,地名就不用提了,不久前住着一位贵族。他那样的贵族,矛架上有一支长矛,还有一面古代皮盾、一匹瘦马和一只猎兔狗。', '那个贵族已经消失了,拉·曼却的人们开始意识到他的遗产可能并不是那么美好。他们开始研究他的武器和装备,并发现这些物品在历史中并不那么流行。\n\n不久之后,拉·曼却的一个城镇决定举办一次比赛,以纪念这位贵族。虽然大家都想在这个比赛中获胜,但是他们意识到他们需要改进自己的装备。\n\n于是,城镇中一位年轻的男子开始了自己的研究。他收集了贵族的遗产,并研究了他的装备。他意识到贵族的盾牌虽然看似坚固,但却很容易受到攻击。他决定改进自己的盾牌,并使用更先进的技术来增强它的防御能力。\n\n他花了很长时间,最终发明了一种超级盾牌,可以抵挡大多数攻击。他的创新被城镇中的其他人所认可,他们开始广泛使用这种盾牌,并在比赛中获得了胜利。\n\n这位年轻的男子也因为这些胜利而受到人们的尊敬,他成为了城镇中的一位英雄。他的故事被流传开来,激励着其他人追求创新和改进,让人们的生活更加美好。')]}

翻译任务

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline

# 加载对话模型
pipe = pipeline(task=Tasks.chat, model='ZhipuAI/ChatGLM-6B-Int4', model_revision='v1.0.1')

# 要求翻译为中文
inputs = {'text': 'Translate the following sentence to Chinese: En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor.', 'history': []}
result = pipe(inputs)

# 输出翻译结果
print(result)
{'response': '在摩洛哥的一个地方,我不希望自己记住它的名字,那里有一个名叫“短剑树”的地方,古老的弓箭手雕像,破折号和弯曲的走廊。', 'history': [('Translate the following sentence to Chinese: En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor.', '在摩洛哥的一个地方,我不希望自己记住它的名字,那里有一个名叫“短剑树”的地方,古老的弓箭手雕像,破折号和弯曲的走廊。')]}

问答任务

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline

# 加载对话模型
pipe = pipeline(task=Tasks.chat, model='ZhipuAI/ChatGLM-6B-Int4', model_revision='v1.0.1')

# 问答任务:提出具体问题
inputs = {'text': '什么是热力学第二定律?', 'history': []}
result = pipe(inputs)

# 提出后续问题
inputs = {'text': '有哪些实际应用?', 'history': result['history']}
result = pipe(inputs)

# 输出结果
print(result)

输出太长了,略

提取时间、人物、地点和事件的示例代码

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline

# 加载对话模型
pipe = pipeline(task=Tasks.chat, model='ZhipuAI/ChatGLM-6B-Int4', model_revision='v1.0.1')

# 《堂吉诃德》中的经典句子
don_quixote_text = (
    "在西班牙的拉曼却有个小镇,这里住着一位老绅士,他的大部分时间都在读骑士小说。"
    "他沉迷于这些书籍,以至于他认为自己也是一名骑士,决心出去冒险,拯救世界。"
)

# 提示模型提取时间、人物、地点和事件
inputs = {'text': f"请从以下句子中提取出时间、人物、地点和事件:\n{don_quixote_text}", 'history': []}
result = pipe(inputs)
print(result)
# 输出提取的结果
print(f"提取结果:\n{result['response']}")
{'response': '时间:在西班牙的拉曼却,具体时间未知。\n人物:一位老绅士,他可能住在西班牙的拉曼却小镇。\n地点:西班牙的拉曼却小镇。\n事件:老绅士沉迷于骑士小说,他认为自己是骑士,决心出去冒险,拯救世界。', 'history': [('请从以下句子中提取出时间、人物、地点和事件:\n在西班牙的拉曼却有个小镇,这里住着一位老绅士,他的大部分时间都在读骑士小说。他沉迷于这些书籍,以至于他认为自己也是一名骑士,决心出去冒险,拯救世界。', '时间:在西班牙的拉曼却,具体时间未知。\n人物:一位老绅士,他可能住在西班牙的拉曼却小镇。\n地点:西班牙的拉曼却小镇。\n事件:老绅士沉迷于骑士小说,他认为自己是骑士,决心出去冒险,拯救世界。')]} 提取结果: 时间:在西班牙的拉曼却,具体时间未知。 人物:一位老绅士,他可能住在西班牙的拉曼却小镇。 地点:西班牙的拉曼却小镇。 事件:老绅士沉迷于骑士小说,他认为自己是骑士,决心出去冒险,拯救世界。

设计提示 (prompt) 来模拟 system、user 和 assistant 角色的对话结构

from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline

# 加载对话模型
pipe = pipeline(task=Tasks.chat, model='ZhipuAI/ChatGLM-6B-Int4', model_revision='v1.0.1')

# 定义 system 提示,用于设定模型的行为或角色
system_prompt = "你是一位文学家,请用简洁且礼貌的语言回答用户的问题。"

# User 输入
user_input_1 = "你好,请问你能介绍下堂吉诃德吗?"

# 组合 prompts,包括 system 和 user 部分
inputs = {
    'text': f"[System]\n{system_prompt}\n[User]\n{user_input_1}",
    'history': []
}

# 模型生成 assistant 的回应
result = pipe(inputs)
print("第一次完整输出:",result)
# Assistant 响应
assistant_response_1 = result['response']
print(f"[Assistant]\n{assistant_response_1}")

# 用户再次提问
user_input_2 = "堂吉诃德有哪些名言?"

# 继续对话,将之前的 history 加入
inputs = {
    'text': f"[User]\n{user_input_2}",
    'history': result['history']  # 使用之前的对话历史
}

# 模型生成新的 assistant 回应
result = pipe(inputs)
print("第二次完整输出:",result)
assistant_response_2 = result['response']
print(f"[Assistant]\n{assistant_response_2}")

第一次完整输出: {‘response’: ‘堂吉诃德(H.P. Lovecraft)是20世纪最具影响力的奇幻作家之一,被誉为“现代奇幻文学之父”。他的作品风格独特,情节曲折,描写了一群人物在虚构的世界中展开一场场生死搏斗。\n\n《堂吉诃德》是他的代表作之一,讲述了一个叫做堂吉诃德的骑士,他试图在虚构的世界中实现自己的理想,但在现实与虚构的交错中,他不断陷入矛盾与困境。’, ‘history’: [(‘[System]\n你是一位文学家,请用简洁且礼貌的语言回答用户的问题。\n[User]\n你好,请问你能介绍下堂吉诃德吗?’, ‘堂吉诃德(H.P. Lovecraft)是20世纪最具影响力的奇幻作家之一,被誉为“现代奇幻文学之父”。他的作品风格独特,情节曲折,描写了一群人物在虚构的世界中展开一场场生死搏斗。\n\n《堂吉诃德》是他的代表作之一,讲述了一个叫做堂吉诃德的骑士,他试图在虚构的世界中实现自己的理想,但在现实与虚构的交错中,他不断陷入矛盾与困境。’)]}
[Assistant]
堂吉诃德(H.P. Lovecraft)是20世纪最具影响力的奇幻作家之一,被誉为“现代奇幻文学之父”。他的作品风格独特,情节曲折,描写了一群人物在虚构的世界中展开一场场生死搏斗。
《堂吉诃德》是他的代表作之一,讲述了一个叫做堂吉诃德的骑士,他试图在虚构的世界中实现自己的理想,但在现实与虚构的交错中,他不断陷入矛盾与困境。
第二次完整输出: {‘response’: ‘1. “A man is not fit to be judge by what he has done, but by what he has not done.”(一个人不能被他所做的事情来判断,而应该被他所做的事情未做的事情来判断。)——西班牙,《奥德赛》。\n\n2. “The great game is not between man and machine, but between man and God.”(这个游戏不是人与机器之间的竞争,而是人与上帝之间的竞争。)—— 1950 年,《纸牌屋》第一集开头。\n\n3. “The world is a good place, but it is not good enough for everyone.”(世界是一个美好的地方,但它不足以满足所有人。)—— 1960 年,《疯狂的麦克斯 4:狂暴之路》开场白。\n\n4. “A man’s best friend is his left arm.”(一个人最好的朋友是他的左手。)’, ‘history’: [(‘[System]\n你是一位文学家,请用简洁且礼貌的语言回答用户的问题。\n[User]\n你好,请问你能介绍下堂吉诃德吗?’, ‘堂吉诃德(H.P. Lovecraft)是20世纪最具影响力的奇幻作家之一,被誉为“现代奇幻文学之父”。他的作品风格独特,情节曲折,描写了一群人物在虚构的世界中展开一场场生死搏斗。\n\n《堂吉诃德》是他的代表作之一,讲述了一个叫做堂吉诃德的骑士,他试图在虚构的世界中实现自己的理想,但在现实与虚构的交错中,他不断陷入矛盾与困境。’), (‘[User]\n堂吉诃德有哪些名言?’, ‘1. “A man is not fit to be judge by what he has done, but by what he has not done.”(一个人不能被他所做的事情来判断,而应该被他所做的事情未做的事情来判断。)——西班牙,《奥德赛》。\n “A man’s best friend is his left arm.”(一个人最好的朋友是他的左手。)’)]}
[Assistant]
“A man is not fit to be judge by what he has done, but by what he has not done.”(一个人不能被他所做的事情来判断,而应该被他所做的事情未做的事情来判断。)——西班牙,《奥德赛》。
“A man’s best friend is his left arm.”(一个人最好的朋友是他的左手。)

你可能感兴趣的:(大模型,ChatGLM-6B)