Ollama 模型交互
与 Ollama 模型交互是使用大语言模型(LLM)进行对话、生成文本或执行任务的核心功能。Ollama 提供两种主要交互方式:通过命令行界面(CLI)的交互式终端和通过 REST API 的程序化调用。以下是详细说明,包括操作步骤、示例和注意事项。
1. 交互方式
方式 1:CLI 交互式终端
- 描述:通过
ollama run
命令启动模型,进入交互式终端,直接输入提示(prompt)与模型对话。 - 适用场景:快速测试、调试模型、个人使用。
- 步骤:
- 确保已拉取模型(参考
ollama pull <model>
)。 - 运行命令:
bash ollama run <model-name>
示例:bash ollama run llama3
- 进入交互模式,输入提示后按回车,模型会实时响应。
- 退出:输入
/exit
或按Ctrl+D
。
- 示例对话:
>>> What's the capital of France?
The capital of France is Paris.
>>> Write a haiku about the moon.
Lunar whispers sing,
In night's embrace, shadows dance,
Soft dreams take wing.
- 高级用法:
- 多轮对话:连续输入,模型会记住上下文(有限窗口,约 8k token)。
- 系统提示:在 Modelfile 中设置角色(如
SYSTEM "You are a pirate"
),影响模型语气。 - 快捷命令:
/help
查看可用命令,如/multiline
启用多行输入。
方式 2:API 交互
- 描述:通过 HTTP API 调用模型,适合集成到应用程序、脚本或 Web 项目。
- 适用场景:自动化任务、开发 AI 应用、批量处理。
- 前提:启动 Ollama 服务器:
ollama serve
默认监听 http://localhost:11434
。
- 主要 API 端点:
- 生成文本:
/api/generate
(单次生成,非对话)。bash curl http://localhost:11434/api/generate -d '{ "model": "llama3", "prompt": "Write a short story about a robot." }'
响应(JSON,流式输出):json {"response": "In a quiet factory, a robot named Elara..."}
- 对话模式:
/api/chat
(支持多轮对话,类似 ChatGPT)。bash curl http://localhost:11434/api/chat -d '{ "model": "llama3", "messages": [ {"role": "user", "content": "Tell me a joke."} ] }'
响应:json {"message": {"role": "assistant", "content": "Why did the robot go to therapy? It had an identity crisis!"}}
- 嵌入生成:
/api/embeddings
(将文本转为向量,适用于搜索或分类)。bash curl http://localhost:11434/api/embeddings -d '{ "model": "llama3", "prompt": "Hello, world!" }'
- 编程示例(Python):
import requests
# 单次生成
response = requests.post('http://localhost:11434/api/generate', json={
"model": "llama3",
"prompt": "Explain quantum physics briefly."
}, stream=True)
for line in response.iter_lines():
if line:
print(line.decode('utf-8'))
# 对话模式
response = requests.post('http://localhost:11434/api/chat', json={
"model": "llama3",
"messages": [{"role": "user", "content": "What's 2+2?"}]
})
print(response.json()['message']['content'])
2. 交互中的关键参数
控制模型行为的参数(CLI 或 API 中设置):
- temperature(0-1):控制输出随机性。低值(0.2)更确定,高值(0.8)更创意。
- API 示例:
{"temperature": 0.7}
- top_p(0-1):核采样,限制输出概率分布。默认 0.9。
- num_predict:最大生成 token 数。默认 128,设为 -1 表示无限制。
- stop:停止词,指定生成终止条件。
- 示例:
{"stop": ["\n"]}
停止于换行。 - CLI 设置:通过 Modelfile 或
ollama run llama3 --temperature 0.5
。
3. 多模态交互
- 支持模型:如
llava
或bakllava
,支持图像输入。 - 示例(API):
curl http://localhost:11434/api/generate -d '{
"model": "llava",
"prompt": "Describe this image",
"images": ["base64_encoded_image_string"]
}'
- 注意:CLI 暂不支持图像输入,需通过 API。
4. 常见场景与示例
- 对话:
ollama run mistral
>>> Tell me a story about a dragon.
Once, a dragon named Ember guarded a mountain of gold...
- 代码生成:
curl http://localhost:11434/api/generate -d '{
"model": "codellama",
"prompt": "Write a Python function to sort a list."
}'
- 翻译:
ollama run llama3
>>> Translate "Hello, world!" to Spanish.
¡Hola, mundo!
- 嵌入生成:用于搜索或语义分析:
response = requests.post('http://localhost:11434/api/embeddings', json={
"model": "llama3",
"prompt": "Artificial intelligence"
})
embedding = response.json()['embedding']
5. 注意事项
- 上下文限制:模型有 token 限制(通常 8k-32k),长对话可能截断上下文。
- 性能优化:
- 小模型(如
phi3
)适合低配设备。 - 启用 GPU(需要 CUDA/Metal 支持)加速推理。
- 运行
ollama ps
检查内存占用,关闭不必要的模型。 - 错误排查:
- 模型未响应:检查
ollama serve
是否运行,或端口是否被占用。 - 输出不理想:调整
temperature
或重写提示。 - 内存不足:选择量化模型(如
llama3:8b-q4_0
)。 - 安全性:API 默认监听本地,若公开访问,需设置
OLLAMA_HOST
并加防火墙。
6. 进阶技巧
- 自定义提示:通过 Modelfile 设置系统提示,塑造模型角色(如 “幽默助手”)。
FROM llama3
SYSTEM You are a witty comedian.
- 流式输出:API 默认支持流式响应,适合实时应用。
- 批量处理:编写脚本循环调用 API,处理大量输入。
- 集成框架:Ollama 的 OpenAI 兼容 API 可与 LangChain、LlamaIndex 配合。
如需具体场景的交互示例(例如代码生成、翻译、RAG)、API 集成代码或 Modelfile 配置,请告诉我!