用Ollama打造本地生产力工具

APPLICATION Dec 27, 2024

闹钟在早上 6:00 响起。你昏昏沉沉地伸手去拿手机,眯着眼睛看着屏幕。一堵通知墙向你袭来——电子邮件、Slack 消息、新闻更新。这是一种数字超载,而你甚至还没有喝咖啡。

当你滚动浏览无尽的信息流时,你会被数据淹没,努力跟上。然后你想起了昨晚那位同事发来的长篇 Slack 消息,你把它放在了稍后阅读中。天哪,我们都认识那位同事。

我承认,在我的工作中,这完全就是我!所以,对我的同事们来说:我很抱歉,我希望这篇文章能给你一些启发,让你知道现代人工智能如何帮助你应对我迫切需要写 Slack 帖子。

谁知道那堵文字墙里可能埋藏着什么机密信息?你不能简单地将其复制粘贴到在线AI工具中;你的公司严格禁止与外部服务共享敏感数据。但是等等!想象一下:你复制文本,运行一个简单的快捷方式,并立即获得简明摘要,所有这些都无需离开你的机器。无需担心数据隐私,无需担心成本或订阅限制。

我记得我第一次尝试在自己的机器上运行 AI 模型。感觉就像魔术一样!突然间,我免费获得了这种令人难以置信的能力。创建小助手脚本很快就上瘾了。

一切都是本地的、安全的,并且由你控制。这就是本地 AI 的力量。它不仅仅是处理信息过载;它是关于安全、私密和高效地处理信息过载。它不是要取代你的智慧,而是要增强它,在尊重机密性界限的同时在信息海洋中提供生命线。

在本文中,我们将深入探讨本地 AI 的世界,探索 Ollama 等工具以及 Gemma 2 和 LLaVA 等最先进的模型如何改变你的日常工作流程。我们将超越炒作,走向实用,向你展示如何将复杂的任务变成简单、高效的流程。在你喝第一杯咖啡之前,解锁新的生产力水平并重新掌控你的数字生活,同时确保你的敏感数据安全无虞。

这是夸张的说法,当然,我在喝第一杯咖啡之前从不运行任何脚本。无论如何,让我们开始吧!

1、设置 Ollama

让我们准备环境。以下说明是在安装了 Homebrew 的 macOS 15.2 上测试的,但它们也可以适用于其他系统,所以准备好受到启发吧。首先,我们将安装 Ollama,启动 Ollama 服务器,并使用客户端下载 Gemma 2 和 LLaVA 模型。

brew install ollama
ollama serve # starts the server

# run in another terminal window
ollama pull gemma2
ollama pull llava

Ollama 使你能够直接在本地机器上运行强大的 AI 模型,与基于云的闭源解决方案相比,它提供了增强的透明度、控制和定制。

我必须承认,一个缺点是你需要在本地机器上存储和处理模型。虽然我的 MacBook 足够强大,可以运行 Gemma 2,并且在大多数情况下运行良好,但更高级的模型(如 Llama 3.3 70B)可能需要一段时间才能处理请求。此外,Gemma 2 仅需要 5.3 GB,而 Llama 3.3 占用 43 GB 的空间。这意味着在使用 Ollama 进行实验时,你可以快速填满磁盘。当我的 Mac 抱怨时,我感到很惊讶。😅

Ollama 由两个主要组件组成:客户端和服务器。客户端是用户与之交互的部分,而服务器则作为用 Go 实现的后端服务。

Ollama 包含可用于创建和共享模型的模型文件。这些文件包含基本信息,例如基础模型、参数、提示模板、系统消息等。默认情况下,这些模型存储在 ~/.ollama 中。

tree ~/.ollama/models
du -shc ~/.ollama/models
Ollama 服务器和本地模型

在本文中,我们主要使用 Google 开发的 Gemma 2 模型。Gemma 是一组轻量级、尖端的开放模型,使用与 Gemini 模型相同的研究和技术创建。它们在质量和资源需求之间提供了极好的平衡。

此外,我们将使用 🌋 LLaVA(大型语言和视觉助手)模型,这是一个端到端训练的大型多模态模型,集成了视觉编码器和 Vicuna,可实现全面的视觉和语言理解。

2、使用本地 AI 提高生产力

我敢打赌,每个读这篇文章的人每天至少会使用 cmd+c(或 ctrl+c)、cmd+v(或 ctrl+v)复制和粘贴一次。

你可以在 Mac 终端上使用 pbcopy 和 pbpaste 执行完全相同的操作。pbcopy 允许你将命令的输出直接复制到剪贴板中。反之亦然,对于 pbpaste,它将允许你将剪贴板直接粘贴到终端中。

我经常将它用于小型辅助 Bash 脚本。你可以将剪贴板通过管道传输到任何其他命令,例如 pbpaste | cat。这提供了许多可能性。

遗憾的是,pbcopy 和 pbpaste 命令仅适用于 Mac,但你可以使用 xsel 在 Linux 上重新创建这些命令。

我们将在以下示例中使用 pbcopy 和 pbpaste。我们还将使用一个名为 glow 的命令。Glow 是一个基于终端的 markdown 阅读器,允许直接在命令行上阅读文档,可以通过以下方式安装:

brew install glow

有了它,我们就可以释放本地 LLM 和简单 Bash 脚本的魔力了。

2.1 演示:代码审查

提前注意:对于所有演示,请确保你的本地 Ollama 服务器已启动并正在运行。

ollama serve

使用 ollama run,我们可以直接针对本地模型执行提示。

专业提示:如果你将命令的输出通过管道传输到 ollama run,它将附加到提示中。此功能可实现令人印象深刻的生产力黑客攻击,我们将在下文中进行探索。

让我们从审查一些代码开始。我们 cat 一个源文件,将其传输到 ollama run 并使用 glow 呈现模型的 markdown 响应:

cat ~/projects/biasight/biasight/parse.py | ollama run gemma2 "Review the following code and suggest improvements in a concise way:" | glow -
Ollama 服务器和代码审查演示

使用 glow,模型建议的代码片段具有语法突出显示功能,允许你快速收到反馈,即使是内部关键代码,因为它永远不会离开你的笔记本电脑。你可以免费审查机密代码。

当然,审查的质量取决于您使用的模型。虽然 Gemma 2 通常表现良好,但也有专门为代码生成训练的模型,例如基于 Gemma 2 的 CodeGemma。实验是必不可少的;查看 Ollama 模型库以了解所有可用模型。

2.2 演示:文本总结

我们都经历过这种情况:现在是晚上 11:42,在 200 条回复的 Slack 线程中隐藏着可以防止明天生产事故的信息。你可能不确定是否有机密信息,因此你不能简单地将其复制并粘贴到你最喜欢的在线 LLM 中。

使用以下代码片段,你可以复制任何文本(例如长 Slack 线程),并使用本地模型为你总结。没有任何内容离开你的本地机器,并且不涉及复杂的工作流程 - 只需复制并按回车键即可。

pbpaste | ollama run gemma2 "provide a concise and comprehensive summary of the given text:" | glow -
使用 Ollama 总结长 Slack 消息

老实说,我不会以这种方式使用此代码片段,因为将其复制到你的终端会覆盖你的剪贴板。首先,你需要粘贴代码片段,然后复制要总结的文本,最后在终端中按 Enter 键。我重视效率,而这个过程并不高效。相反,我将这个代码片段用于一个脚本中,该脚本已绑定到我通过 Raycast 运行的快捷方式。我将在本文后面解释这一点,所以请继续阅读;关于提高生产力,还有很多东西需要学习。

2.3 演示:创建思维导图

思维导图最简单的形式是一系列以视觉图表形式呈现的想法。它从中间的中心思想或主题开始,从中衍生出分支,包含进一步探索的主题和概念——通常用单词、短语和图像表示。这种结构使思维导图具有自然的组织流程。

思维导图以一种反映大脑功能的方式组织信息——辐射式而非线性。它实际上是“绘制”出你的想法,使用关联、连接和触发器来激发进一步的想法。这种方法使理解复杂信息变得更容易。

我真的很喜欢通过思维导图学习。将复杂的文章、书籍和文档转换为思维导图,使它们更容易理解,并可作为以后的参考。

通过以下代码片段,我们将本地 AI 与 markmap 相结合,该项目可让你将常规 Markdown 转换为思维导图。 由于 LLM 擅长总结和创建 Markdown,我们只需在提示中添加一些特殊成分即可。

使用此代码片段,你可以选择和复制任何复杂的文章、消息或文本并将其转换为思维导图! 思维导图代码会通过 pbcopy 自动复制到你的剪贴板。 然后,只需将其粘贴到markmap.js网站并观看魔术发生。 他们还提供多种集成,包括 Obsidian 和 VSCode。

pbpaste | ollama run gemma2 "You are a specialized mind map generator that creates markmap-compatible markdown output. Your task is to analyze the provided text and create a hierarchical mind map structure using markdown syntax.

Rules for generating the mind map:
1. Use markdown headings (##, ###, etc.) for main topics and subtopics
2. Use bullet points (-) for listing details under topics
3. Maintain a clear hierarchical structure from general to specific
4. Keep entries concise and meaningful
5. Include all relevant information from the source text
6. Use proper markdown formatting for:
   - Links: [text](URL)
   - Emphasis: **bold**, *italic*
   - Code: \`inline code\` or code blocks with \`\`\`
   - Tables when needed
   - Lists (both bullet points and numbered lists where appropriate)
7. Always use proper emojis for main topics, if applicable you can also add them for subtopics

Example format:
## 📋 Project Overview
### Key Features
- Feature 1
- Feature 2

Generate a markmap-compatible mind map for this text:" | LC_ALL=en_US.UTF-8 pbcopy

为了演示代码片段,我们使用了我备受尊敬的数据工程师同事 Yaakov Bressler 的一篇文章 Pydantic 专家:重用和导入验证器

  • 首先,我们将代码片段粘贴到终端窗口中但不提交。
  • 然后,我们选择整篇文章(cmd+a)并复制(cmd+c)。
  • 之后,我们在终端窗口中按 Enter 键提交代码片段。
  • 让 AI 在本地发挥其魔力。
  • 完成后,我们将结果保存在剪贴板中,并可以将其粘贴(cmd+v)到markmap.js网站
根据文章生成基于 markdown 的思维导图
使用 markmap 呈现的思维导图

结果如下:

AI 生成的思维导图

想象一下,AI阅读文章并将思维导图作为以后的参考,那么你的学习过程将变得更加有效,几乎就像作弊一样。

请记住,思维导图如此有用的一个重要原因是,创建过程需要你将复杂的信息提炼为几个要点并按逻辑顺序连接它们。这种创造性过程在内化和学习信息方面起着至关重要的作用,例如从 Yaakov 的一篇优秀文章中学习信息。当 AI 为你生成内容时,这种好处就完全消失了。就我个人而言,我发现这些 AI 生成的思维导图最适合用作参考工具。我在浏览文章或文档后创建它们,以便获得一个稍后触发我记忆的备忘单。学习是一个个人过程,因此请找到最适合你的方法。但是,不要忽视 AI;它可以显著提高你的学习效率。

此外,由于一切都在本地运行,你可以使用它来创建机密或内部信息的思维导图,例如项目文档或概念。

2.4 演示:分析图像

这只是一个简短的附加演示,以展示你可以在本地拥有多模式 AI。这可能有助于让 AI 帮助你整理照片,而无需将它们上传到某个地方,将所有内容保持在本地。如果你有一个支持它的模型,只需将本地机器上图像的路径添加到你的提示中,Ollama 会负责将其传递给模型。

我建议对图像使用完全限定的路径。我经常在使用相对路径时遇到问题。如果找不到图像,Ollama 不会抱怨;它只会生成其他东西,这可能会让人非常沮丧。使用此方法时,请务必检查输出“Added image …”以确认它实际上正在使用图像文件。

让我们分析一张有趣的猫图片:

ollama run llava "Describe this image ./funny-cat.jpg" | glow -
本地 AI 驱动的图像摘要

我发现这对结构化输出特别有用。自 2024 年 12 月以来,Ollama 一直支持结构化输出。此功能允许你编写脚本来分析图像并确保 LLM 始终返回正确结构化的对象。例如,你可以识别主色、对象或图像的类型。此功能可以创建一个有用的 AI 应用程序来管理您的图像。但是,本地模型可能存在性能限制。尽管如此,它仍然可以是一个令人愉快的学习项目。

3、AI 脚本,你的日常小帮手

如前所述,复制和粘贴这些代码片段可能不是最有效的工作流程。在本文中,我们的目标是提高效率。那么,如何创建一些 Bash 脚本作为日常 AI 帮手呢?

我们将使用摘要演示作为示例,但你也可以轻松地将其应用于其他代码片段。

首先,在你的主目录中为脚本创建一个文件夹:

mkdir ~/bin

接下来,为你的脚本创建一个文件并确保它是可执行的:

touch ~/bin/ai-summarize
chmod +x ~/bin/ai-summarize

使用你最喜欢的编辑器打开它:

vim ~/bin/ai-summarize

然后,将代码片段添加为 Bash 脚本:

#!/bin/bash

MODEL=gemma2

echo "Summarizing clipboard content..."
pbpaste | ollama run ${MODEL} "provide a concise and comprehensive summary of the given text:" | glow -

最后,将脚本文件夹添加到您的路径中。调整您的主路径并将以下行添加到您的 ~/.zshrc

export PATH="$PATH:/Users/vojay/bin"

现在,如果你打开新的终端会话或重新加载配置,将获得一个新命令,你可以使用它从任何地方执行。

你现在可以复制任何文本,在终端中输入 ai-summarize,并收到简明摘要。

使用辅助脚本运行本地 AI 任务

4、使用 Raycast 实现更高水平的生产力

将 Raycast 视为 Spotlight 的强化版 — 它是一个 Mac 启动器,功能远不止查找文件。从管理日历到控制 Spotify,一切都通过简约的启动器完成。

虽然 Raycast 在其 Pro 计划中提供 AI 功能,但我们可以使用其免费脚本命令功能利用我们的本地 AI 设置。当你在本地运行 Ollama 时,谁还需要订阅?😉 更严肃地说,我认为 Raycast 项目很棒。 Pro 功能非常出色,团队值得我们支持,所以我个人选择了它。它物有所值!

魔法通过 Raycast 的脚本命令实现。你可以创建 Raycast 可以执行的自定义脚本,它们可以用包括 Bash 在内的各种语言编写。让我们将 AI 辅助脚本与 Raycast 集成:

  • 打开 Raycast 设置
  • 导航到扩展 → 脚本命令
  • 添加脚本目录(例如 ~/bin

现在你可以直接通过 Raycast 触发 AI 工作流。例如:

  • 打开 Raycast
  • 键入 summary 以运行你的摘要脚本
  • 剪贴板中的文本将由你的本地 Gemma 2 模型处理
  • 获得即时结果,同时保持数据的私密性
专业提示:你可以为最常用的 AI 命令分配自定义热键。我使用 cmd+shift+s 进行汇总,使用 cmd+shift+m​​ 创建思维导图。

本地 AI 和 Raycast 的这种组合创建了一个强大、私密且免费的生产力系统。无需打开浏览器选项卡,数据不会离开您的机器,也无需订阅。只需纯粹的键盘驱动效率。

Raycase 演示

5、Open WebUI

这值得单独写一篇文章,但如果你读到此处,这是真正值得探索的强大功能。Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线运行。它支持各种 LLM 运行器,包括 Ollama。

我们可以使用 Docker 启动 Open WebUI。在启动它之前,请确保你的 Ollama 服务器正在使用 ollama serve 运行。

docker run -d -p 3000:8080 -e WEBUI_AUTH=False -e OLLAMA_BASE_URL=http://host.docker.internal:11434 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

以下是发生的事情的细分:

  • --rm:通过在容器停止时自动移除容器来保持整洁。
  • -d:以“分离”模式运行(在后台),因此您可以继续使用终端。
  • -p 3000:8080:将 Mac 上的端口 3000 映射到容器中的端口 8080(这是您访问 UI 的方式)。
  • -e WEBUI_AUTH=False:禁用 Open WebUI 中的身份验证,非常适合本地使用,但在生产中要小心!
  • -e OLLAMA_BASE_URL=http://host.docker.internal:11434:将 Docker 中的 Open WebUI 连接到 Mac 上的 Ollama 服务器的神奇秘诀。
  • -v open-webui:/app/backend/data:创建一个卷来保存你的聊天和设置。
  • --name open-webui:为我们的容器提供一个友好的名字。
  • ghcr.io/open-webui/open-webui:main:来自 GitHub 的最新版本的 Open WebUI。
专业提示:host.docker.internal 是 Docker Desktop for Mac 的一个特殊功能,允许容器与 Mac 上运行的服务进行通信。这就像为你的 Docker 容器提供了一条通往本地 Ollama 服务器的秘密通道!

运行此命令后,你自己的个人 AI 聊天(具有大量高级功能,全部在本地运行且免费)可在以下网址获得: http://localhost:8080/。你可以在左上角选择通过 Ollama 拉取的所有模型。

打开 WebUI 拥有自己的本地 AI 聊天

如果你想避免设置 Open WebUI 的麻烦并且你正在使用 macOS,请考虑名为 Enchanted 的出色、实用的替代方案。这个开源工具与 Ollama 兼容。你可以直接从 App Store 下载它,这使其成为轻量级入门的绝佳选择。

6、结束语

还记得早上 6:00 的场景吗?铺天盖地的信息、长长的 Slack 消息以及对第一杯咖啡的迫切需求?好吧,是时候为这个故事写一个不同的结局了。

是的,你还是应该先喝杯咖啡。有些东西甚至连人工智能都无法取代!

通过这次旅程,我们发现了本地AI如何改变我们的日常工作流程。从即时代码审查到神奇的思维导图,从总结文章到分析图像——所有这些都在保证我们敏感数据的安全并在我们的控制之下。

但也许最令人兴奋的部分不仅仅是这些工具能做什么——而是你可以用它们做什么。我们创建的那些小助手脚本?它们只是开始。每次你发现自己在执行重复性任务时,请记住:可能有一个本地人工智能解决方案等待着你去制定。

我从简单的脚本开始,但很快发现自己正在构建一个完整的人工智能生态系统工具。这就像拥有一个真正了解你需要什么的超强命令行。

那么,接下来是什么?好吧,这取决于你。工具就在你手中,模型在你的机器上,可能性无穷无尽。也许你会创建完美的工作流程,每周为你的团队节省数小时。或者,也许你会构建一些我们甚至还没有想到的全新东西。

现在,请原谅我,我要写一些 Slack 文章……但别担心,我的同事现在有工具来处理它们了!😉


原文链接:Your Machine, Your AI — The Ultimate Local Productivity Stack with Ollama

汇智网翻译整理,转载请标明出处

Tags