大模型提示词(Prompt)模板推荐
只有提示词写得好,与大模型的互动才能更高效。提示词不仅仅是与AI对话的起点,更是驱动模型产生高质量输出的关键因素。本文将介绍大模型提示词的概念、意义,并分享一些实用的提示词模板,帮助AI玩家更好地利用大语言模型。
大模型提示词的介绍
提示词(Prompt),是用于大语言模型的一段引导性文字,用以触发模型生成特定方向的内容或执行专门任务。提示词的设计和质量直接影响模型输出的准确性、相关性和创造性。
1. 概念解析
提示词可以是一个简单的问题、一段描述、一个命令或任何形式的文本输入。其核心目的是为模型提供上下文和方向,以确保生成的内容符合用户需求。
现阶段提示词既是单一的又是多样的。其是由文本这一单一模态组成的;使用方式上既可以是系统提示词(System Prompt),也可以是用户提示词(User Prompt),作用过程上既可以是全过程的,也可以是阶段性的;组织形式上既可以是结构化的,也可以是非结构化的;提示类型上是多样的、没有限制的。需要注意的是,不同的模型对提示词的多样性适应程度不同,在采用模型前需查看模型信息了解模型特性。
2. 提示词的使用方式
- 系统提示词(System Prompt):全局全过程提示词,一般用在预训练的模型、基于预训练模型创建的新模型、API调用中,由模型创建者、脚本开发者或用户添加,相当于给这个新模型“下定义”。
- 用户提示词(User Prompt):一般性提示词,由用户根据实际需求在与大模型的对话中使用,也可在API调用时使用,形式和内容上可与系统提示词一样。
3. 提示词的组织形式
- 非结构化:一般性提示词,没有相应结构,可以是一句话,也可以是一段文字,还可以是一堆杂乱无章的文字片段。
- 结构化:按照一定格式组织的文字段落,有相对严谨的结构,通常以markdown形式书写,分段且带小标题,结构可复杂可简洁,架构可固定可调整。
4. 提示词的类型
提示词从表达上大体可分为以下几类:
- 指令型提示词:直接告诉模型执行某个具体任务,例如,“多个表格合并,请帮我写出python代码”“请将时间xx换算成unix时间戳”。
- 描述型提示词:提供详细背景信息,让模型在此基础上生成内容,例如,“我今天看了一部电影,电影名称是xx,电影讲述了xx,我的工作是xx,请根据以上内容为我写一篇心得体会,要求结合工作、言语凝练、感悟深刻,1000字左右”。
- 问题型提示词:以问题形式提出,要求模型回答或解释,例如,“什么是大模型提示词?”。
- 情景型提示词:设定特定场景,让模型在该场景中生成对话或故事,例如,“现在你是一名准备手术的医生,如何解释手术风险给患者?”。
提示词类型没有明确界限,往往是多种类型灵活组合。
其中,因为大模型的参数、训练数据、幻觉等各方面原因,问题型提示词可能得不到正确回答,切勿轻信;其所产生的内容要辩证看待,同一个提示词所产生的内容有时相似,有时不同,得到的代码、文章、决策有时可用,有时不可用,要注意分辨、测试。
提示词的底层应用逻辑,是在大模型配置文件中
在开源大模型社区:https://huggingface.co(镜像站:https://hf-mirror.com),查看tokenizer_config.json文件的chat_template行
或是在ollama的manifest清单中找到image.template哈希对应的blob文件,都可以找到该模型的聊天模板
以下是模型Qwen2.5-14B-Instruct的chat_template信息
"chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0]['role'] == 'system' %}\n {{- messages[0]['content'] }}\n {%- else %}\n {{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}\n {%- endif %}\n {{- \"\\n\\n# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0]['role'] == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0]['content'] + '<|im_end|>\\n' }}\n {%- else %}\n {{- '<|im_start|>system\\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- for message in messages %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) or (message.role == \"assistant\" and not message.tool_calls) %}\n {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {{- '<|im_start|>' + message.role }}\n {%- if message.content %}\n {{- '\\n' + message.content }}\n {%- endif %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {{- tool_call.arguments | tojson }}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- message.content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}\n"
可以看到,该模型指定,如果用户未给出系统提示词,则默认以'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.'
作为系统提示词,系统提示词在对话模板中的位置是放在最前面的。不同模型的chat_template可能会有所不同,但系统提示词一般是在靠前位置。
用好大模型提示词的意义
1. 提高输出质量
精准的提示词能够显著提高模型输出的质量,避免冗长、无关或模糊的回答。例如,精准提示词可以帮助模型理解更具体、更细致的需求,从而生成更贴近用户意图的内容。
2. 增强互动体验
好的提示词设计可以使与大语言模型的互动更加流畅和富有成效,提升用户体验。例如,通过引导性提问和指令,可以让互动变得更加有条理和富有逻辑性。
3. 节省时间和精力
通过有效的提示词,用户可以更快速地获得所需信息或完成特定任务,减少反复试错的时间和精力投入。
大模型提示词开源模板推荐
1. 非结构化提示词
awesome-chatgpt-prompts-zh: ChatGPT 中文调教指南。各种场景使用指南。学习怎么让它听你的话。
https://github.com/PlexPt/awesome-chatgpt-prompts-zh
awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.
https://github.com/f/awesome-chatgpt-prompts
2. 结构化提示词
LangGPT: LangGPT: Empowering everyone to become a prompt expert!🚀 Structured Prompt,Language of GPT, 结构化提示词,结构化Prompt
https://github.com/langgptai/LangGPT
其中LangGPT目录下含“Prompt工程师”用于辅助用户按固定结构生成prompt的提示词示例
3. 提示工程指南
提示工程指南 | Prompt Engineering Guide
https://www.promptingguide.ai/zh
在大语言模型的应用中,提示词的设计至关重要。通过理解提示词的概念和意义,并运用有效的提示词模板,AI玩家能够更好地利用大语言模型,提升互动质量和工作效率。希望本文分享的提示词模板能为你的实际应用提供有价值的参考。