安装了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=True
的 generate()
函数在Python中返回一个迭代器。这个迭代器在模型生成新文本块时会逐个返回这些文本块。for
循环会逐一处理这些到达的文本块:
- 每个块包含响应的一小部分,存储在
chunk['response']
中。 end=''
参数防止在块之间添加换行符。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仓库