ollama修改模型问答的上下文长度(num_ctx)

news2024/9/22 18:56:49

文章目录

    • 一劳永逸版:修改模型参数
    • 临时抱佛脚之命令行生效
    • 临时抱佛脚之API生效
    • 没啥卵用之OpenAI API传参
    • 没啥卵用之OpenAI 问答传参

在使用ollama做大模型问答的过程中,发现存在着当输入问题过长之后,模型无法回答的问题。经过查询资料,这与一个叫做num_ctx的参数有关,它用来控制对话上下文的长度,在大模型动辄支持32k上下文的当下,ollama居然丧心病狂地把这个参数默认设成了2048也就是2.048k,真是叔可忍婶不可忍!

下面记录一下在尝试解决这个问题的过程中,最终成功的几种方法和失败的种种方案。

一劳永逸版:修改模型参数

ollama的每个模型都有个配置文件,这里需要在原基础上生成一个新的配置文件,再根据这个配置文件去生成新的模型,以qwen2为例走一遍流程。
首先获取qwen2的配置文件:

ollama show --modelfile qwen2 > Modelfile

此时本地多了一个Modelfile文件,直接打开。其内容是这样的:

# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM qwen2:latest

FROM /usr/share/ollama/.ollama/models/blobs/sha256-43f7a214e5329f672bb05404cfba1913cbb70fdaa1a17497224e1925046b0ed5
TEMPLATE "{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ .Response }}<|im_end|>
"
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>

按照提示修改成这样:

# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM qwen2:latest

FROM qwen2:latest
PARAMETER num_ctx 32000
TEMPLATE "{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ .Response }}<|im_end|>
"
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>
...

然后根据这个配置文件生成新的qwen2:ctx32k模型:

ollama create -f Modelfile qwen2:ctx32k

在这里插入图片描述
尝试查看模型参数:

ollama show qwen2:ctx32k

在这里插入图片描述

临时抱佛脚之命令行生效

这个很简单,直接在命令行中输入/set parameter num_ctx 32000,但是缺点是只能在命令行中生效,通过API调用是无效的,下次从命令行再启动也是要重新输的。
在这里插入图片描述

临时抱佛脚之API生效

通过API访问ollama时,传入num_ctx=32000这个参数来指定上下文长度,函数示例如下。

	def chat(self, messages :str, history:list[dict]=[], **kwargs):
        url = "http://{}:{}/api/chat".format(self.host, self.port)
        data = {
            "model": self.model_name,
            "messages": history+[
                {
                    "role": "user",
                    "content": messages
                }
            ],
            "stream": False,
            "options": {
            "num_ctx": 32000, 
            "temperature": 0.9
         },
            # "format": "json",
            "keep_alive": self.keep_alive
        }
        data.update(kwargs)
        response = requests.post(url, json=data, stream=False)
        response.raise_for_status()
        json_data = json.loads(response.text)
        return json_data["message"]

没啥卵用之OpenAI API传参

由于项目是基于OpenaiAPI的,所以不能直接向上面发送请求,而是要先封装成下面这种形式:

	model = ChatOpenAI(
        streaming=streaming,
        verbose=verbose,
        callbacks=callbacks,
        openai_api_key=config.get("api_key", "EMPTY"),
        openai_api_base=config.get("api_base_url", fschat_openai_api_address()),
        model_name=model_name,
        temperature=temperature,
        max_tokens=max_tokens,
        openai_proxy=config.get("openai_proxy"),
        **kwargs
    )

我尝试在里面再加入num_ctx=32000这个参数,直接报了无法解析的错误,失败。

没啥卵用之OpenAI 问答传参

因为不知道/set parameter num_ctx 32000这句话只能在命令行中生效,因此我尝试通过model.predict()model.invoke()去传入这句话去修改参数,也失败了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做一个图片马(图片木马)的四种方法 小白也能看会(详细步骤 ) 需要.htaccess等执行图片内代码

简介 图片马:就是在图片中隐藏一句话木马。利用.htaccess等解析图片为PHP或者asp文件。达到执行图片内代码目的 4种制作方法: 文本方式打开,末尾粘贴一句话木马 cmd中 copy 1.jpg/b2.php 3.jpg 16进制打开图片在末尾添加一句话木马。 ps 注意以下几点: 单纯的图片马并不…

TCP/IP_TCP协议

目录 一、TCP协议 1.1 确认应答 1.2 超时重传 1.3 连接管理 1.4 TCP状态 1.5 滑动窗口 1.6 流量控制 1.7 拥塞控制 1.8 延迟应答 1.9 捎带应答 1.10 粘包问题 1.11 异常情况 二、TCP/UDP对比 总结 一、TCP协议 TCP 协议和 UDP 协议是处于传输层的协议。 【TCP协…

WEB服务器的详解与部署

WEB服务器也称为网页服务器或HTTP服务器 WEB服务器使用的协议是HTTP或HTTPS HTTP协议默认端口号&#xff1a;TCP 80 HTTPS协议默认端口号&#xff1a;TCP 443 浏览器其实就是 HTTP 客户端 WEB服务器发布软件 微软&#xff1a;IIS(可以发布web网站和FTP站点)linux&#x…

Java:多线程(进程线程、线程状态、创建线程、线程操作)

1&#xff0c;线程概述 1.1&#xff0c;进程和线程 并发是指系统能够同时处理多个任务或操作&#xff0c;通常通过在单个处理器或多个处理器之间快速切换上下文来实现。这些任务可能不是同时进行的&#xff0c;但是它们在时间上重叠。 并行是指系统同时执行多个任务或操作&…

tkinter绘制组件(42)——工具栏按钮组件

tkinter绘制组件&#xff08;42&#xff09;——工具栏按钮组件 引言布局函数结构背景板创建按钮移动背景板完整代码函数 效果测试代码最终效果 github项目pip下载结语 引言 在TinUI中&#xff0c;并不存在工具栏这个概念&#xff0c;但是可以通过使用BasicTinUI控件&#xff…

第二证券:港股交易规则有哪些?

港股的生意规矩&#xff1a; 1、港股生意时间&#xff1a;港股商场的生意时间分为上午和下午两个时段&#xff0c;上午的生意时间通常是9:30至12:00&#xff0c;而下午的生意时间则是13:00至16:00。需求留心的是&#xff0c;港股在周末及法定节假日会休市&#xff0c;此外恶劣…

ECC加密算法:一种高效且安全的加密技术

ECC&#xff08;Elliptic Curve Cryptography&#xff09;&#xff0c;即椭圆曲线密码算法&#xff0c;是一种基于椭圆曲线数学理论的公钥加密算法。自1985年由Neal Koblitz和Victor S. Miller分别独立提出以来&#xff0c;ECC凭借其独特的数学原理和高效的性能&#xff0c;逐渐…

【数据结构】大根堆和小根堆

大根堆实现逻辑 从整棵树的最后一颗子树开始调整&#xff0c;每次都让根节点和左右孩子去比较&#xff0c;如果根节点比左右孩子的最大值要小&#xff0c;那么就将这两个值进行交换&#xff0c;然后此时这颗子树变成了大根堆&#xff0c;再看下一颗树 然后对下一颗树进行相同…

【大模型框架】【基本结构】transformer

论文地址:https://arxiv.org/pdf/1706.03762 1. 整体结构 2. 内部结构 3. 公式 Transformer工作原理四部曲:Embedding(向量化)、Attention(注意力机制)、MLPs(多层感知机)和Unembedding(模型输出)。

域名过期了网站还能访问吗?怎么查询域名过期?

在当今数字化的时代&#xff0c;网站已经成为企业、个人展示形象和提供服务的重要窗口。而域名作为网站的标识&#xff0c;其重要性不言而喻。然而&#xff0c;域名是有一定有效期的&#xff0c;那么当域名过期了&#xff0c;网站还能访问吗&#xff1f;又该如何查询域名的过期…

Mysql的事务隔离级别实现原理

一、事务隔离级别 mysql支持四种事务隔离级别&#xff1a; 读未提交&#xff1a;一个事务可以读取到另一个事务还未提交的数据&#xff1b;读已提交&#xff1a;一个事务可以读取到另一个事务已经提交的数据&#xff1b;可重复读&#xff1a;同一个事务中&#xff0c;无论读取…

【C语言】数组和函数实践:扫雷游戏

扫雷游戏 1. 扫雷游戏分析和设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 ⽂件结构设计 2. 扫雷游戏的代码实现&#xff08;1&#xff09;菜单menu函数&#xff08;2&#xff09;设计main函数&#xff08;3&#xff09;设计game函数&#xff08;4…

免费分享:2013中国沙漠(沙地)分布数据集(附下载方法)

沙漠是指地面完全被沙所覆盖、植物非常稀少、雨水稀少、空气干燥的荒芜地区。沙漠亦作“沙幕”&#xff0c;干旱缺水&#xff0c;植物稀少的地区&#xff0c;通常为风成地貌。中国是世界上沙漠面积较大、分布较广、沙漠化危害严重的国家之一&#xff0c;因此我国十分注重防沙治…

发布Meta Segment Anything Model 2 (SAM 2):开启图像和视频分割的新时代

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

DiffusionModel-latent diffusion,VAE,U-Net,Text-encoder

Diffusers StableDdiffusion Latent Diffusion 稳定扩散&#xff08;Stable Diffusion&#xff09;模型中使用的三个关键组件&#xff1a;自编码器&#xff08;VAE&#xff09;、U-Net和文本编码器&#xff08;Text-encoder&#xff09; 由于潜在扩散模型的U-Net操作在低维空…

掌握FluentResults:.NET中优雅处理结果与错误

在.NET开发中&#xff0c;结果和错误处理是构建健壯应用程序的关键部分。FluentResults是一个.NET库&#xff0c;它提供了一种优雅的方式来处理操作结果和错误。它允许开发者以声明性和链式调用的方式构建结果对象&#xff0c;使得代码更加清晰和易于维护。本文将介绍FluentRes…

云原生大数据平台KDP,实战疑难问题解答

智领云的KDP&#xff08;Kubernetes Data Platform&#xff09;是一款自主研发的容器化云原生大数据平台&#xff0c;它是市场上首个能够完全在Kubernetes上部署的大数据平台。KDP深度整合了云原生架构的优势&#xff0c;解决了传统Hadoop大数据平台在架构限制、部署、运维、运…

ctfshow~菜狗杯 flag一分为二

第一步&#xff1a;解压附件得到miku.png文件 第二步&#xff1a;修改图片高度出现一半的flag 第三步&#xff1a;使用盲水印提取工具得到另一半工具 ctfshow{FirstPRTSecondPrTMikumiku~}

认识systemctl

1: 概述 systemctl命令可以帮助systemd管理和维护所有服务,系统启动完成后,systemctl命令会向systemd发送消息进行服务启动和停止等操作,想知道为什么systemctl命令可以向systemd传递消息吗,其实它是通过一个叫D_Bus(desktop bus)桌面总线的东西实现这一点,它可以并行的处理多…