python调用ollama库详解

2201_75335496 2024-10-07 09:35:00 阅读 72

0 准备

1)准备Ollama软件(注意:两个不是同一个东西)

详见上次的文章 Ollama通过gguf文件加载AI模型(补充:关于Ollama加载AI模型的补充)

2)准备ollama库

如果您还未安装ollama库,请使用pip安装:

<code>pip install ollama

#1 ollama库的基本使用

import ollama

# 普通输出(请先按照准备工作中的要求安装模型)

back = ollama.chat(model="你的模型名称",messages=[{"role": "user","content": "生成一句简短的话"}],code>

stream = False, # 是否流式输出)

print(back)

#流式输出

back = ollama.chat(model="你的模型名称",messages=[{"role": "user","content": "生成一句简短的话"}],code>

stream = True, # 是否流式输出)

for i in back:

print(back,end = "")

#2 ollama库的进阶使用

1)options参数设置

import ollama

back = ollama.chat(model="你的模型名称",messages=[{"role": "user","content": "生成一句简短的话"}],code>

options = {"temperature":1145141919810, # 模型温度

"num_ctx":4096 # 返回的最大token数

} # ...

stream = True, # 是否流式输出)

for i in back:

print(back,end = "")

参数 默认值 解释
num_keep 5 保留的上下文数量。
seed 42 随机数生成器的种子,用于控制随机性。
num_predict -1 预测的单词数量。(此处已修改,原先的默认值100是不对的!)
top_k 20 从概率分布中选择最高概率的前k个候选项。
top_p 0.9 从概率分布中选择累积概率达到阈值p的候选项。
min_p 0.0 最低概率阈值,低于此阈值的候选项将被忽略。
tfs_z 0.5 温度缩放因子,用于调整概率分布的形状。
typical_p 0.7 典型性惩罚系数,用于调整概率分布的形状。
repeat_last_n 33 重复最后n个词的概率。
temperature 0.8 温度参数,用于调整概率分布的形状。
repeat_penalty 1.2 重复惩罚系数,用于调整重复词的概率。
presence_penalty 1.5 存在惩罚系数,用于调整已出现的词的概率。
frequency_penalty 1.0 频率惩罚系数,用于调整频繁出现的词的概率。
mirostat 1 Mirostat算法的启用状态(0表示禁用,1表示启用)。
mirostat_tau 0.8 Mirostat算法的温度参数。
mirostat_eta 0.6 Mirostat算法的学习率参数。
penalize_newline True 是否对换行符进行惩罚。
stop [" ", "user:"] 停止生成的条件列表。
numa False 是否启用NUMA(非一致性内存访问)优化。
num_ctx 1024 上下文的最大长度。
num_batch 2 批处理大小。
num_gpu 1 使用的GPU数量。
main_gpu 0 主GPU的索引。
low_vram False 是否启用低显存模式。
f16_kv True 是否使用半精度浮点数存储键值对。
vocab_only False 是否仅加载词汇表,不加载模型权重。
use_mmap True 是否使用内存映射文件。
use_mlock False 是否锁定内存以防止交换。
num_thread 8 使用的线程数量。

20240829:

        终于找到了官方释义:docs/modelfile.md 的 ·OLLAMA/OLLAMA - Gitee.com

2)返回的json对象处理

返回的json对象在没有问题的情况下应该是类似这种结构的:

1.无流式输出:

<code>{

"model": "qwen_q2",

"created_at": "2024-08-26T04:36:19.6943135Z",

"response": "请问你有什么需要帮助的吗?",

"done": true,

"context": [1, 2, 3],

"total_duration": 5043500667,

"load_duration": 5025959,

"prompt_eval_count": 26,

"prompt_eval_duration": 325953000,

"eval_count": 290,

"eval_duration": 4709213000

}

2.流式输出(过程中)

{

'model': 'qwen_q2',

'created_at': '2024-08-26T04:40:30.6774372Z',

'message':

{

'role': 'assistant',

'content': '我的'

},

'done': False

}

3.流式输出(输出完毕的最后一个)

{

'model': 'qwen_q2',

'created_at': '2024-08-26T04:44:04.4184675Z',

'message':

{

'role': 'assistant',

'content': ''

},

'done_reason': 'stop',

'done': True,

'total_duration': 13224925100,

'load_duration': 298635100,

'prompt_eval_count': 16,

'prompt_eval_duration': 4843681000,

'eval_count': 11,

'eval_duration': 8048190000

}

可以根据"done"的内容判断输出是否完成。

流式输出时可以在每次获得输出时记录时间,以计算实时响应速度。

不使用流式输出和使用流式输出时都可以在输出完毕后通过  'eval_count' 和 'eval_duration' 参数来计算这次对话中的平均响应速度(token/s)


制作不易,感谢大家的支持!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。