所有文章 > 创新的API案例 > Python与Ollama的开发案例
Python与Ollama的开发案例

Python与Ollama的开发案例

Ollama 可以轻松地将本地LLMs集成到您的 Python 项目中,只有几行代码。本指南将为您介绍安装,基本命令和两个实际用例:构建聊天机器人和自动化工作流程。最后,您将知道如何设置 Ollama,生成文本,甚至创建一个调用现实世界功能的 AI 代理。

Ollama 的概述

Ollama 是一种开源工具,可以轻松在本地计算机上运行大型语言模型(LLMs)。它的目的是简化开源LLMs(例如 Llama 2,Mistral,Falcon 等)而没有复杂的设置。 Ollama 提供了一个用户友好的平台,该平台将模型权重,配置甚至数据集捆绑到每个型号的统一软件包(由 Modelfile 管理)中。从本质上讲,它与 AI 型号的 Docker 类似 – 您可以拉动预先构建的型号软件包,并以最小的麻烦在本地运行它们。 Ollama 的关键功能包括一个现成的模型库,简单的命令行接口(CLI)和 REST API,以及对自定义的支持(您甚至可以创建自己的模型软件包)。这使开发人员能够在他们的控制下完全离线利用强大的LLMs。

使用 Ollama 的好处

开发人员为什么要使用 Ollama?使用 Ollama 在本地运行LLMs提供了几个优点,尤其是在效率 灵活性可伸缩性方面:

效率(速度和成本) :通过对本地硬件进行推断,Ollama 消除了网络延迟,可以为LLM查询提供更快的响应。无需将数据发送给外部服务器,这不仅可以加快交互加快交互作用,还可以削减成本 – 您避免支付云 API 使用或订阅费用。 Ollama 已针对资源使用优化(例如,通过引擎盖下的 Llama.cpp ),可以快速,轻巧执行 CPU 或 GPU 上的模型。简而言之,由于您利用自己的机器资源,因此您会获得低延迟的性能和成本效益的 AI。

灵活性与控制 :Ollama 使您可以完全控制模型和数据。您可以根据需要从各种开源型号或微调和交换型号中进行选择。因为一切都在本地运行,因此可以确保数据隐私 – 敏感信息永远不会离开您的机器,这是医疗保健,金融或其他数据敏感域的重要好处。您还可以将 Ollama 与其他工具和框架集成(例如,将其与 Tensorflow,Pytorch 或 Langchain 一起使用)将其适合您现有的工作流程。这意味着开发人员可以自定义LLM如何操作,定义特殊的系统提示或规则,甚至使用插件或功能扩展模型的功能(正如我们稍后会看到的)。结果是针对项目需求量身定制的高度适应性设置。

可伸缩性 :即使 Ollama 在本地机器上运行,它的设计旨在扩展您的要求。随着需求的增长,您可以在多台机器(或容器)上升级硬件或部署 Ollama 来处理更大的型号或更高的负载。对第三方服务的限制不依赖 – 您可以通过提取功能更强大的型号(从 7B 参数到 70B 或更多)或并行运行多个模型实例来扩展。 Ollama 的有效本地部署也可以用于云或本地服务器中,以进行企业扩展。实际上,可以将 Ollama 集成到 Kubernetes 或服务器群集中,以获得您控制的可靠,可扩展的 AI 解决方案(某些社区项目甚至探索用于群集部署的“ Ollama Cloud”)。此灵活性意味着您可以启动小小并扩展LLM的功能应用程序,而无需完全更改堆栈。

总而言之,奥拉马(Ollama)的本地优先方法提供了增强的隐私 ,没有反复出现的 API 费,并且可以进行实验或自定义的自由。这些好处使其成为希望在应用程序中有效,可靠地合并 AI 功能的开发人员的吸引人选择。

Ollama入门

Ollama 入门涉及两个部分:安装 Ollama 引擎(运行型号)并设置 Python 库与它接口。

Ollama(发动机/CLI)的安装: Ollama 支持 MacOS,Linux 和 Windows。对于 MacOS 和 Linux,安装很简单。您可以从官方的 Ollama 网站下载安装程序,也可以使用单行外壳命令。例如,在 MacOS 上,您可以使用 Homebrew 或 Linux 运行提供的脚本:

# On macOS (using Homebrew):
brew install ollama

# On Linux (using the official install script):
curl -sS https://ollama.ai/install.sh | bash

这将安装 Ollama CLI。安装后,启动 Ollama 服务(在 MacOS 上,您可能会运行 Brew Services Start Ollama Ollama,或者简单地运行任何 Ollama 命令将启动其背景服务器)。您可以通过检查版本来验证它已安装:

ollama pull llama2

此命令将下载模型权重并在本地设置(第一次运行型号,Ollama 将自动将其拉动,如果不存在)。确保您为选择的型号有足够的磁盘空间和 RAM;例如,7B Llama2 型号可能需要〜16GB RAM 才能舒适地运行。您可以使用 Ollama 列表列出可用的型号,并使用 Ollama Show 查看模型的详细信息。

安装 Python 库: 准备好 Ollama 引擎和可用的型号,下一步是为 Ollama 安装 Python SDK。该库允许 Python 代码通过其 REST API 与 Ollama 后端通信。使用 PIP 安装它:

pip install ollama

这为您提供了 Ollama Python 软件包(请确保您根据需要使用 Python 3.8+)。现在,您可以与 Python 脚本或应用程序中的本地模型进行交互。

运行第一个示例: 让我们测试通过运行简单的一代正确设置所有内容。在 Python 的解释器或脚本中,尝试以下内容:

import ollama

# Use the generate function for a one-off prompt
result = ollama.generate(model='llama2', prompt='Why is the sky blue?')
print(result['response'])

在此代码中,我们使用型号名称(此处为“ Llama2”,我们先前拉到的“ Llama2”)和一个提示字符串。该模型将处理提示,结果(字典)包含“响应”密钥的模型答案。例如,输出可能是关于天空为什么蓝色的科学解释。如果一切都正确配置,则应看到在控制台中打印的答案。

使用聊天 API: Ollama 还提供了一个聊天界面,用于对话风格的交互。例如:

from ollama import chat

conversation = [
{"role": "user", "content": "Hello, how are you?"}
]
reply = chat(model='llama2', messages=conversation)
print(reply.message.content)

这使用基于聊天的模型(例如指令调整的骆驼 2)来响应用户消息。消息参数列出了对话的列表(“用户”,“助手”等)。 ollama.Chat 函数返回一个响应对象,其中 reply.message.content 保留助手模型的最新答复。使用此功能,您可以轻松构建交互式应用程序。 (我们将在下一节中扩展聊天机器人。)

注意: 第一次使用模型时,可能会有下载延迟。之后,响应将直接从您的本地计算机流式传输。您还可以通过设置 stream = true 在 python api 中启用流式传输,如果您想通过 token-toke 输出以获得响应能力。

示例用例

Ollama 可以为各种 AI 应用程序提供动力。在下面,我们探索两个常见的基于 Python 的用例以证明其功能。

用例 1:AI 聊天机器人

Ollama 最直接的用途之一是创建 AI 聊天机器人。由于 Ollama 可以在本地运行对话模型(例如 Llama-2-Chat 或其他指令调整模型),因此您可以建立一个私人 Chatgpt 风格的助手。

方案: 想象一下建立客户支持聊天机器人或完全离线运行的个人助理。 Ollama 的本地LLM将处理自然语言的理解和响应生成。

如何构建它: 您将维护对话历史记录,并在用户交互时不断将其发送到 ollama.chat。例如:

import ollama

# Choose a chat-capable model (ensured it is pulled)
model_name = 'llama2'

# Initialize conversation with a system prompt (optional) and a user message
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"},
]

# First response from the bot
response = ollama.chat(model=model_name, messages=messages)
print("Bot:", response.message.content)

# Continue the conversation:
while True:
user_input = input("You: ")
if not user_input:
break # exit loop on empty input
messages.append({"role": "user", "content": user_input})
response = ollama.chat(model=model_name, messages=messages)
answer = response.message.content
print("Bot:", answer)
messages.append({"role": "assistant", "content": answer})

在此代码中:

•我们从定义助手行为的系统角色开始(这里只需指示其有用)和初始用户问候。

•到目前为止,我们致电 Ollama.Chat 进行对话,并打印机器人的答复。

•然后,我们输入一个循环,以继续读取用户输入并将更新的消息发送回 Ollama.Chat。我们始终将最新的用户消息和助手对消息列表的答复以维护上下文。

•循环断开空输入(作为退出的一种方式)。

这个简单的聊天机器人将使您完全通过 Python 与LLM进行来回对话。给定对话上下文的每个呼叫 ollama.Chat 都会返回模型的最新答复。由于该模型在本地运行,因此响应与硬件允许的速度一样快,并且在对话中拥有完全的隐私。这样的聊天机器人可以使用 GUI 或 Web 界面扩展,但是核心逻辑将保持不变。 Ollama Python 库摘要繁重的工作,因此构建基本的聊天应用程序只是几行代码。

用例2:工作流程中的自动化

除了聊天机器人之外,Ollama 还可以通过利用 AI 功能来自动化任务和增强工作流程。例如,您可以使用LLM来汇总文档,生成报告,协助编码或在自动化脚本中解释命令。本质上,Ollama 让您将 AI“大脑”嵌入到 Python 项目中。

方案: 假设您每天都有阅读冗长的日志文件或成绩单的工作流程。您可以使用 Ollama 来自动化这些文本的摘要。通过为您提供 AI 突出显示的关键点,这可以节省时间。

如何做: 您可以提示LLM来总结或分析文本并将其集成到管道中。例如:

import ollama

# Example: Summarize a paragraph of text
text = """
OpenAI has introduced a new tool called Ollama that lets users run large language models on local machines.
This approach emphasizes privacy and control, as data does not leave the user's environment.
Developers can leverage various open-source models through a simple interface, improving efficiency and reducing costs.
"""
prompt = f"Summarize the following text in one sentence:\n\"\"\"\n{text}\n\"\"\""
result = ollama.generate(model='llama2', prompt=prompt)
print("Summary:", result['response'])

在这里,我们拿了一段文字,并构建了一个提示,要求该模型以一个句子进行总结。 Ollama.generate 功能返回摘要,这可能是: “ Ollama 是一种新的 OpenAI 工具,可以在本地运行大型语言模型,从而为用户提供更高的隐私,控制和成本效率。” 这种自动化可以插入较大的脚本中,例如,在多个文档上迭代并将摘要写入文件。

另一个自动化示例可能是代码生成或帮助。假设您要自动编写样板代码或配置文件自动化。您可以通过指令提示模型并将其输出代码,然后您的 Python 程序将其保存到磁盘。例如:

code_prompt = "Write a Python function that checks if a number is prime."
response = ollama.generate(model='codellama', prompt=code_prompt)
print(response['response'])

使用代码专用模型(例如此示例中的 Codellama)将返回用于检查功能的代码,然后您可以在项目中使用该代码。这表明了 Ollama 如何通过自动化编码或文档任务的部分来增强开发人员的工作流程。

通常,将 Ollama 集成到自动化中意味着您可以在没有外部 API 调用的任何 Python 工作流程中具有 AI 驱动的功能。 Python SDK 的灵活性(具有 Ollama.list(),Ollama.pull(),Ollama.delete()等功能,也意味着您的程序可以即时管理模型,例如,在运行时或为不同任务开关模型时拔出所需的模型。这使得可以构建精简复杂任务的智能代理,批处理处理器或 AI 驱动的助手。

分步示例:与 Ollama 建立一个简单的代理商

要将所有内容融合在一起,让我们通过使用 Ollama 来构建一个简单的 AI 代理 。我们的代理将是一个不仅可以交谈的聊天机器人,而且还可以使用 Python 函数作为工具执行简单的计算。这说明了如何以分步的方式使用 Ollama 的高级功能(函数调用)。

步骤1:设置环境

确保安装和运行 Ollama(如入门中所述)。另外,请确保您有合适的型号。对于此代理,我们将使用遵循指令的模型(对于一般的 Q&A),并使其能够使用工具进行数学。像 Llama2 或 Llama3.1 这样的模型将起作用。 (如果尚未完成,请事先在终端中运行 Ollama Lut Llama2。)在您的 Python 脚本或笔记本中,导入 Ollama 库以及您需要的任何其他模块:

import ollama

如果您打算将另一个库中的特定函数用作工具,则也将导入它(稍后,我们将显示一个示例,稍后使用 Python 请求库)。但是目前,我们的代理商的工具将是一个简单的内部功能。

步骤2:定义工具功能(可选)

Ollama 的 Python 库允许您传递 Python 函数,作为模型在聊天期间可以调用的工具。这非常适合创建可以采取行动或获取信息的代理商。我们将定义一个基本的数学功能供我们的代理使用:

""" Tool function: add two numbers """
def add_two_numbers(a: int, b: int) -> int:
"""
Add two numbers and return the result.
"""
return a + b

此功能只需占用两个整数并返回其总和。 (请注意,我们包含了类型的提示和 docstring;提供此元数据可以更好地了解该工具的目的。)如果需要,我们可以注册更多功能,但是我们将保持简单。

步骤3:初始化代理对话

现在,让我们设置代理的初始上下文。我们将提供一个系统指令,将有关可用工具以及何时使用的模型告知模型。例如,系统消息可能会说: “您是数学助手。如果用户提出数学问题,则可以调用 add_two_numbers 函数。” 这将指导模型适当地使用工具。我们还会准备一个需要该工具的用户查询:

""" System prompt to inform the model about the tool is usage """
system_message = {
"role": "system",
"content": "You are a helpful assistant. You can do math by calling a function 'add_two_numbers' if needed."
}
# User asks a question that involves a calculation
user_message = {
"role": "user",
"content": "What is 10 + 10?"
}
messages = [system_message, user_message]

步骤4:与模型聊天并提供工具

现在,我们将在工具参数中提供型号名称,对话消息和我们的工具功能:

response = ollama.chat(
model='llama2',
messages=messages,
tools=[add_two_numbers] # pass the actual function object as a tool
)

当我们包括工具= [add_two_numbers]时,在引擎盖下时,Ollama 库使该函数的签名和 DOCSTRING 可用于模型。该模型在看到用户问题“什么是 10 + 10?”时,可以决定调用 add_two_numbers 工具,而不是尝试进行数学本身。 Ollama 的最新版本支持此类功能呼叫。

步骤5:处理工具响应

我们从 Ollama.Chat 获得的结果是一个可能包括工具调用的响应对象。我们需要检查该模型是否确实要求使用我们的功能。响应将具有属性响应。message.tool_calls,这是模型决定制作的任何工具调用的列表。我们可以这样处理:

if response.message.tool_calls:
for tool_call in response.message.tool_calls:
func_name = tool_call.function.name # e.g., "add_two_numbers"
args = tool_call.function.arguments # e.g., {"a": 10, "b": 10}
# If the function name matches and we have it in our tools, execute it:
if func_name == "add_two_numbers":
result = add_two_numbers(**args)
print("Function output:", result)

在此片段中,我们循环浏览任何工具调用(可能有多个呼叫,但在我们的情况下,我们期望一个)。我们将函数名称匹配,然后调用 add_two_numbers 与模型提供的参数。结果(在这种情况 20)被打印出来或可以回到模型中。

模型自己的答案呢?通常,当LLM使用函数调用时,它最初可能会用占位符或类似的推理响应:“ 我将使用 add_two_numbers 工具。 ”。执行工具后,您可以将结果发送回对话中,以供模型生成最终答案。为简单起见,我们可以假设模型的答案将在函数调用后完成。如果我们希望代理商明确将最终答案返回给用户,则可以在功能结果中附加一条新消息,并提示该模型得出答案。

将所有内容放在一起,一个简单的代理循环可能看起来像:

""" (Continuing from previous code) """
available_functions = {"add_two_numbers": add_two_numbers}

""" Model's initial response after possibly invoking the tool """
assistant_reply = response.message.content
print("Assistant (initial):", assistant_reply)

""" If a tool was called, handle it """
for tool_call in (response.message.tool_calls or []):
func = available_functions.get(tool_call.function.name)
if func:
result = func(**tool_call.function.arguments)
# Provide the result back to the model in a follow-up message
messages.append({"role": "assistant", "content": f"The result is {result}."})
follow_up = ollama.chat(model='llama2', messages=messages)
print("Assistant (final):", follow_up.message.content)

这样,代理使用该工具,然后模型以最终答案结束。运行完整脚本时,输出可能看起来像:

Assistant (initial): Let me calculate that for you...
Function output: 20
Assistant (final): The result is 20.

代理商成功回答了 “什么是 10 + 10?” 通过使用 Python 函数进行计算。您已经有效地创建了一个简单的 AI 代理,该代理可以将其功能扩展到LLM的内置知识之外,所有这些都在本地运行。您可以类似地添加更多工具或更复杂的逻辑。例如,您可以通过提供获取天气数据的工具功能来集成 API 调用(例如天气 API),并且当用户询问天气时,该模型可以决定调用它。

通过这个逐步的示例,我们看到了如何设置 Ollama,加载模型并使用 Python SDK 来实现将 AI 推理与真实动作结合的代理。 Ollama Python 库使从 Idea(AI Agent)将概念从仅几十行代码的工作原型中进行简单明了。

最后的想法

在本指南中,我们介绍了将 Ollama 与 Python 一起使用的基本原理:从了解 Ollama 是什么以及为什么它有益,到设置它,探索关键用例并建立简单的代理。使用 Ollama,开发人员可以在本地运行强大的语言模型,并轻松将它们集成到应用程序中。 Python API 是直观的 – 您可以从基本的生成或聊天呼叫开始,然后根据需要探索高级功能,例如自定义系统提示,流媒体响应或功能工具。

通过利用 Ollama,您可以获得隐私(您的数据保留本地),选择甚至微调模型的灵活性以及可能降低成本和延迟。我们演示了如何使用 Ollama 进行 AI 聊天机器人并自动化工作流程。这些示例只是刮擦表面。

对于接下来的步骤,您可能需要尝试从 Ollama 库中的不同模型(例如,尝试以代码为中心的模型进行编程帮助,或更大的 13B+参数模型以进行更细微的对话)。您还可以将 Ollama 集成到现有的 AI 框架中 – 例如,使用 Langchain 的 Ollama 集成来构建更复杂的代理或链条。社区和文档(查看官方的 Ollama 文档和 GitHub)还有更多示例,例如使用嵌入式语义搜索或在 Web 服务器模式下运行 Ollama 来服务 API 请求。

有了这个坚实的基础,您可以自信地扩展您的 AI 项目。无论是个人助理,数据分析工具还是网站的自定义聊天机器人, Ollama 都可以使您根据自己的条款开发和扩展这些解决方案 。快乐的建筑!

文章转载自: Using Ollama with Python: Step-by-Step Guide

#你可能也喜欢这些API文章!