Ollama模板全解析:从基础语法到高级应用实战

图片

Ollama模板全解析

本文来自「大千AI助手」技术实战系列,专注用真话讲技术,拒绝过度包装。

往期文章推荐:

什么是Ollama模板?

Ollama模板是控制AI模型输入输出格式的核心配置,它决定了:

  1. 1. 如何将用户输入、系统指令和对话历史组织成模型能理解的格式

  2. 2. 模型响应后如何结构化输出结果

  3. 3. 多轮对话中消息的排列和组织方式

为什么需要关注模板?

  • • 效果差异:同样的模型,不同模板可能导致完全不同的输出质量

  • • 场景适配:对话、工具调用、长文本处理等不同场景需要不同模板

  • • 性能影响:合理的模板能减少不必要的token消耗

核心特点

  • • 基于Go模板语法

  • • 支持条件判断、循环等逻辑控制

  • • 可访问完整的对话上下文信息


ollama模板简介

  • • ollama是go实现的,模板是需要满足go的模板格式

默认模板

  • • 导入到ollama中的模型如果没有设置模板则使用默认的模板{{ .Prompt }}

模型模板

  • • 模型的模板可以通过命令ollama show --template <model-name>查看

    • • 实例 - ollama show --template llava:7b

      • • 结果 - [INST] {{ if .System }}{{ .System }} {{ end }}{{ .Prompt }} [/INST]

  • • 修改模型的模板

    • • 可以在ollama create新建模型时在Modelfile中通过TEMPLATE命令修改模型的模板信息

      • • 实例

FROM llama3.2

TEMPLATE """{{- if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>
{{- end }}
{{- range .Messages }}<|start_header_id|>{{ .Role }}<|end_header_id|>

{{ .Content }}<|eot_id|>
{{- end }}<|start_header_id|>assistant<|end_header_id|>

"""

ollama中模板语法

  • • ollama是go实现的,模板需要满足go的模板格式

变量替换

  • • {{ .System }}引用变量System的值,比jinja2多一个点.

循环遍历

  • • 遍历列表,并访问属性 - {{- range .Messages }} {{ .Content }} {{ end }}

条件判断

  • • 取值相等判断 - {{- if eq .Role "user" }} 123 {{- end }}

  • • 条件与判断 - {{- if and (eq 1 1) $.System}} {{ $.System }} {{ else if eq 1 1 }} {{ .Content }} {{- end }}

主要变量

  • • {{ .System }} - 系统提示

  • • {{ .Prompt }} - 用户输入的提示或问题

  • • {{ .Response }} - 模型生成的响应字符串

  • • {{ .Suffix }} - 追加到模型生成的响应字符串后的字符串

  • • {{ .Messages }} - 消息列表(每个元素都是一个字典)

    • • {{ .Messages[].Role }} - 该条消息来源的角色类型(system, user, assistant, tool)

      • • 通常会被替换为<|System|>、<|User|>、<|Assistant|>、<|Tool|>,后边紧跟对应的文本字符串

      • • system - 用来定义系统的行为、指令或上下文设置,主要用来提供模型的初始指令,定义对话的规则或格式或者提供背景信息或上下文

      • • user - 表示用户的输入或问题

      • • assistant - 表示模型的响应或输出,主要在多轮对话中使用

      • • tool - 表示外部工具或插件的调用结果,比如函数调用、插件系统等外部工具

    • • {{ .Messages[].Content }} - 消息内容字符串

    • • {{ .Messages[].ToolCalls }} - 模型可以调用的工具列表

      • • {{ .Messages[].ToolCalls[].Function }} - 函数对象

      • • {{ .Messages[].ToolCalls[].Function.Name }} - 函数名

      • • {{ .Messages[].ToolCalls[].Function.Arguments }} - 函数参数字典(参数名:参数值)

  • • {{ .Tools }} - 模型可以访问的工具列表

    • • {{ .Tools[].Type }} - 类型名称(取值function)

    • • {{ .Tools[].Function }} - 函数对象

      • • {{ .Tools[].Function.Name }} - 函数名

      • • {{ .Tools[].Function.Description }} - 函数描述

      • • {{ .Tools[].Function.Parameters }} - 函数参数对象

        • • {{ .Tools[].Function.Parameters.Type }} - 函数参数类型(取值object)

        • • {{ .Tools[].Function.Parameters.Required }} - 函数必须的properties列表

        • • {{ .Tools[].Function.Parameters.Properties }} - property名到property定义的字典

          • • {{ .Tools[].Function.Parameters.Properties[].Type }} - property类型

          • • {{ .Tools[].Function.Parameters.Properties[].Description }} - property描述

          • • {{ .Tools[].Function.Parameters.Properties[].Enum }} - 有效值的列表

  • • {{ .Time }} - 时间戳或时间相关信息

  • • {{ .Model }} - 模型名称或版本信息

实际应用案例

构建自定义对话模板

FROM llama3.2
TEMPLATE """[系统指令]{{ .System }}[结束指令]
[用户问题]{{ .Prompt }}[结束问题]
[AI回答]"""

参考

Ollama模板全解析:从基础语法到高级应用实战

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值