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

Ollama Python库的使用

      Ollama Python库提供了与Ollama集成的最简单方法。源码:https://github.com/ollama/ollama-python,license为MIT,最新发布版本为v0.5.3。

      通过Anaconda创建虚拟环境,依次执行如下命令:

conda create --name ollama python=3.10 -y
conda activate ollama
pip install ollama==0.5.3
pip install colorama

      在使用ollama python库前,需在本地安装Ollama,windows上安装过程参考: https://blog.csdn.net/fengbingchun/article/details/145964822 

      1. ollama.list:获取本地已下载了哪些大模型。测试代码如下:

def model_list():response = ollama.list()for model in response.models:print(f"name: {model.model}")print(f"\tsize(MB): {(model.size.real / 1024 / 1024):.2f}")if model.details:print(f"\tformat: {model.details.format}")print(f"\tfamily: {model.details.family}")print(f"\tparameter size: {model.details.parameter_size}")print(f"\tquantization level: {model.details.quantization_level}")

      执行结果如下图所示:

      2. ollama.generate:用于"一次性生成",即发送一个prompt,获取模型的回复,然后结束,无上下文记忆。测试代码如下所示:

def generate(model, prompt):try:stream = ollama.generate(model=model, prompt=prompt, stream=True)print("AI: ", end="", flush=True)for chunk in stream:if 'response' in chunk:content = chunk['response']print(content, end="", flush=True)except Exception as e:print(f"Error: {e}")

      执行结果如下图所示:

      3. ollama.chat:用于"多轮对话",支持多轮对话上下文管理。测试代码如下所示:

def chat(model, system_prompt):if system_prompt != "":messages = [{'role': 'system', 'content': system_prompt}]else:messages = []while True:user_input = input("\nYou: ").strip()if user_input.lower() in ['quit', 'exit', 'q']:breakif not user_input: # empty inputcontinuemessages.append({'role': 'user', 'content': user_input})try:stream = ollama.chat(model=model, messages=messages, stream=True)print("AI: ", end="", flush=True)assistant_reply = ""for chunk in stream:if 'message' in chunk and 'content' in chunk['message']:content = chunk['message']['content']print(content, end="", flush=True)assistant_reply += contentprint() # line breakmessages.append({'role': 'assistant', 'content': assistant_reply})except Exception as e:print(f"Error: {e}")if messages[-1]['role'] == 'user':messages.pop()

      ollama.chat中role赋不同值时的区别:

      (1).system:系统指令,定义模型(助手)的整体行为、风格或规则,设定模型身份、语气、回答方式,通常放在对话开始,但不是强制要求。

      (2).user:表示用户的输入、问题、请求或指令。

      (3).assistant(助手):表示助手(模型)发送给用户的消息,主要用于维护多轮对话的上下文,保存模型过往的回复。

      ollama.chat和ollama.generate中stream参数:默认为False

      (1).stream=False:一次性返回完整的模型输出即直到模型生成完整响应后才返回。

      (2).stream=True:模型边生成边返回,可立刻看到结果。

      执行结果如下图所示:

      4. ollama python中同步接口和异步接口:

      (1).同步接口:顺序执行,阻塞,直到ollama返回完整结果。

      (2).异步接口:并发执行,非阻塞,可同时发起多个请求。

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


文章转载自:

http://7DPERIaV.trhLb.cn
http://KhzHWJ2Q.trhLb.cn
http://Mu9GL4tk.trhLb.cn
http://dQuV8Bay.trhLb.cn
http://piAhniyQ.trhLb.cn
http://6BpLK8oK.trhLb.cn
http://rVbD8xM4.trhLb.cn
http://U5DPlt4r.trhLb.cn
http://4nCXUlGJ.trhLb.cn
http://Ff17qE98.trhLb.cn
http://HezJnsFs.trhLb.cn
http://bjWIuZWz.trhLb.cn
http://d2j6FOBW.trhLb.cn
http://dKrAXIGs.trhLb.cn
http://UVWHoU3M.trhLb.cn
http://FvGRPjqV.trhLb.cn
http://2RdTv0gJ.trhLb.cn
http://yAd9Z8mu.trhLb.cn
http://Yys9G1sP.trhLb.cn
http://ZQRt8le3.trhLb.cn
http://CW8lwcb7.trhLb.cn
http://GEYOgtHw.trhLb.cn
http://ShruUTe6.trhLb.cn
http://EUnZUZ7S.trhLb.cn
http://dOKaL3Ax.trhLb.cn
http://2iU2VUL2.trhLb.cn
http://iJRm1flL.trhLb.cn
http://Q9Ekt26I.trhLb.cn
http://oonJFSZX.trhLb.cn
http://Xn2CcNCq.trhLb.cn
http://www.dtcms.com/a/372396.html

相关文章:

  • 【数据结构入门】排序算法(3):了解快速排序
  • 运筹学——对偶问题的建模,以及它的基本性质
  • 【PyTorch】图像多分类
  • 【0基础PS】PS工具详解--渐变工具
  • FPGA数据流分析
  • 用最简单的方法讲通Java快慢指针思想
  • 棱镜的技术加持:线扫相机如何同时拍RGB和SWIR?
  • [光学原理与应用-460]:波动光学 - 光的折射会改变光的偏振方向,但具体改变程度取决于入射角、介质折射率以及光的初始偏振状态
  • 《sklearn机器学习——管道和复合估算器》可视化复合估计器
  • 七.克鲁斯卡尔(Kruskal)算法
  • 区块链—NFT介绍及发行
  • JavaSSM框架-MyBatis 框架(一)
  • c6-类和对象-对象特征-初始化列表
  • ThermoSeek:热稳定蛋白数据库
  • 不同Autosar CAN版本的主要实现差异
  • Jakarta EE课程扩展阅读(二)
  • 算法模板(Java版)
  • 【多模态学习】QA2:Tokenize和Embedding?BPE算法?交叉熵损失函数?
  • ViT学习
  • 【Java实战㉚】深入MyBatis:从动态SQL到缓存机制的进阶之旅
  • 腾讯云EdgeOne免费套餐:零成本开启网站加速与安全防护
  • Cookie-Session 认证模式与Token认证模式
  • Redis哨兵模式在Spring Boot项目中的使用与实践
  • [工作表控件13] 签名控件在合同审批中的应用
  • 【图像理解进阶】MobileViT-v3核心技术解析和应用场景说明
  • 前端拖拽功能实现全攻略
  • AI赋能软件开发|智能化编程实战与未来机会有哪些?
  • 335章:使用Scrapy框架构建分布式爬虫
  • Docker|“ssh: connect to host xxx.xxx.xxx.xxx port 8000: Connection refused“问题解决
  • OneCode 可视化揭秘系列(三):AI MCP驱动的智能工作流逻辑编排