Ollama是一个开源的本地大语言模型(LLM)运行框架,允许用户在本地计算机上运行各种开源大模型,无需依赖云服务。它提供了简单易用的命令行界面和API,使得开发者可以轻松地在本地部署和使用大模型。
ollama --version
验证安装brew install ollama
ollama serve
ollama --version
验证安装curl -fsSL https://ollama.ai/install.sh | sh
ollama serve
ollama --version
验证安装docker pull ollama/ollama
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Ollama支持多种开源大模型,包括但不限于:
使用以下命令下载模型:
ollama pull <模型名称>
例如,下载Llama 2 7B模型:
ollama pull llama2
下载特定版本的模型:
ollama pull llama2:13b
ollama list
ollama rm <模型名称>
touch Modelfile
FROM llama2
# 设置系统提示
SYSTEM 你是一个有用的AI助手。
# 设置参数
PARAMETER temperature 0.7
PARAMETER top_p 0.9
ollama create my-model -f Modelfile
基本对话:
ollama run llama2
指定参数:
ollama run llama2 "用Python写一个冒泡排序算法" --temperature 0.7
Ollama提供REST API,默认端口为11434。
curl -X POST http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt": "用Python写一个冒泡排序算法",
"temperature": 0.7
}'
curl -X POST http://localhost:11434/api/chat -d '{
"model": "llama2",
"messages": [
{
"role": "user",
"content": "你好,请介绍一下自己"
}
]
}'
安装Ollama Python客户端:
pip install ollama
基本使用示例:
import ollama
# 生成文本
response = ollama.generate(model='llama2', prompt='用Python写一个冒泡排序算法')
print(response['response'])
# 聊天对话
response = ollama.chat(model='llama2', messages=[
{
'role': 'user',
'content': '你好,请介绍一下自己'
}
])
print(response['message']['content'])
import ollama
# 流式生成文本
stream = ollama.generate(
model='llama2',
prompt='用Python写一个冒泡排序算法',
stream=True
)
for chunk in stream:
print(chunk['response'], end='', flush=True)
ollama pull llama2
ollama serve
ollama run llama2 "你好,请介绍一下自己"
在服务器上安装Ollama
配置防火墙,开放11434端口
启动Ollama服务
设置服务自启动:
# 创建系统服务
sudo nano /etc/systemd/system/ollama.service
添加以下内容:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/local/bin/ollama serve
Restart=always
User=your_username
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl enable ollama
sudo systemctl start ollama
from flask import Flask, request, jsonify
import ollama
app = Flask(__name__)
@app.route('/api/chat', methods=['POST'])
def chat():
data = request.json
model = data.get('model', 'llama2')
messages = data.get('messages', [])
response = ollama.chat(model=model, messages=messages)
return jsonify(response)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
pip install flask ollama
python app.py
pip install langchain langchain-community
from langchain_community.llms import Ollama
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 初始化Ollama
llm = Ollama(model="llama2")
# 创建提示模板
prompt = PromptTemplate(
input_variables=["topic"],
template="请写一篇关于{topic}的短文。"
)
# 创建链
chain = LLMChain(llm=llm, prompt=prompt)
# 运行链
result = chain.run(topic="人工智能")
print(result)
问题: 下载模型时出现网络错误或超时。
解决方案:
--insecure
参数:ollama pull llama2 --insecure
问题: 运行大型模型时出现内存不足错误。
解决方案:
ollama pull llama2:7b-q4
问题: GPU未被正确识别或使用。
解决方案:
--gpu
参数指定GPU:ollama run llama2 --gpu 0
问题: 无法连接到Ollama API。
解决方案:
export OLLAMA_HOST=127.0.0.1:11434
ollama pull llama2:7b-q4
ollama run llama2 --context-length 2048
示例:
ollama run llama2 "写一首诗" --temperature 0.8 --top_p 0.9 --repeat_penalty 1.1
创建一个简单的命令行AI助手:
import ollama
import sys
def chat_with_ai():
print("欢迎使用AI助手! 输入'退出'结束对话。")
while True:
user_input = input("\n你: ")
if user_input.lower() in ['退出', 'exit', 'quit']:
print("再见!")
break
response = ollama.chat(model='llama2', messages=[
{
'role': 'user',
'content': user_input
}
])
print(f"\nAI: {response['message']['content']}")
if __name__ == "__main__":
chat_with_ai()
创建一个代码生成工具:
import ollama
import argparse
def generate_code(prompt, language, model='codellama'):
system_prompt = f"你是一个专业的{language}程序员。请根据以下需求生成代码:"
response = ollama.chat(model=model, messages=[
{
'role': 'system',
'content': system_prompt
},
{
'role': 'user',
'content': prompt
}
])
return response['message']['content']
def main():
parser = argparse.ArgumentParser(description='代码生成器')
parser.add_argument('prompt', help='代码需求描述')
parser.add_argument('--language', default='Python', help='编程语言')
parser.add_argument('--model', default='codellama', help='使用的模型')
args = parser.parse_args()
code = generate_code(args.prompt, args.language, args.model)
print(code)
if __name__ == "__main__":
main()
创建一个文本摘要工具:
import ollama
import argparse
def summarize_text(text, max_length=200, model='llama2'):
prompt = f"请将以下文本摘要为不超过{max_length}字的内容:\n\n{text}"
response = ollama.generate(model=model, prompt=prompt)
return response['response']
def main():
parser = argparse.ArgumentParser(description='文本摘要工具')
parser.add_argument('--file', help='文本文件路径')
parser.add_argument('--text', help='直接输入文本')
parser.add_argument('--max-length', type=int, default=200, help='摘要最大长度')
parser.add_argument('--model', default='llama2', help='使用的模型')
args = parser.parse_args()
if args.file:
with open(args.file, 'r', encoding='utf-8') as f:
text = f.read()
elif args.text:
text = args.text
else:
print("请提供文本文件或直接输入文本")
return
summary = summarize_text(text, args.max_length, args.model)
print("\n摘要:")
print(summary)
if __name__ == "__main__":
main()