“
人工智能(AI)通常与云计算、实时数据交换以及基于互联网的应用程序相关联。然而,AI技术的进步使得无需互联网连接就能部署强大的AI系统成为可能。这些离线AI系统为那些连接受限、不可靠或完全不可用的领域开辟了新的应用之门。
。 ”
离线AI的崛起
离线AI是指无需连接互联网即可在本地执行计算、处理数据并交付结果的AI系统。这种能力得益于硬件的改进、边缘计算的发展以及优化的AI模型。此外,具备AI能力的移动和嵌入式设备的兴起进一步推动了对这种系统的需求。
主要驱动因素:
-
边缘计算: 借助NVIDIA Jetson、Google Coral和Apple的Neural Engine等设备,AI计算现在可以在边缘完成,从而减少对云基础设施的依赖。
-
优化模型: TensorFlow Lite和PyTorch Mobile等框架使得可以开发轻量级AI模型,这些模型可以在资源受限的设备上高效运行。
-
数据隐私问题: 离线AI确保敏感数据在本地处理,从而将暴露在外部威胁中的风险降到最低。
离线AI的应用
-
医疗保健: 离线AI赋能便携式医疗设备,无需依赖云系统即可诊断疾病和监测健康状况。
-
自动驾驶汽车: 自动驾驶汽车依靠离线AI实时处理传感器数据并做出决策。
-
偏远地区: 在互联网接入有限或不可用的地区,离线AI提供语言翻译、天气预测和教育工具等基本服务。
-
工业物联网: 制造系统利用离线AI确保更快的决策速度,并减少工厂自动化中的延迟。
让我们构建一个应用程序,它可以接收任何离线信息集并允许您提出问题。
你需要准备的
要理解本文,您需要一台性能强大的机器。您不会依赖云来为您构建模型。您需要强大的本地计算能力。这意味着要么是高端的 Windows/Linux 笔记本电脑,要么是较新的 Mac 之一。是的,您需要一个 GPU。AI 涉及大量计算,为了加快速度,许多计算都被转移到 GPU。在 CPU 和 GPU 上执行所有操作之间的差异是巨大的。
此外,您将下载并使用其他公司和个人构建的标准库、软件包和大型语言模型。但是当您完成操作后,不会有任何数据发送到云端,并且您的应用程序将能够完全离线运行。要开始使用,您需要互联网连接。
此外,我将使用 Python,因此请确保您已安装 Python 3x。
Ollama
Ollama 可帮助您运行本地大型语言模型。有很多方法可以在本地运行大型语言模型,而 Ollama 是最简单的入门方法之一。Ollama 与大型语言模型的关系有点像 Docker 与代码的关系。请注意,Ollama 并不是运行本地语言模型的唯一方法,但它是最容易入门的方法之一,并且拥有一个不错的模型库供您选择。在本地运行语言模型时,还有许多其他选择。一些示例是 hugging face transformers、LLaMA、Mistral、LocalLLaMA、Cerebras 等。
Llama3
首先请继续使用此处的大“下载”按钮安装 Ollama:ollama.com。下载 Ollama 后,继续将其拖放到您的应用程序文件夹并启动它。启动它后,您应该在菜单栏中看到一个 Llama 图标。您还可以访问 http://localhost:11434,它会向您显示一条消息,提示“Ollama 正在运行”。
ollama run llama3
接下来是什么?Ollama 只是引擎。当您开始下载大型语言模型并使用它们时,真正的乐趣就开始了。您可以尝试许多模型。我将使用 Llama3。要运行 Llama3,请启动终端并发出以下命令:
ollama run llama
现在模型已经运行,让我们问它一些问题。例如,"Should i buy EV car or Petrol Car?"您可以在图下中看到结果。不同的模型会以不同的方式处理这个问题。
戴上我的开发者帽子
好的,您可以继续使用 Ollama。只要您乐于仅使用模型创建时的信息来查询世界,它就会为您带来很大的帮助。一些事实和数据可能永远不会改变,例如亚伯拉罕·林肯有多高?唉,他永远不会比以前更高了。但新知识不断被创造出来。而我所处环境中的知识很重要。
我想要做的是以编程方式访问此模型。我想使用 LangChain 创建一个简单的 RAG 应用程序。
第二部分的正文内容从这里开始。
RAG
我讨厌首字母缩略词,所以让我们来定义这个新的首字母缩略词。检索增强生成 (Retrieval-Augmented Generation) 是优化大型语言模型输出的过程,因此它在生成响应之前会引用其训练数据源之外的权威知识库。
像 Llama3 这样的大型语言模型已经对大量数据进行了训练,并使用数十亿个参数为任务生成原始输出。它们可以做很多事情,比如回答问题、翻译语言和完成句子。但它们无法开箱即用地理解您的领域和数据。
RAG 将 LLM 已经很强大的功能扩展到特定领域或组织的内部知识库。最重要的是,您无需支付重新训练模型的费用即可做到这一点。这使得它成为一种非常经济有效的扩展 LLM 的方法,使其对您的上下文有用。
首先,确保 Ollama 正在运行并创建一个新的 Python 项目。我不会在这里深入探讨 Python 的细节,因此在高层次上,我使用 Python 3x 创建了一个 venv(虚拟环境),并安装了以下要求:
本地新建一个文件夹, 我命名AI-With-No-Internet-Connection, 在文件根目录打开CMD执行下面命令, 初始化venv.
python -m venv venv
这里我使用vs-code, 在terminal里激活venv
.\venv\Scripts\activate
根目录新建requirements.txt
langchain
langchain_community
pypdf
docarray
并且使用pip安装
pip install -r requirements.txt
安装完这些要求后,我创建了一个 index.py 文件,可以在其中开始编写一些代码。
让我们从简单的事情开始。我甚至可以调用本地 Llama3 模型并以编程方式向其询问一些简单的问题吗?
首先,将以下导入添加到您的代码中:
from langchain_community.llms import Ollamafrom langchain_community.embeddings import OllamaEmbeddings
MODEL="llama3"model = Ollama(model=MODEL)embeddings = OllamaEmbeddings(model=MODEL)
out = model.invoke("What came first, chicken or egg? Give me a funny and short answer.")print(out)
运行该程序将得到如下的简单输出。
Well, according to top-secret fowl-scientists (it's a thing), the answer is... the dinosaur! Yes, you heard that right - the great-great-grandma of all chickens, the mighty Velociraptor-chicken hybrid, cracked out an egg containing the first chicken. And from that egg, emerged the first chicken, which then laid an egg containing another chicken, and so on. So, in a nutshell (or rather, an eggshell), it's not about which came first, but more like... "the dinosaur-egg-chicken-cycle-of-life"
这只是一个简单的应用, 下一期我们尝试使用PyPDFLoader来加载pdf.
PyPDFLoader 是 langchain_community 中可用的众多文档加载器之一。这些文档加载器中的每一个都负责将给定的输入转换为可用于创建向量存储的文档。我鼓励您探索 langchain_community.document_loaders 中可用的各种其他文档加载器。
感谢阅读 :)