系列文章目录
玩转大语言模型——使用langchain和Ollama本地部署大语言模型
玩转大语言模型——三分钟教你用langchain+提示词工程获得猫娘女友
玩转大语言模型——ollama导入huggingface下载的模型
玩转大语言模型——langchain调用ollama视觉多模态语言模型
玩转大语言模型——使用transformers中的pipeline调用huggingface中模型
玩转大语言模型——transformers微调huggingface格式的中文Bert模型
玩转大语言模型——使用GraphRAG+Ollama构建知识图谱
玩转大语言模型——完美解决GraphRAG构建的知识图谱全为英文的问题
玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱
玩转大语言模型——本地部署带聊天界面deepseek R1的小白教程
玩转大语言模型——本地部署deepseek R1和本地数据库的小白教程(Ollama+AnythingLLM)
玩转大语言模型——使用LM Studio在本地部署deepseek R1的零基础)教程
玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
玩转大语言模型——使用Kiln AI可视化环境进行大语言模型微调数据合成
文章目录
前言
Ollama 是一个开源的大型语言模型服务工具,旨在简化在本地运行大语言模型的过程,降低使用大语言模型的门槛。用户可以在自己的设备上运行模型,无需依赖云服务或远程服务器,保护了数据隐私。支持 Windows、macOS 和 Linux 等多种操作系统,方便不同用户安装使用。在本篇中将介绍Windows下使用Ollama进行本地大模型的部署。
下载安装Ollama
Ollama官网:https://ollama.com/
点击下载,选择符合自己系统的版本,点击下载
下载后按照提示安装即可
安装模型
回到官网,点击左上角的Models
点击后可以看到会有众多支持的模型
在本篇中笔者将使用Qwen2.5:7b
,可以在搜索栏中搜索Qwen
在左侧可以选择模型大小,复制右侧的命令,打开命令行执行就可以直接下载并运行模型了。如果已经下载过,使用这个命令不会重复下载。如果只下载不运行可以使用命令ollama pull qwen2.5
测试模型
使用终端调用
打开命令行,执行命令
ollama run qwen2.5:7b
随后就可以在命令行交互式使用大语言模型了
使用request直接调用
由于ollama支持OpenAI接口的调用,所以也可以像直接调用OpenAI一样,使用request方式调用,调用方式只要是ollama符合提供的API即可,API可以参考:https://ollama.readthedocs.io/api/
例如使用这一接口
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?",
"stream": false
}'
可以使用requests调用的方式如下(下面的代码中改成了我们需要的内容)
import requests
# 定义请求的URL
url = 'http://localhost:11434/api/generate'
# 定义要发送的数据
data = {
"model": "qwen2.5:7b",
"prompt": "你好",
"stream": False
}
# 发送POST请求,使用json参数自动处理JSON数据
response = requests.post(url, json=data)
# 检查响应状态码
if response.status_code == 200:
# 解析并打印响应内容
result = response.json() # 假设服务器返回的是JSON格式的数据
print(result)
print(result['response'])
else:
# 打印错误信息
print(f"请求失败,状态码:{
response.status_code}")
print(response.text) # 打印服务器返回的原始文本(可能是错误信息)
上述代码中的data
字典中prompt
对应的值就是我们所提的问题,在这里以你好
为例,下同。
使用langchain调用Ollama接口
langchain
也是一个常用的大语言模型开发框架,其中提供了关于ollama
调用的接口,在实例化参数中temperature
代表的是生成回答的随机程度,取值在0~1
,越大随机程度越高。如果是本地配置的ollama
,url_base
参数可以省略。
from langchain_ollama import ChatOllama
llm = ChatOllama(
temperature=0,
model="qwen2.5:7b",
url_base="http://localhost:11434/v1/",
)
ans = llm.invoke("你好")
print(ans)
print(ans.content)
使用langchain调用OpenAI接口
上边也提到了ollama
会提供OpenAI
的接口,所以也可以使用langchain为OpenAI提供的调用接口。不同的是openai_api_base
要改为ollama地址http://localhost:11434/v1/
,openai_api_key
可以为任意值,但不能为中文也不能为空。
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
temperature=0,
model="qwen2.5:7b",
openai_api_base="http://localhost:11434/v1/",
openai_api_key="anything"
)
ans = llm.invoke("你好")
print(ans)
print(ans.content)
LLM模型和Chat模型的区别对比
通过上面Ollama和OpenAI接口的对比可以看出,实际上在langchain中Ollama和OpenAI接口是一致的,所以后续将使用langchain提供的Ollama接口演示LLM模型和Chat模型的区别
加载模型
chat_model
和llm
分别为LLM模型
和Chat模型
from langchain.llms import Ollama
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage
chat_model = ChatOllama(
model="qwen2.5:7b",
temperature=0,
)
llm = Ollama(
model="qwen2.5:7b",
base_url="http://localhost:11434/",
temperature=0,
)
调用
text = "帮我写一句祝福的话"
text_chat_ans = chat_model.invoke(text)
test_llm_ans = llm.invoke(text)
message = [HumanMessage(content=text)]
message_chat_ans = chat_model.invoke(message)
message_llm_ans = llm.invoke(message)
print(text_chat_ans)
print(test_llm_ans)
print(message_chat_ans)
print(message_llm_ans)
运行结果如下:
content='愿你前程似锦,幸福安康!' additional_kwargs={
} response_metadata={
'model': 'qwen2.5:7b', 'created_at': '2025-02-08T07:28:11.0727536Z', 'done': True, 'done_reason': 'stop', 'total_duration': 90671334900, 'load_duration': 89533161300, 'prompt_eval_count': 34, 'prompt_eval_duration': 272000000, 'eval_count': 11, 'eval_duration': 520000000, 'message': Message(role='assistant', content='', images=None, tool_calls=None)} id='run-fa9e60f4-c4e0-4150-921f-fecabb993045-0' usage_metadata={
'input_tokens': 34, 'output_tokens': 11, 'total_tokens': 45}
愿你前程似锦,幸福安康!
content='愿你每一天都充满阳光,笑容常在!' additional_kwargs={
} response_metadata={
'model': 'qwen2.5:7b', 'created_at': '2025-02-08T07:33:12.9809927Z', 'done': True, 'done_reason': 'stop', 'total_duration': 148407463100, 'load_duration': 147172539300, 'prompt_eval_count': 34, 'prompt_eval_duration': 310000000, 'eval_count': 12, 'eval_duration': 614000000, 'message': Message(role='assistant', content='', images=None, tool_calls=None)} id='run-e3e47b23-b825-4e51-b657-14f504f0066e-0' usage_metadata={
'input_tokens': 34, 'output_tokens': 12, 'total_tokens': 46}
愿你前程似锦,幸福安康!
结论
无论是LLM模型还是Chat模型,都可以传入字符串或message格式的输入,不过LLM模型的回复永远都只是字符串格式,而Chat模型的返回格式是结构化的,除了字符串之外还有各种额外的信息