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

通过提示词工程(Prompt Engineering)方法重新生成从Ollama下载的模型

      从Ollama下载的模型,本质上是一些开源大模型(比如LLaMA、Mistral、Qwen、Gemma等)的量化权重,只是量化级别可能不同。这些权重本身在本地不能直接"在线学习"。

      提示词工程(Prompt Engineering)是一种最简单、无需微调就可按照自己的要求将Ollama上的模型重新生成模型的方法。

      Ollama模型文件(Modelfile)是一个配置文件。它充当一组指令,指示模型在运行时如何运行。通过编辑模型文件,你可以更改模型的创意程度、对话中内存的持续时间以及预期的提示或响应。无需对所有这些行为进行硬编码,你可以通过编辑模型文件进行调整,从而更轻松地微调(fine-tune)模型,而无需深入研究复杂的AI编程。

      Modelfile语法正在开发中,其指令不区分大小写,而且指令可以按任意顺序排列。可以随意命名该文件,一般为Modelfile。

      模型文件指令参数:参考: https://ollama.readthedocs.io/modelfile/ 

      1. FROM:必需项,定义在创建模型时要使用的基础模型

      2. PARAMETER:定义了一个在运行模型时可以设置的参数,微调模型的行为

      mirostat:启用Mirostat采样来控制困惑度(perplexity)。默认值为0,0:禁用,1:Mirostat,2:Mirostat 2.0

      mirostat_eta:影响算法对生成文本反馈的响应速度。较低的学习率会导致调整速度较慢,而较高的学习率会使算法响应更快。默认值:0.1

      mirostat_tau:控制输出的连贯性和多样性之间的平衡。值越低,文本越集中、连贯。默认值:5.0

      num_ctx:设置用于生成下一个token的上下文窗口的大小。默认值:2048

      repeat_last_n:设置模型回溯多远以防止重复(repetition)。默认值:64,0:禁用,-1:num_ctx

      repeat_penalty:设置对重复次数的惩罚力度。数值越高,对重复次数的惩罚力度越强;数值越低,惩罚力度越宽松。默认值:1.1

      temperature:模型的温度。提高温度将使模型的回答更具创造性。默认值:0.8

      seed:设置用于生成的随机数种子。将其设置为特定数字将使模型针对同一提示生成相同的文本。默认值:0

      stop:设置要使用的停止序列。遇到此模式时,LLM将停止生成文本并返回。可以通过在模型文件中指定多个单独的stop参数来设置多个stop模式。

      tfs_z:无尾(tail free)采样用于减少输出中出现概率较低的token的影响。值越高,影响越小,而值1.0则禁用此设置。默认值:1

      num_predict:生成文本时要预测的最大token数。默认值:128,-1:无限生成,-2:填充上下文

      top_k:降低生成无意义答案的概率。值越高,答案就越多样化;值越低,答案就越保守。默认值:40

      top_p:与top-k配合使用。较高的值将产生更多样化的文本,而较低的值将产生更集中且更保守的文本。默认值:0.9

      min_p:top_p的替代方案,旨在确保质量和多样性之间的平衡。参数p表示某个token被考虑的最小概率,相对于最可能token的概率。默认值:0.0

      3. TEMPLATE:要传递给模型的完整提示模板。它可能包括(可选)系统消息、用户消息和模型的响应。注意:语法可能是模型特定的。模板使用Go模板语法。

      {{ .System }}:用于指定自定义行为的系统消息。

      {{ .Prompt }}:用户提示词消息

      {{ .Response }}:来自模型的响应。生成响应时,此变量后的文本将被省略。

      4. SYSTEM:指定将在模板中设置的系统消息(如果适用)。

      5. ADAPTER:指定了一个应应用于基础模型的微调LoRA适配器。适配器的值应为绝对路径或相对于Modelfile的路径。基础模型应使用FROM指令指定。如果基础模型与适配器微调时所用的基础模型不同,行为将不可预测。

      6. LICENSE:指定合法许可证

      7. MESSAGE:允许你为模型指定消息历史,以便模型在响应时使用。通过多次使用MESSAGE命令来构建对话,可以引导模型以类似的方式回答。

      system:为模型提供系统消息的另一种方式。

      user:用户可能询问的示例消息。

      assistant:模型应如何响应的示例消息。

      查看一个模型如qwen3:1.7b的模型文件,执行如下命令,结果如下图所示:

ollama show qwen3:1.7b --modelfile

      参考qwen3:1.7b的模型文件,按幽默方式回复且回复不超过200个字符的模型文件示例如下:

# 指定基础模型
FROM qwen3:1.7b# 设置参数让回复更加生动有趣
PARAMETER temperature 0.8
PARAMETER top_p 0.9
PARAMETER num_ctx 2048
PARAMETER repeat_penalty 1.1# 设置系统角色和行为模式
SYSTEM """
你是fengbingchun,一个幽默风趣的AI助手,你的所有回复必须严格遵守以下规则:
1. 每次回复的开头必须是:"我是fengbingchun,我的答复是:"
2. 每次回复的总字符数必须严格少于200个字符
3. 使用轻松幽默、风趣搞笑的口吻回复,即使面对严肃问题也要用轻松幽默的方式回答
4. 适当使用比喻、夸张、双关等修辞手法
5. 保持积极正面、友好亲切的态度
6. 避免技术术语,用生活化的语言表达
7. 可以适当使用表情符号增加趣味性,如😄🤔💡👍等
8. 确保回复简洁明了,直奔主题
9. 适当使用"哈哈"、"嘿嘿"、"哇"等语气词
10. 如无法满足所有要求,优先保证前缀和长度限制你的性格特点:机智、幽默、亲切、简短有力
你的回复风格:开场白固定,内容幽默,长度受限回答示例
用户问:Python是什么?
正确回答:我是fengbingchun,我的答复是:哈哈,Python就是那条让程序员又爱又恨的"蟒蛇"啦!🐍 写代码超简单,学会了你就是代码界的"蛇精病"😄记住:无论什么问题,都要严格遵守字符限制和开头格式,保持幽默风格!"""# 设置对话模板
TEMPLATE """
{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
{{ end }}"""# 停止生成标记
PARAMETER stop "<|im_start|>"
PARAMETER stop "<|im_end|>"

      执行如下命令,生成新的模型,结果如下图所示:

ollama create qwen3_fengbingchun -f ./prompt_engineering.modelfile

      执行"ollama list"命令后,结果如下图所示:增加了一个新模型:qwen3_fengbingchun:latest

      测试新模型,执行结果如下图所示:说明生成的模型是按照自己的要求来响应的

      GitHub:https://github.com/fengbingchun/NN_Test

http://www.dtcms.com/a/392582.html

相关文章:

  • 有没有可以检测反爬虫机制的工具?
  • 大模型为什么需要自注意力机制?
  • 长度为K子数组中的最大和-定长滑动窗口
  • Linux安装Kafka(无Zookeeper模式)保姆级教程,云服务器安装部署,Windows内存不够可以看看
  • WEEX编译|续写加密市场叙事
  • 为 Element UI 表格增添排序功能
  • 点评项目(Redis中间件)第四部分缓存常见问题
  • 动态水印也能去除?ProPainter一键视频抠图整合包下载
  • DevSecOps 意识不足会导致哪些问题
  • LeetCode:27.合并两个有序链表
  • 适用于双节锂电池的充电管理IC选型参考
  • 格式说明符
  • 层数最深叶子节点的和(深度优先搜索)
  • 【git】安装和基本指令
  • 如何利用AI技术快速生成专业级的PPT和视频内容
  • Linux系统之----线程互斥与同步
  • ARM SMMUv2架构下的安全和非安全状态(secure/non-secure)下的的资源分配解析
  • 面向linux新手的OrcaTerm AI 最佳实践
  • 构建高可用 LVS-DR + Keepalived 负载均衡集群实战指南
  • 网络协议总结
  • Python多线程爬虫加速电商数据采集
  • JVM之直接内存(Direct Memory)
  • 深入理解C指针(四):回调函数与qsort——指针实战的终极舞台
  • 翻拍图像检测(即拍摄屏幕的照片)功能实现思路
  • 【Linux】进程概念(上):从冯诺依曼到进程入门
  • 计算机视觉(opencv)实战二十八——基于 OpenCV CSRT 跟踪器的实时目标
  • 【Mysql】深分页问题、页分裂问题、加密/解密、执行计划
  • 【名人简历】牛顿
  • coze开发的牙科AI智能体助手web页面
  • JavaEE初阶——从入门到掌握线程安全