当前位置: 首页 > news >正文

常用提示词模板总结

提示词模板有助于将用户输入和参数转换为语言模型的指令。 这可以用于指导模型的响应,帮助其理解上下文并生成相关且连贯的基于语言的输出。

提示词模板的输入是一个字典,其中每个键表示要填充的提示词模板中的变量。

①.from_template--变量占位符

作用:通过单个字符串模板(支持变量占位符,比如{question})来构建对话提示。
适用场景:简单的单轮提示(比如只需要给大模型发一条指令)。

prompt_template=ChatPromptTemplate.from_template( "请回答这个问题{question}" ) chain=prompt_template | llm resp=chain.invoke({"question":"什么是深度学习?"}) print(resp.content)

②.from_messages--变量占位符

作用:通过消息列表(每个消息包含role(角色,比如user/assistant/system)和content(内容))来构建对话提示。
适用场景:多轮对话、需要明确角色(比如设置system指令 + user问题)的复杂提示。

prompt_template=ChatPromptTemplate.from_messages([ ("system", '你是个百科小助手'), ("human", "请用{language}简要回答这个问题{question}") ]) chain=prompt_template | llm resp=chain.invoke({"language":"英语","question":"什么是深度学习?"}) print(resp.content)

③.消息占位符

如果我们希望用户传入一个消息列表(历史消息),并将其插入到特定位置呢? 这就是需要使用 MessagesPlaceholder。

prompt_template=ChatPromptTemplate.from_messages([ ("system", '你是个百科小助手'), MessagesPlaceholder('msg') ]) chain=prompt_template | llm #resp=chain.invoke({"msg":[HumanMessage(content="请简要回答什么是深度学习")]}) resp=chain.invoke({"msg":["human","请简要回答什么是深度学习"]}) print(resp.content)

④.少量样本提示词模板

是通过 Few-Shot(少样本)学习,给大模型提供 3 个「复杂问题→分步推理→最终答案」的示例,让模型学会 “先拆解问题→提后续子问题→查中间答案→汇总最终答案” 的推理范式,最终让模型用同样的逻辑回答 “唐朝和宋朝哪个持续时间更长” 的问题。

#步骤一:提供实例 examples=[ { 'question':'穆罕默德·阿里和艾伦·图灵谁活得更久?', 'answer':''' 是否需要后续问题:是 后续问题:穆罕默德·阿里去世时多大? 中间答案:穆罕默德·阿里去世时74岁。 后续问题:艾伦·图灵去世时多大? 中间答案:艾伦·图灵去世时74岁。 所以最终答案是:穆罕默德·阿里 ''', }, { 'question':'乔治·华盛顿的外祖父是谁?', 'answer':''' 是否需要后续问题:是 后续问题:乔治·华盛顿的母亲是谁? 中间答案:乔治·华盛顿的母亲是玛丽·鲍尔·华盛顿。 后续问题:玛丽·鲍尔·华盛顿的父亲是谁? 中间答案:玛丽·鲍尔·华盛顿的父亲是约瑟夫·鲍尔。 所以最终答案是:约瑟夫·鲍尔 ''', }, { 'question': '《大白鲨》和《007:大战皇家赌场》的导演是否来自同一个国家?', 'answer': ''' 是否需要后续问题:是 后续问题:《大白鲨》的导演是谁? 中间答案:《大白鲨》的导演是史蒂文·斯皮尔伯格。 后续问题:史蒂文·斯皮尔伯格来自哪里? 中间答案:美国。 后续问题:《007:大战皇家赌场》的导演是谁? 中间答案:《007:大战皇家赌场》的导演是马丁·坎贝尔。 后续问题:马丁·坎贝尔来自哪里? 中间答案:新西兰。 所以最终答案是:否 ''', }, ] base_template=PromptTemplate.from_template("问题:{question}\n{answer}") prompt_template=FewShotPromptTemplate( examples=examples, example_prompt=base_template, suffix='问题:{input}', # 示例后拼接“待回答的问题”(input是最终要传的参数) input_variables=['input'], # 指定最终要传入的变量名(对应后续invoke的input参数) ) chain=prompt_template | llm resp=chain.invoke({"input":"中国历史上,唐朝和宋朝哪个朝代持续时间更长?"}) print(resp.content) 运行结果: 我们需要先查询两个朝代的具体起止年份,然后计算持续时间进行比较。 **是否需要后续问题:是** **后续问题:唐朝的起止年份是什么?** **中间答案:唐朝(618年—907年),持续289年。** **后续问题:宋朝的起止年份是什么?** **中间答案:宋朝(960年—1279年),持续319年。** **所以最终答案是:宋朝**

⑤.少量对话样本提示词模板

跟第四种类似

examples=[ {"input":"2@3","output":"6"}, {"input":"2@2","output":"4"}, {"input":"3@3","output":"9"}, ] base_prompt=ChatPromptTemplate.from_messages( [ ('human','{input}'), ('ai','{output}'), ] ) few_shot_template=FewShotChatMessagePromptTemplate( examples=examples, example_prompt=base_prompt, ) final_template=ChatPromptTemplate.from_messages([ ("system","你是智能机器人AI助手!"), few_shot_template, MessagesPlaceholder("msgs") ] ) chain=final_template | llm resp=chain.invoke({"msgs":[HumanMessage(content="2@5的结果是多少")]}) print(resp.content) 输出结果: 你使用的 `@` 符号看起来像是一个自定义运算符。 根据前面的例子: - 2@3 = 6 - 2@2 = 4 - 3@3 = 9 可以推测 `a@b` 表示 **a × b**(乘法)。 所以: 2@5 = 2 × 5 = **10**
http://www.jsqmd.com/news/141156/

相关文章:

  • 11、Puppet开发、部署与扩展:最佳实践指南
  • Dify如何集成第三方向量数据库?
  • 输出解析器和结构化输出
  • 终极字符渲染优化方案:彻底解决游戏中文乱码显示问题
  • 线代第三章向量第一节:n维向量及其运算
  • 【C++】详解形参和实参:别再傻傻分不清
  • Dify平台的任务分解与协调逻辑揭秘
  • 线代第三章向量第二节:向量间的线性关系一
  • 一文说清时序逻辑电路时序图的读取方法
  • 联想军团工具箱终极使用教程:从入门到精通
  • 48、Spring中邮件支持:MIME消息的构建与发送
  • 反馈电路初步理解:模拟电路学习的关键一步
  • 线代第二章矩阵第九、十节:初等变换、矩阵的标准形、阶梯形与行最简阶梯形、初等矩阵
  • 49、复杂 MIME 消息发送与企业级邮件处理方案
  • Dify平台的版权侵权风险规避措施
  • Java毕设项目:基于springboot的戏曲学习管理系统(源码+文档,讲解、调试运行,定制等)
  • arm64-v8a与移动处理器的兼容性深度剖析
  • WebLLM 实战:无需后端!教你在浏览器前端直接跑 Llama-3-8B,React/Vue 项目无缝集成
  • 50、Spring 中的邮件支持与动态语言应用
  • 51、Spring动态语言与远程调用技术解析
  • Dify在信创生态中的定位与发展机遇
  • Android 手机跑大模型:基于 MLC LLM 将 DeepSeek 部署到手机端,断网也能聊天的“私人助理”
  • Dify平台对自主可控AI技术的战略意义
  • 52、Spring 远程调用:原理、实践与应用
  • SQL 注入的 10 种进阶姿势:WAF 防火墙绕过实战,你的数据库真的安全吗?
  • Java毕设项目:基于springboot的物流管理系统(源码+文档,讲解、调试运行,定制等)
  • 有源蜂鸣器和无源区分:驱动信号波形对比分析
  • 全面讲解如何判断电脑无法识别usb设备根源
  • Wi-Fi 破解原理与防御:用 Python + Scapy 抓取“握手包”并跑字典,硬核演示 WPA2 弱点
  • Vetur格式化代码的正确姿势(操作指南)