小Tips:
“它本来就在石头中啊,我只不过是把它多余的部分给敲掉”,提示词入门是非一件轻而易举的事情,也并非是一纸文书能够给讲清晰。提示词,它本身并不创造内容,并且与不同的模型能力以及个人把控的语度和精准度相关,它能够精准地引导模型从其自身内核数据库中,剔除无关紧要的信息,凸显出最符合用户需求的核心内容。一、提示词(prompt)入门
提示词入门技巧
- 简洁性:提示词应尽量简洁明了,避免冗长和复杂的表述。简洁的提示词通常能带来更好的结果。
- 精确性:提示词应准确描述所需内容,避免歧义。明确的任务指令有助于模型更好地理解用户需求。
- 结构化:虽然不建议每个提示词都套用结构化模板,但清晰表达意图是关键。长提示词不一定比短提示词效果好。
- 迭代优化:在设计提示词时,可以先从简单的开始,逐步添加更多元素和上下文。不断迭代提示词以优化效果。
- 使用示例:通过提供示例或仿写的方式,可以帮助模型更好地理解任务要求。
提示词的应用场景
- 文本生成:提示词可以用于生成文章、故事、诗歌等文本内容。
- 问答系统:将问题作为提示词输入,AI模型会根据知识库搜索答案并生成回复。
- 图像生成:在AI绘画中,提示词用于描述想要生成的画面内容,如“一个长头发的金发女孩”。
- 多模态任务:提示词还可以用于计算机视觉、对话系统等多模态任务。
学习资源与工具
- 教程与书籍:有许多书籍和教程可以帮助初学者学习提示词的设计与应用,如《提示词工程实战》和《AI 入门:AI 提示词如何入门?》等。
- 插件与工具:一些插件可以帮助用户快速生成和优化提示词,如“sd-webui-prompt-all-in-one”翻译插件。
- 在线资源:一些网站和平台提供了丰富的提示词参考资源和生成工具。
总结
提示词是与AI模型互动的重要工具,通过学习提示词的基本概念、设计技巧和应用场景,初学者可以快速掌握如何利用AI模型完成各种任务。不断实践和优化提示词设计,将有助于提高AI交互的效率和质量。
二、提示词介绍
1. Prompt概念解析
提示词可以是一个简单的问题、一段描述、一个命令或任何形式的文本输入。其核心目的是为模型提供上下文和方向,以确保生成的内容符合用户需求。
现阶段提示词既是单一的又是多样的。其是由文本这一单一模态组成的;使用方式上既可以是系统提示词(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玩家能够更好地利用大语言模型,提升互动质量和工作效率。希望本文分享的提示词模板能为你的实际应用提供有价值的参考。
