使用Ollama与Python:简明指南

安装了Ollama并尝试从命令行运行模型后,下一步就是将这些强大的AI功能集成到您的Python应用程序中。本指南将向您展示如何在Python中使用Ollama。

设置

首先,确保Ollama已在您的系统上安装并运行。

如果您对Ollama还不熟悉,可以查看这篇文章 Ollama入门:在您的计算机上运行LLM

所需的Ollama模型

在运行本指南中的Python示例之前,请确保您已拉取必要的模型。您可以使用Ollama CLI来拉取它们:


拉取这些示例中使用的模型
ollama pull llama3.2:1b

您只需拉取这些模型一次。可以使用以下命令检查您已经拥有的模型:

ollama list

创建虚拟环境

为您的 Python 项目使用虚拟环境是一种良好的实践。这可以使您的依赖项保持隔离,并使您的项目更加便携:

# 创建虚拟环境  

python -m venv ollama-env  

# 激活虚拟环境  

# 在 Windows 上:  

ollama-env\Scripts\activate  

# 在 macOS/Linux 上:  
source ollama-env/bin/activate

安装依赖

安装 Ollama Python 库:

pip install ollama

 

创建 requirements.txt

为了更好的项目管理,创建一个 requirements.txt 文件:

pip freeze > requirements.txt

要在未来从此文件安装:

pip install -r requirements.txt

基本用法

让我们从一个使用 Llama 3.2 1B 模型的简单示例开始。

创建一个名为 generate.py 的文件,内容如下:

from ollama import generate  
# 正常响应  
response = generate('llama3.2:1b', '为什么天空是蓝色的?')  
print(response['response'])

这将输出模型对天空为何是蓝色的完整解释。

基本用法截图

流式响应

为了获得更互动的体验,您可以在生成响应时获取结果。

创建一个名为 generate-stream.py 的文件,内容如下:

from ollama import generate  
# 流式响应  
print("流式响应:")  
for chunk in generate('llama3.2:1b', '为什么天空是蓝色的?', stream=True):  
    print(chunk['response'], end='', flush=True)  
print()  # 末尾换行

这会随着响应的生成逐步显示内容,从而创造出更具互动性的体验。

流媒体使用截图

为什么使用 for chunk in generate

当您使用Ollama的流式功能时,响应并不会一次性返回。相反,它被分成小块(chunks),随着模型生成的内容逐个到达。

带有 stream=Truegenerate() 函数在Python中返回一个迭代器。这个迭代器在模型生成新文本块时会逐个返回这些文本块。for 循环会逐一处理这些到达的文本块:

  1. 每个块包含响应的一小部分,存储在 chunk['response'] 中。
  2. end='' 参数防止在块之间添加换行符。
  3. flush=True 确保文本立即显示。

这创造了实时观看AI“思考”的效果,类似于观看某人打字。

使用系统提示

系统提示允许您在对话开始之前为模型设置上下文和指令。这是一种强大的方式来定义模型的行为。

创建一个名为 chat-system-role.py 的文件,内容如下:

from ollama import chat  

# 定义系统提示  
system_prompt = "你说话的方式和声音像一个海盗,句子简短。"  
# 使用系统提示进行聊天  
response = chat('llama3.2:1b',   
                messages=[


{'role': 'system', 'content': system_prompt},  
{'role': 'user', 'content': '告诉我关于你的船的事。'}  
print(response.message.content)

系统提示在整个对话过程中保持活跃,影响模型对所有用户输入的响应。


系统角色使用截图

 

对话上下文

通过流式传输保持上下文对话,以获得更互动的体验。

创建一个名为 chat-history-stream.py 的文件,内容如下:

from ollama import chat  

# 初始化一个空的消息历史  
messages = []  
while True:  
    user_input = input('带历史记录的聊天: ')  
    if user_input.lower() == 'exit':  
        break  
    # 在保持对话历史的同时获取流式响应  
    response_content = ""  
    for chunk in chat(  
        'llama3.2:1b',  
        messages=messages + [  
            {'role': 'system', 'content': '你是一个有帮助的助手。你只用简短的句子回答。'},  
            {'role': 'user', 'content': user_input},  
        ],  
        stream=True  
    ):

python
if chunk.message:
response_chunk = chunk.message.content
print(response_chunk, end=”, flush=True)
response_content += response_chunk
# 将交流添加到对话历史中
messages += [
{‘role’: ‘user’, ‘content’: user_input},
{‘role’: ‘assistant’, ‘content’: response_content},
]
print(‘\n’) # 在响应后添加空行

在这里你可以看到这个示例的样子。

聊天使用截图

结论

Ollama Python库使得将强大的语言模型集成到您的Python应用程序中变得简单。无论您是在构建一个简单的脚本还是一个复杂的应用程序,该库的直观API都允许您专注于创造价值,而不是管理底层的AI基础设施。

随着您对基础知识的逐渐熟悉,可以探索更多高级功能,并考虑如何利用这些能力在您的项目中解决实际问题。

资源

在这个GitHub仓库中,您将找到可运行的代码示例: GitHub仓库

更多