首页 › 论坛 › 置顶 › 使用Ollama与Python:简明指南
-
作者帖子
-
2025-05-15 15:36 #15961Q QPY课程团队管理员
安装了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-envScriptsactivate # 在 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仓库
- 每个块包含响应的一小部分,存储在
-
作者帖子
- 哎呀,回复话题必需登录。