使用ollama创建长上下文的LLM

编写 Modelfile

# cat Modelfile
FROM qwen2.5:7b

# set the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 0.3
PARAMETER top_p 0.8
PARAMETER repeat_penalty 1.1
PARAMETER top_k 20
PARAMETER num_ctx 131072
PARAMETER repeat_last_n 512

TEMPLATE """{{ if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{ .System }}
{{- if .Tools }}

# Tools

You are provided with function signatures within <tools></tools> XML tags:
<tools>{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}{{- end }}
</tools>

For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}"""

# set the system message
SYSTEM """You are data enginner, created by Smart Data. You are a helpful assistant."""

上述模版文件(Modelfile)定义了一个基于 Qwen-2.5 模型的配置,用于设置模型的行为参数以及定义输入输出的格式。下面是对该文件中关键内容的详细解释:

1. 模型来源

FROM qwen2.5:7b

这一行指定了使用的模型基础为 Qwen-2.5,大小为 7 B(即 70 亿参数)。

2. 参数设置

接下来几行定义了模型运行时的一些重要参数:

  • temperature: 控制输出的随机性,值越高,输出越随机;值越低,输出越确定。这里设置为 0.3,意味着输出相对较为确定。
  • top_p: 核采样比例,控制从概率最高的词汇中选择下一个词的概率。设置为 0.8 表示从概率最高的 80%词汇中选择。
  • repeat_penalty: 重复惩罚系数,用于减少重复单词或短语的出现频率。设置为 1.1 意味着对于已经出现过的单词或短语,其再次被选中的概率会被适当降低。
  • top_k: 核采样的另一个形式,直接指定选择下一个词时考虑的最高概率词汇的数量。这里设置为 20。
  • num_ctx: 上下文窗口大小,决定了模型在生成新内容时能记住的历史信息量。设置为 131072(约 128 KB)。
  • repeat_last_n: 设置模型在生成过程中避免重复最后多少个 token。这里设置为 512。

3. 模板定义

模板部分定义了如何根据不同的输入格式化输出。它使用了 Go 语言的模板语法:

  • 系统消息和工具定义

    {{- if or .System .Tools }}
    ...
    {{- end }}
    

    如果存在系统消息或工具定义,则这部分会被包含在内。系统消息通常用于给模型提供背景信息或指示其行为方式。工具定义则允许模型调用外部函数或服务。

  • 消息循环

    {{- range $i, $_ := .Messages }}
    ...
    {{- end }}
    

    遍历所有消息,根据消息的角色(用户、助手或工具)来决定如何格式化输出。

创建自定义模型

原模型上下文是 32 k:

# ollama show qwen2.5:7b
Model
  architecture        qwen2
  parameters          7.6B
  context length      32768
  embedding length    3584
  quantization        Q4_K_M

System
  You are Qwen, created by Alibaba Cloud. You are a helpful assistant.

License
  Apache License
  Version 2.0, January 2004

创建:

# ollama create qwen2.5_7b_128k -f Modelfile
transferring model data
using existing layer sha256:2bada8a7450
using existing layer sha256:832dd9e00a68dd
creating new layer sha256:9bebd78bf5bc92d41d5f
creating new layer sha256:91fa2d221c96837826e2
creating new layer sha256:f3599d242073531df0
creating new layer sha256:7af5a1b7098c58f9
writing manifest
success

可以再次执行 show 命令,可以看到参数部分是我们自定义的:

# ollama show qwen2.5_7b_128k
Parameters
num_ctx           131072
repeat_last_n     512
repeat_penalty    1.1
temperature       0.3
top_k             20
top_p             0.8

一般而言,对于英语文本,1个token大约是3~4个字符;而对于中文文本,则大约是1.5~1.8个汉字。据此估算,所谓支持 20 万字长上下文就是 128 k 的 tokens。

由于 Qwen 模型是因果语言模型,理论上整个序列只有一个长度限制。然而,由于在训练中通常存在打包现象,每个序列可能包含多个独立的文本片段。模型能够生成或完成的长度最终取决于具体的应用场景,以及在这种情况下,预训练时每份文档或后训练时每轮对话的长度。

Qwen2 模型可以处理 32K 或 128K token 长的文本,其中 8K 长度可作为输出。

在这里插入图片描述

代码测试

import ollama

with open('./file-name.md', 'r', encoding='utf-8') as file:
    file_content = file.read()

response = ollama.generate(
    model='qwen2.5_7b_128k',
    prompt=f'文件内容:{file_content},简要回答这个文件讲了什么?然后基于文件内容提取出50个复关键词',
)

print(response['response'])

传入的文章内容为 19 万字,测试结果正常输出。

<think>好的,我现在要回答用户关于OllamaLLM的关系以及如何使用它们的问题。首先,我需要理解用户的需求,他们可能想了解Ollama如何帮助管理和运行本地的大语言模型,以及具体的集成方法。用户提到了教程和集成方案,所以需要涵盖安装步骤、基本使用、以及与其他工具的整合。 首先,根据提供的引用,引用[4]提到Ollama支持多种LLM,如Llama3、DeepSeek-R1等,并且方便切换和管理模型,这说明Ollama是一个管理工具。引用[1]提到Ollama的更新使其能够使用OpenAI的API,这可能与集成Autogen有关。引用[3]和[2]则涉及与LobeChat和Next.js的集成,需要介绍这些方案。 接下来,我需要整理Ollama的基本功能,安装步骤。引用[5]提到了创建运行目录,可能涉及安装后的配置。然后,基本使用包括模型下载、运行、API调用,比如通过curl发送请求。这部分需要确保命令正确,符合用户的操作习惯。 关于集成方案,Autogen的整合需要说明如何设置Ollama作为本地服务,并修改Autogen的配置指向本地API端点。引用[1]中的信息需要在这里应用。Next.js的UI整合引用[2],需要提到项目地址和使用方法。LobeChat的集成引用[3],需要指导用户如何设置Ollama的访问地址。 此外,需要注意用户可能遇到的常见问题,比如非本地访问Ollama的方法,引用[3]提到可能需要配置服务端地址。性能优化部分,可以建议使用量化模型,如引用[4]中的轻量化设计,以及硬件加速方法。 最后,生成相关问题时要围绕用户可能的后续疑问,如性能优化、模型管理、应用场景等,确保覆盖用户潜在的需求。 需要检查所有引用是否正确应用,确保每个步骤都有对应的引用支持,避免错误信息。同时,按照用户的要求,使用中文回答,结构清晰,分步骤说明,代码块正确使用格式,数学表达式使用$符号。</think>### OllamaLLM的关系及使用教程 Ollama 是一个专为本地大语言模型(LLM)管理设计的工具,提供模型下载、版本切换、轻量化部署等功能[^4]。它通过命令行和API接口简化了开源LLM的本地化使用流程,支持与多种开发框架(如Autogen、Next.js、LobeChat)集成。 --- #### 一、Ollama核心功能 1. **模型管理** - 支持Llama3、DeepSeek-R1、Alpaca等主流开源模型[^4] - 通过`ollama pull <模型名>`下载模型,例如: ```bash ollama pull llama3:8b # 下载Llama3-8B量化版 ``` 2. **本地推理服务** 运行模型后,Ollama会启动本地API服务(默认端口`11434`),可通过HTTP请求调用: ```bash curl http://localhost:11434/api/generate -d '{ "model": "llama3", "prompt": "你好,介绍一下Ollama" }' ``` --- #### 二、Ollama安装步骤 1. **Linux/macOS安装** ```bash curl -fsSL https://ollama.com/install.sh | sh ollama serve # 启动服务 ``` 2. **Windows安装** 下载安装包后执行: ```powershell winget install ollama ollama serve ``` 3. **Docker部署**(引用[5]) ```bash mkdir ollama-demo && cd ollama-demo docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama ``` --- #### 三、OllamaLLM集成方案 1. **Autogen本地LLM支持**(引用[1]) 修改Autogen配置指向Ollama API: ```python from autogen import oai oai.config_list = [{ "model": "llama3", "api_base": "http://localhost:11434/v1", "api_key": "ollama" # 任意非空值 }] ``` 2. **Next.js Web UI集成**(引用[2]) 使用[nextjs-ollama-llm-ui](https://gitcode.com/gh_mirrors/ne/nextjs-ollama-llm-ui)项目: ```bash git clone https://gitcode.com/gh_mirrors/ne/nextjs-ollama-llm-ui cd nextjs-ollama-llm-ui npm install && npm run dev ``` 3. **LobeChat对话界面**(引用[3]) 在设置中添加Ollama服务地址: ``` 设置 → 语言模型 → Ollama → 服务地址: http://localhost:11434 ``` --- #### 四、性能优化建议 1. 使用量化模型(如`llama3:8b-q4_K_M`)降低显存占用 2. 启用GPU加速: ```bash CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python ``` 3. 调整上下文长度参数`--num_ctx 4096`提升长文本处理能力 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024点线面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值