Ollama是一款可以在macOS、Linux和Windows系统上运行的跨平台工具,它帮助用户快速在本地运行大模型,极大地简化了在Docker容器内部署和管理LLM(大型语言模型)的过程。以下是Ollama的下载和安装步骤:
一、下载Ollama
- 访问官网:
打开浏览器,访问Ollama官网。 - 选择操作系统:
在Ollama官网的下载页面,选择适合自己操作系统的版本。对于Windows用户,点击“Windows”选项卡。 - 下载Ollama:
点击“Download for Windows (Preview)”按钮,开始下载Ollama的安装包。请确保您的系统版本是Windows 10或更高版本。
二、安装Ollama
- 运行安装包:
下载完成后,双击.exe安装包文件,开始安装过程。 - 安装路径:
Ollama默认会安装在C盘,路径通常为C:\Users%username%\AppData\Local\Programs\Ollama。请注意,目前无法自定义安装路径,因此请确保C盘有足够的空间。 - 完成安装:
按照安装向导的提示完成安装过程。安装完成后,您可以在开始菜单中找到Ollama,或者在桌面右下角的状态栏中看到Ollama的图标。
三、配置Ollama(可选)
- 修改模型存储路径:
Ollama默认将模型存储在C盘。为了节省C盘空间或提高访问速度,您可以修改模型的存储路径。右键点击Ollama图标,退出Ollama,然后打开“系统环境变量”,新建一个系统变量OLLAMA_MODELS,并设置为您希望的模型存储路径。 - 修改API访问地址和端口:
Ollama API的默认访问地址和侦听端口是http://localhost:11434。如果您需要在网络中提供服务,请修改API的侦听地址和端口。在系统环境变量中设置相应的变量值即可。 - 允许浏览器跨域请求:
如果您计划在其它前端面板中调用Ollama API(如Open WebUI),建议放开跨域限制。可以新建一个系统变量OLLAMA_ORIGINS,并设置变量值为*。
四、启动和运行Ollama
- 启动Ollama:
在开始菜单中找到Ollama,并点击启动。或者右键点击桌面右下角的Ollama图标,选择“启动”。 - 查看Ollama命令:
以管理员身份运行Windows Powershell,执行ollama命令来查看Ollama的帮助信息和可用命令。 - 下载并运行大模型:
执行ollama list命令可以查看当前安装的大模型列表。如果需要下载新的大模型,可以前往Ollama模型库选择合适的模型,并执行相应的安装命令。例如,执行ollama run [modelname]命令来下载并运行指定的大模型。 - 验证安装:
为了验证Ollama是否启动成功,可以在浏览器中访问http://127.0.0.1:11434/(或您设置的API端口)。如果显示“Ollama is running”,则说明Ollama已成功启动。
通过以上步骤,您就可以完成Ollama的下载、安装和配置,并开始使用Ollama来运行大型语言模型了。请注意,在使用过程中,如果遇到任何问题或疑问,可以查阅Ollama的官方文档或寻求社区的帮助。
五、安装
- 安装界面
- 安装成功界面:
六、安装模型
(一)阿里通义千问模型
1、从仓库中查询自己需要的模型:https://ollama.com/library
- 在线安装
# 下载模型
ollama pull qwen
# 运行模型
ollama run qwen
- 离线部署
需要离线服务 模型文件,生成Modelfile,在服务环境上传即可
# 查看模型Modelfile
ollama show --modelfile qwen
# 创建模型
ollama create your-model-name -f ./Modelfile
- 根据Modelfile内容查看模型具体位置,并上传到服务器b,保存Modelfile,并修改FROM子句,修改为自己模型位置。
- 执行create命令
(二)llama3.2
命令行
ollama run llama3.2
执行效果:
七、调用
1. 接口调用
Windows
curl http://localhost:11434/api/chat -d "{\"model\":\"llama3.2\",\"messages\":[{\"role\":\"user\",\"content\":\"What are God Particles?\"}],\"stream\":false}"
2. Python调用
import ollama
response = ollama.chat(
model="llama3.2",
messages=[
{
"role": "user",
"content": "Tell me an interesting fact about elephants",
},
],
)
print(response["message"]["content"])
3. Spring Ai
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>ollama</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-ai-ollama</name>
<description>spring-ai-ollama</description>
<properties>
<java.version>17</java.version>
<!-- 快照版本-->
<spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
</plugins>
</build>
<!-- 快照版本-->
<repositories>
<repository>
<id>spring-snapshot</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
</project>
- yaml配置
spring:
ai:
ollama:
base-url: localhost:11434
- 业务代码
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/mind-mark")
public class ChatController {
/**
* 文本
*/
@GetMapping("chat")
public String chat(@RequestParam(value = "msg", defaultValue = "") String msg) {
if (msg == null || msg.trim().isEmpty()) {
return "对话消息不能为空。";
}
return chatClient
.prompt()
.user(msg)
.call()
.content();;
}
}