企业网站托管电话做理财网站
企业网站托管电话,做理财网站,毕业设计用PHP做旅游网站,网站开发过程中遇到的问题保姆级教程#xff1a;用Docker快速部署EmbeddingGemma嵌入模型
你是不是也想在自己的电脑上跑一个AI模型#xff0c;但又担心配置复杂、资源不够#xff1f;今天#xff0c;我就带你用最简单的方式#xff0c;在10分钟内把谷歌最新的轻量级嵌入模型EmbeddingGemma跑起来…保姆级教程用Docker快速部署EmbeddingGemma嵌入模型你是不是也想在自己的电脑上跑一个AI模型但又担心配置复杂、资源不够今天我就带你用最简单的方式在10分钟内把谷歌最新的轻量级嵌入模型EmbeddingGemma跑起来。EmbeddingGemma是谷歌推出的一个只有3亿参数的小巧模型别看它小功能可不弱。它能将任何文字转换成计算机能理解的“向量”这个向量就像文字的“数字指纹”可以用来做搜索、分类、推荐等各种智能任务。最棒的是它专门为手机、笔记本这类资源有限的设备设计普通电脑也能轻松运行。下面我就手把手教你用Docker和Ollama像搭积木一样把它部署起来。1. 准备工作安装Docker和了解核心概念在开始动手之前我们需要确保“工具箱”齐全并简单理解一下我们要做什么。1.1 确保Docker已安装Docker是我们的核心工具它能把模型和它需要的所有环境打包成一个“集装箱”容器让我们一键部署避免复杂的依赖问题。如果你已经安装过Docker打开终端Linux/Mac或命令提示符/PowerShellWindows输入docker --version如果能看到版本号说明已经安装好了。如果你还没安装DockerWindows/Mac用户建议直接去Docker官网下载并安装 Docker Desktop。安装过程基本是“下一步”到底非常简单。Linux用户可以通过包管理器快速安装。例如在Ubuntu上可以执行以下命令sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker安装完成后同样用docker --version命令验证。1.2 理解EmbeddingGemma和Ollama为了让你更清楚我们在做什么我用大白话解释一下EmbeddingGemma嵌入模型想象它是一个“翻译官”。它的工作是把人类写的句子比如“今天天气真好”翻译成计算机能看懂的一长串数字比如[0.1, -0.5, 0.8, ...]共768个数字。这个数字串就是“向量”。计算机通过比较不同句子的向量就能知道它们的意思是否相似。Ollama想象它是一个“模型管家”。它专门负责下载、管理和运行各种AI模型。我们告诉Ollama“我要运行EmbeddingGemma”它就会帮我们处理好所有后台的复杂工作我们只需要通过简单的接口API来使用模型的功能。Docker想象它是一个“标准化集装箱”。我们把“模型管家Ollama”和“翻译官EmbeddingGemma”一起打包进这个集装箱。这样无论你的电脑是Windows、Mac还是Linux环境如何只要运行这个集装箱里面的服务就能一模一样地启动起来。我们的目标就是用Docker启动一个包含了Ollama的集装箱然后让Ollama把EmbeddingGemma模型拉进来并运行最后我们写个小程序去测试它。2. 一键部署启动Ollama服务万事俱备现在我们开始最关键的一步——启动服务。只需要一行命令。打开你的终端输入以下命令并回车docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama别担心我来拆解一下这行命令在做什么docker run告诉Docker要运行一个新的容器。-d让容器在“后台”运行这样终端不会被占用。-v ollama:/root/.ollama创建一个名叫ollama的存储卷并把它挂载到容器里的/root/.ollama目录。这非常重要它保证了我们下载的模型文件会保存在电脑上即使容器删除了模型也不会丢。-p 11434:11434将你电脑的11434端口和容器的11434端口连接起来。这样我们就能通过http://localhost:11434这个地址来访问容器里的Ollama服务了。--name ollama给这个容器起个名字叫ollama方便我们后续管理。ollama/ollama这是我们要运行的“镜像”名称也就是包含了Ollama的标准化集装箱。命令执行后你会看到Docker下载镜像并启动容器。可以通过docker ps命令查看容器是否在运行。如果看到名为ollama的容器状态是Up就说明成功了3. 下载模型让Ollama拉取EmbeddingGemma服务跑起来了但里面还没有模型。我们需要进入容器内部让Ollama去下载EmbeddingGemma。3.1 进入容器内部操作在终端执行以下命令这会让我们进入一个容器的“bash”操作界面docker exec -it ollama bash执行后你的命令行提示符可能会变成类似root容器ID:/#的样子这说明你已经进入了容器内部。3.2 执行模型下载命令在容器内的命令行中输入下载命令ollama pull embeddinggemma:300m这个命令告诉Ollama“去把embeddinggemma这个模型具体是300m这个版本给我下载下来。”下载过程需要一些时间取决于你的网速。你会看到下载进度条。当看到“...done”的提示时就说明模型已经下载并准备好了。小提示如果你在下载过程中遇到网络超时等问题可以尝试退出容器输入exit然后重启Ollama容器docker restart ollama再重新进入容器执行下载命令。下载完成后输入exit退出容器回到你自己电脑的终端。4. 快速测试验证Embedding服务是否工作模型下载好了我们写一个最简单的Python程序来测试一下看看它能不能把文字变成向量。4.1 准备Python测试脚本在你电脑上任意位置比如桌面新建一个文件命名为test_embedding.py。用文本编辑器如VSCode、记事本等打开它把下面的代码完整地复制进去import requests import json def get_embedding(prompt: str, model: str embeddinggemma:latest, url: str http://localhost:11434/api/embeddings): 向Ollama服务请求获取一段文本的嵌入向量。 参数: prompt: 需要转换为向量的文本。 model: 使用的模型名称默认为 embeddinggemma:latest。 url: Ollama API的地址默认连接本地11434端口。 返回: 如果成功返回嵌入向量一个数字列表如果失败返回None。 # 构造请求数据 payload { model: model, prompt: prompt } try: # 发送POST请求 response requests.post(url, datajson.dumps(payload)) response.raise_for_status() # 如果请求失败4xx或5xx状态码抛出异常 # 解析返回的JSON数据 response_data response.json() embedding_vector response_data.get(embedding) if embedding_vector: return embedding_vector else: print(错误响应中没有找到 embedding 字段。) return None except requests.exceptions.ConnectionError: print(f连接错误无法连接到 {url}。请检查Ollama服务是否正在运行。) except requests.exceptions.Timeout: print(请求超时。) except Exception as e: print(f发生未知错误{e}) return None # 这里是测试部分 if __name__ __main__: # 测试句子 test_sentence EmbeddingGemma是一个强大的轻量级嵌入模型。 print(f正在获取句子『{test_sentence}』的嵌入向量...) # 调用函数获取向量 embedding get_embedding(test_sentence, modelembeddinggemma:300m) if embedding: print( 成功取得嵌入向量) print(f向量前5个数字: {embedding[:5]}) print(f向量总长度维度: {len(embedding)}) else: print( 获取嵌入向量失败。)4.2 运行测试脚本运行这个脚本前确保你的电脑安装了Python和requests库。如果没有可以在终端里安装pip install requests然后在终端里导航到你保存test_embedding.py文件的目录运行它python test_embedding.py期待的结果 如果一切顺利你会看到类似下面的输出正在获取句子『EmbeddingGemma是一个强大的轻量级嵌入模型。』的嵌入向量... 成功取得嵌入向量 向量前5个数字: [-0.1518, 0.0163, 0.0221, 0.0018, -0.0273] 向量总长度维度: 768这证明你的EmbeddingGemma服务已经成功运行并且能够将文本转换成768维的向量了5. 进阶体验构建一个简易的智能问答系统光是生成向量可能有点抽象我们用它来做个更实用的小demo一个基于“检索增强生成RAG”的简易问答系统。它会先从一个知识库里找到和问题最相关的句子然后让另一个AI模型基于这些句子来回答问题。5.1 准备知识库和脚本创建知识库文件在同一个目录下新建一个文本文件命名为knowledge.txt。里面可以写一些关于EmbeddingGemma的简单介绍例如EmbeddingGemma是谷歌基于Gemma 3架构开发的开源嵌入模型。 它的参数量为3亿是一个非常轻量级的模型。 该模型能生成文本的向量表示适用于搜索、分类和语义相似度计算。 EmbeddingGemma支持超过100种口语语言。 它可以在手机、笔记本电脑等资源有限的设备上运行。创建RAG测试脚本新建一个文件命名为rag_demo.py复制以下代码。这个代码稍长但我会在注释里详细解释每一步。import numpy as np import requests import json # 复用我们之前写好的获取嵌入向量的函数 def get_embedding(prompt: str, model: str embeddinggemma:300m, url: str http://localhost:11434/api/embeddings): payload {model: model, prompt: prompt} try: response requests.post(url, datajson.dumps(payload)) response.raise_for_status() return response.json().get(embedding) except Exception as e: print(f获取嵌入向量失败: {e}) return None # 计算两个向量的余弦相似度衡量相关性的核心方法 def cosine_similarity(vec1, vec2): # 点积除以模长的乘积结果越接近1表示越相似 return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2)) # 从知识库文件中读取内容并分割成句子 def load_and_split_knowledge(file_path): with open(file_path, r, encodingutf-8) as f: text f.read() # 简单按句号、问号、感叹号分割句子 sentences [] for line in text.split(\n): if line.strip(): # 这是一个简单的分割逻辑实际应用可能需要更精细的分句器 for sent in line.replace(, 。).replace(, 。).split(。): if sent.strip(): sentences.append(sent.strip()) return sentences # 主函数问答演示 def simple_rag_qa(question, knowledge_sentences, top_k3): 简易RAG问答流程 1. 将用户问题转换为向量。 2. 计算问题向量与知识库中每个句子向量的相似度。 3. 选出最相似的前top_k个句子作为上下文。 4. 将上下文和问题组合发送给大语言模型生成答案。 print(f\n 用户问题: {question}) # 1. 获取问题的向量 question_embedding get_embedding(question) if not question_embedding: print( 无法获取问题的向量。) return question_embedding np.array(question_embedding) # 2. 计算与知识库中所有句子的相似度 print( 正在知识库中检索相关信息...) similarities [] for sent in knowledge_sentences: sent_embedding get_embedding(sent) if sent_embedding: sim cosine_similarity(question_embedding, np.array(sent_embedding)) similarities.append((sim, sent)) # 3. 按相似度排序选出最相关的几句 similarities.sort(keylambda x: x[0], reverseTrue) top_contexts [sent for _, sent in similarities[:top_k]] print(f 找到最相关的 {len(top_contexts)} 条信息:) for i, ctx in enumerate(top_contexts, 1): print(f {i}. {ctx}) # 4. 模拟生成答案这里简化了实际应调用LLM API # 我们只是把相关句子拼接起来作为“答案”进行演示 print( 生成的答案基于检索到的信息:) simulated_answer 。.join(top_contexts) 。 print(f 「{simulated_answer}」) # 可选如果你也部署了Gemma3n等文本生成模型可以在此调用真正的生成API # generated_answer ask_llm(question, top_contexts) # print(f 「{generated_answer}」) # 程序入口 if __name__ __main__: # 加载知识库 print( 正在加载知识库...) knowledge_base load_and_split_knowledge(knowledge.txt) print(f 知识库加载完成共有 {len(knowledge_base)} 条知识。) # 为知识库中的所有句子预计算嵌入向量实际应用建议存储起来避免每次计算 print(⚙ 正在为知识库生成嵌入向量首次运行较慢...) knowledge_with_embeddings [] for sent in knowledge_base: emb get_embedding(sent) if emb: knowledge_with_embeddings.append((sent, np.array(emb))) print( 知识库向量化完成。) # 开始问答测试 test_questions [ EmbeddingGemma是什么, 它支持多少种语言, 它能在什么设备上运行 ] # 提取出句子列表供后续函数使用这里为了演示函数内部会重新计算实际应优化 sentence_list [item[0] for item in knowledge_with_embeddings] for q in test_questions: simple_rag_qa(q, sentence_list)5.2 运行RAG演示确保knowledge.txt和rag_demo.py在同一个文件夹下然后在终端运行python rag_demo.py你会看到程序首先加载知识库并将其中的句子全部转换成向量这个过程在首次运行时需要一些时间然后针对每一个测试问题它会将问题转换成向量。快速从知识库中找到意思最相近的句子。将这些句子作为“证据”组合起来形成一个模拟的答案。这个演示虽然简单但它完整展示了EmbeddingGemma在构建智能应用如客服机器人、知识库问答中的核心作用快速、准确地从海量文本中找到相关信息。6. 总结与后续探索恭喜你跟着这篇教程你已经完成了** 环境准备**确认了Docker这个强大工具。** 服务部署**用一行命令启动了Ollama模型管理服务。** 模型下载**轻松获取了谷歌的EmbeddingGemma嵌入模型。** 功能验证**编写并运行了测试程序成功将文本转换为向量。** 进阶应用**体验了如何用嵌入模型构建一个简易的智能检索问答原型。EmbeddingGemma模型体积小、速度快特别适合作为你AI项目中的“文本理解”模块。你可以把它用于文档检索快速从公司内部文档中找到相关内容。智能客服匹配用户问题与标准答案库。内容推荐根据用户浏览的文章推荐相似内容。文本分类自动给新闻、邮件等内容打标签。遇到问题怎么办模型下载慢或失败可以尝试重启Ollama容器 (docker restart ollama)或检查网络连接。API连接错误确保Ollama容器正在运行 (docker ps)并确认使用的是正确的端口 (11434)。想尝试其他模型Ollama支持众多模型进入容器后使用ollama list查看已下载模型使用ollama pull 模型名下载新模型。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。