核心内容摘要
《御手洗家的破洞》:都市男女的“心”洞,这里有你我她的缩影
系统介绍mbp pro
Ollama 安装与配置
1 跨平台安装指南Ollama 作为本地运行大模型的利器支持三大主流操作系统# macOS一键安装 # Windows用户 访问官网 https://ollama.com/download 下载安装包 # Linux安装Ubuntu/Debian为例 curl -fsSL https://ollama.com/install.sh | sudo bash sudo usermod -aG ollama $USER # 添加用户权限 sudo systemctl start ollama # 启动服务
2 服务验证ollama -v # 输出ollama version is
0.
7出现上述则表示安装成功可浏览器访问http://localhost:11434/验证
Deepseek 模型部署
1 模型下载与加载以 deepseek r1 模型为例访问https://ollama.com/library/deepseek-r1默认为 7b 模型如需其他模型可以在当前页搜索所需模型模型详情页复制安装命令ollama run deepseek-r1安装完成后在终端执行ollama run deepseek-r1 # 执行后 pulling manifest pulling 96c415656d
.. 100% ▕██████████████▏
7 GB pulling 369ca498f
.. 100% ▕██████████████▏ 387 B pulling 6e4c38e1172f... 100% ▕██████████████▏
1 KB pulling f4d24e9138dd... 100% ▕██████████████▏ 148 B pulling 40fb844194b
.. 100% ▕██████████████▏ 487 B verifying sha256 digest writing manifest success Send a message (/? for help) 当看到上述提示即可开始模型对话。
mac 后台标识win 后台标识见任务栏托盘区
2 模型验证测试运行交互式对话测试请用Python写一个快速排序算法当看到完整代码输出说明模型已成功加载。
硬件要求建议最低配置16GB 内存 8GB 显存推荐配置32GB 内存 16GB 显存RTX 3060 级别
安装交互 ui
1 chatbox下载地址chatboxai.app配置本地模型进入设置页面选择 ollama api (本地部署)配置本机地址默认http://
127.
0.
1:11434至此即可开启问答模式
2 Page Assist 浏览器插件安装地址Page Assist - 本地 AI 模型的 Web UI安装后简单配置即可开启问答模式功能丰富可以参考官方引导本插件支持本地知识库建设因本次使用 Dify 建设在此不赘述。
Dify 知识库搭建参考文档地址Docker Compose 部署
1 环境准备
拉取源代码准备环境# mac os # 克隆 Dify 源代码至本地环境。
git clone https://github.com/langgenius/dify.git # 进入 Dify 源代码的 Docker 目录 cd dify/docker # 复制环境配置文件cp .env.example .env
启动 Docker 容器需要先安装 D ockerdocker compose up -d # 如果版本是 Docker Compose V1使用以下命令 docker-compose up -d # 正常返回 [] Running 74/9 ✔ db Pulled
8
2s ✔ sandbox Pulled
1
7s ✔ weaviate Pulled
5
5s ✔ web Pulled
1
0s ✔ redis Pulled
8
7s ✔ api Pulled
2
8s ✔ worker Pulled
2
8s ✔ ssrf_proxy Pulled
4
0s ✔ nginx Pulled
1
7s [] Running 11/11 ✔ Network docker_default Created
0s ✔ Network docker_ssrf_proxy_network Created
0s ✔ Container docker-db-1 Started
1s ✔ Container docker-web-1 Started
1s ✔ Container docker-redis-1 Started
1s ✔ Container docker-sandbox-1 Started
1s ✔ Container docker-weaviate-1 Started
1s ✔ Container docker-ssrf_proxy-1 Started
1s ✔ Container docker-api-1 Started
7s ✔ Container docker-worker-1 Started
7s ✔ Container docker-nginx-1 Started
8s在此阶段可能会遇到下列失败的情况可以尝试切换源解决 我当时的条件修改配置后重启 docker办公网环境下docker compose up -d [] Running 9/9 ✘ web Error context canceled
1
9s ✘ redis Error context canceled
1
9s ✘ db Error context canceled
1
9s ✘ nginx Error context canceled
1
9s ✘ ssrf_proxy Error context canceled
1
9s ✘ sandbox Error Head https://registry-
do...
1
9s ✘ api Error context canceled
1
9s ✘ worker Error context canceled
1
9s ✘ weaviate Error context canceled
1
9s Error response from daemon: Head https://registry-
docker.io/v2/langgenius/dify-sandbox/manifests/
0.
10: Get https://auth.docker.io/token?scoperepository%3Alanggenius%2Fdify-sandbox%3Apullserviceregistry.docker.io: EOF解决方法右上角齿轮图标进入设置 - Docker engine在配置中添加写入以下内容 ocker{ // ... registry-mirrors: [ https://docker.hpcloud.cloud, https://docker.m.daocloud.io, https://docker.unsee.tech, https://docker.1panel.live, http://mirrors.ustc.edu.cn, https://docker.chenby.cn, http://mirror.azure.cn, https://dockerpull.org, https://dockerhub.icu, https://hub.rat.dev ]}
2 Dify 创建聊天访问http://localhost/默认 80 端口 进入 dify首次进入初始化设置账号密码点击 Dify 平台右上角头像 → 设置 → 模型供应商选择 Ollama轻点“添加模型”。
在配置 url 时因为是 docker 服务http://localhost:11434 存在无法访问的情况可以尝试http://host.docker.internal:
至此可以开始创建应用在主页选择 全部 - 创建空白应用 - 填入应用信息即可
3 Dify 知识库创建主页选择 知识库 - 创建知识库 - 上传知识 - 等待处理完成进入聊天应用选择刚才创建的知识库即可开始带有私域知识的沟通
应用测试
1 翻译场景
本地客户端具有部分国际化测试文件需要执行翻译格式示例如下多层嵌套的 json 格式value 为string类型。
需要利用大模型对整个 json 文件进行翻译将中文翻译为英文后按原格式返回// zh.json { window: { willUnload: { title: 确认刷新当前页面吗?, message: 系统可能不会保存您做的更改, unload_bt: 重新加载, cancel_bt: 取消 } } } ocker
实际应用测试以deepseek-r1:7b/14b模型做测试。
得到结果如下
执行脚本trans.jsconst fs require(fs); const axios require(axios); //
读取本地JSON文件 const readJsonFile (filePath) { return new Promise((resolve, reject) { fs.readFile(filePath, utf8, (err, data) { if (err) { reject(err); } else { resolve(JSON.parse(data)); } }); }); }; const MODEL deepseek-r1:14b; //
调用本地大模型接口进行翻译 const translateText async (text, key) { let response; try { console.time(run worker ${key}); response await axios.post(http://localhost:11434/api/generate, { // model: deepseek-r1:7b, model: MODEL, prompt: 有部分客户端国际化的配置文件内容为json格式需要翻译要求按步骤进行翻译
将中文翻译为英文
保持原有json格式不变将value替换成翻译后的文本
你始终以合法的JSON格式响应返回结果格式如: {key1:翻译后的文本1,key2:翻译后的文本2}直接返回结果不需要符号包裹 配置文件 ${JSON.stringify(text)}, stream: false, }); console.timeEnd(run worker ${key}); const splitText /think; const startIndex response.data.response.indexOf(splitText); const result response.data.response .slice(startIndex splitText.length) .trim() .replace(/|/g, ); // console.log(response.data.response:, response.data.response, JSON.parse(result), result) return JSON.parse(result); // 假设接口返回的翻译结果在response.data.translatedText中 } catch (error) { console.error(翻译出错:, key); return translateText(text, key); // 如果翻译失败返回原文 } }; //
并行翻译逻辑手动控制并发 const translateJson async (jsonData, concurrency
{ const entries Object.entries(jsonData); const translatedData {}; let currentIndex 0; // 当前处理的任务索引 // 定义工作线程每个线程不断处理下一个任务 const worker async () { while (currentIndex entries.length) { const index currentIndex; if (index entries.length) break; // 所有任务已完成 const [key, value] entries[index]; try { translatedData[key] await translateText(value, key); } catch (error) { translatedData[key] value; // 保留原文 } } }; // 启动指定数量的工作线程 const workers Array(concurrency).fill(null).map(worker); await Promise.all(workers); // 等待所有线程完成 const result {}; // 保持原有顺序 entries.forEach(([key, value]) { result[key] translatedData[key] || value; }); return result; }; //
将翻译后的内容生成新的文件 const writeTranslatedJson (filePath, data) { return new Promise((resolve, reject) { fs.writeFile(filePath, JSON.stringify(data, null,
, utf8, (err) { if (err) { reject(err); } else { resolve(); } }); }); }; function compareObjectsWithPath(obj1, obj2, path ) { // 类型不同时直接返回路径 if (typeof obj1 ! typeof obj
{ return { success: false, path: path || root }; } // 处理可遍历对象对象或数组 if (typeof obj1 object obj1 ! null obj2 ! null) { const isArr1 Array.isArray(obj
; const isArr2 Array.isArray(obj
; // 数组类型不一致 if (isArr1 ! isArr
{ return { success: false, path: path || root }; } if (isArr
{ // 数组长度不同 if (obj
length ! obj
length) { return { success: false, path: path || root }; } // 递归检查数组元素 for (let i 0; i obj
length; i) { const currentPath ${path}[${i}]; const result compareObjectsWithPath(obj1[i], obj2[i], currentPath); if (!result.success) return result; } return { success: true }; } else { // 检查是否为纯对象字面量对象 const isPlainObj1 isPlainObject(obj
; const isPlainObj2 isPlainObject(obj
; if (isPlainObj1 ! isPlainObj
{ return { success: false, path: path || root }; } // 非纯对象如 Date、RegExp需检查是否均为字符串 if (!isPlainObj
{ return typeof obj1 string typeof obj2 string ? { success: true } : { success: false, path: path || root }; } // 合并所有 key 并检查数量 const keys1 Object.keys(obj
; const keys2 Object.keys(obj
; const allKeys new Set([...keys1, ...keys2]); if (allKeys.size ! keys
length || allKeys.size ! keys
length) { return { success: false, path: path || root }; } // 递归检查每个属性 for (const key of allKeys) { const currentPath path ? ${path}.${key} : key; if (!keys
includes(key) || !keys
includes(key)) { return { success: false, path: currentPath }; } const result compareObjectsWithPath( obj1[key], obj2[key], currentPath ); if (!result.success) return result; } return { success: true }; } } else { // 基本类型检查是否均为字符串 return typeof obj1 string typeof obj2 string ? { success: true } : { success: false, path: path || root }; } } // 判断是否为纯对象字面量对象 function isPlainObject(value) { return Object.prototype.toString.call(value) [object Object]; } // 主函数 const main async () { console.time(run main); const inputFilePath ./locales/zh.json; // 输入的JSON文件路径 const outputFilePath output_${MODEL}.json; // 输出的JSON文件路径 try { // 读取JSON文件 const jsonData await readJsonFile(inputFilePath); // 翻译JSON内容 const translatedData await translateJson(jsonData); // 将翻译后的内容写入新文件 await writeTranslatedJson(outputFilePath, translatedData); console.log( 翻译完成结果是否存在遗漏项, compareObjectsWithPath(jsonData, translatedData) ); console.log(翻译完成结果已写入:, outputFilePath); } catch (error) { console.error(处理过程中出错:, error); } console.timeEnd(run main); }; // 执行主函数 main();7brun worker window: 1:
1
909 (m:ss.mmm) 翻译出错: window run worker contextMenu: 1:
1
915 (m:ss.mmm) 翻译出错: contextMenu run worker autoUpdater: 1:
2
182 (m:ss.mmm) run worker menu: 1:
5
272 (m:ss.mmm) run worker openWindowWarn: 2:
0
219 (m:ss.mmm) 翻译出错: openWindowWarn run worker contextMenu:
5
257s 翻译出错: contextMenu run worker createPreloadFileWarn: 1:
0
595 (m:ss.mmm) 翻译出错: createPreloadFileWarn run worker window: 1:
1
320 (m:ss.mmm) 翻译出错: window run worker openWindowWarn:
4
933s run worker renderer: 1:
0
620 (m:ss.mmm) run worker contextMenu:
5
129s run worker createPreloadFileWarn:
5
205s run worker window: 1:
1
067 (m:ss.mmm) 翻译出错: window run worker window:
1
583s 翻译出错: window run worker window:
1
479s 翻译出错: window run worker window:
5
783s 翻译完成结果是否存在遗漏项 { success: false, path: menu } 翻译完成结果已写入: output_deepseek-r1:7b.json run main: 5:
0
166 (m:ss.mmm)  ---------------- run worker openWindowWarn:
2
835s 翻译出错: openWindowWarn run worker window:
4
317s 翻译出错: window run worker contextMenu: 1:
0
365 (m:ss.mmm) 翻译出错: contextMenu run worker openWindowWarn:
4
320s run worker window: 1:
0
580 (m:ss.mmm) 翻译出错: window run worker menu: 2:
0
575 (m:ss.mmm) 翻译出错: menu run worker contextMenu: 1:
0
158 (m:ss.mmm) run worker autoUpdater: 2:
0
553 (m:ss.mmm) run worker createPreloadFileWarn: 1:
4
123 (m:ss.mmm) run worker window: 1:
2
518 (m:ss.mmm) 翻译出错: window run worker renderer: 1:
4
725 (m:ss.mmm) run worker menu: 1:
5
031 (m:ss.mmm) 翻译出错: menu run worker window:
5
867s run worker menu: 1:
1
267 (m:ss.mmm) 翻译完成结果是否存在遗漏项 { success: false, path: menu } 翻译完成结果已写入: output_deepseek-r1:7b.json run main: 5:
1
880 (m:ss.mmm) 翻译结果window: { willUnload: { title: What should you confirm before refreshing the current page?, message: the system might not save your changes, unload_bt: Reload, cancel_bt: Cancel } },14brun worker window: 2:
1
983 (m:ss.mmm) run worker contextMenu: 2:
1
554 (m:ss.mmm) run worker autoUpdater: 3:
0
960 (m:ss.mmm) run worker menu: 4:
0
753 (m:ss.mmm) run worker openWindowWarn: 4:
1
074 (m:ss.mmm) run worker createPreloadFileWarn: 2:
0
443 (m:ss.mmm) run worker renderer: 2:
2
099 (m:ss.mmm) 翻译完成结果是否存在遗漏项 { success: true } 翻译完成结果已写入: output_deepseek-r1:14b.json run main: 4:
3
673 (m:ss.mmm) ------------------------ run worker autoUpdater: 1:
3
068 (m:ss.mmm) run worker openWindowWarn: 1:
5
715 (m:ss.mmm) run worker window: 2:
0
907 (m:ss.mmm) run worker contextMenu: 2:
1
214 (m:ss.mmm) run worker renderer: 1:
3
631 (m:ss.mmm) run worker createPreloadFileWarn: 2:
2
484 (m:ss.mmm) run worker menu: 4:
1
409 (m:ss.mmm) 翻译出错: menu run worker menu: 2:
0
482 (m:ss.mmm) 翻译完成结果是否存在遗漏项 { success: true } 翻译完成结果已写入: output_deepseek-r1:14b.json run main: 6:
1
900 (m:ss.mmm)翻译结果window: { willUnload: { title: Confirm to refresh the current page?, message: The system may not save your changes., unload_bt: Reload, cancel_bt: Cancel } },
整体体验下来14b 模型在翻译工作上比 7b 模型更为准确一次性翻译成功率高。
7B 模型翻译结果噪声多返回结果可序列化效果差。
翻译结果远远不如 14b。
结论14b 在 macos 执行效率能满足特定业务场景要求想入门 AI 大模型却找不到清晰方向备考大厂 AI 岗还在四处搜集零散资料别再浪费时间啦2025 年AI 大模型全套学习资料已整理完毕从学习路线到面试真题从工具教程到行业报告一站式覆盖你的所有需求现在全部免费分享扫码免费领取全部内容
学习必备100本大模型电子书26 份行业报告 600 套技术PPT帮你看透 AI 趋势想了解大模型的行业动态、商业落地案例大模型电子书这份资料帮你站在 “行业高度” 学 AI
100本大模型方向电子书
26 份行业研究报告覆盖多领域实践与趋势报告包含阿里、DeepSeek 等权威机构发布的核心内容涵盖职业趋势《AI 职业趋势报告》《中国 AI 人才粮仓模型解析》商业落地《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》领域细分《AGI 在金融领域的应用报告》《AI GC
实践案例集》行业监测《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。
600套技术大会 PPT听行业大咖讲实战PPT 整理自
年热门技术大会包含百度、腾讯、字节等企业的一线实践安全方向《端侧大模型的安全建设》《大模型驱动安全升级腾讯代码安全实践》产品与创新《大模型产品如何创新与创收》《AI 时代的新范式构建 AI 产品》多模态与 Agent《Step-Video 开源模型视频生成进展》《Agentic RAG 的现在与未来》工程落地《从原型到生产AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。
求职必看大厂 AI 岗面试 “弹药库”300 真题 107 道面经直接抱走想冲字节、腾讯、阿里、蔚来等大厂 AI 岗这份面试资料帮你提前 “押题”拒绝临场慌
107 道大厂面经覆盖 Prompt、RAG、大模型应用工程师等热门岗位面经整理自
年真实面试场景包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题每道题都附带思路解析
102 道 AI 大模型真题直击大模型核心考点针对大模型专属考题从概念到实践全面覆盖帮你理清底层逻辑
97 道 LLMs 真题聚焦大型语言模型高频问题专门拆解 LLMs 的核心痛点与解决方案比如让很多人头疼的 “复读机问题”
路线必明 AI 大模型学习路线图1 张图理清核心内容刚接触 AI 大模型不知道该从哪学起这份「AI大模型 学习路线图」直接帮你划重点不用再盲目摸索路线图涵盖 5 大核心板块从基础到进阶层层递进一步步带你从入门到进阶从理论到实战。
L1阶段:启航篇丨极速破界AI新时代L1阶段了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理、
关键技术以及大模型应用场景。
L2阶段攻坚篇丨RAG开发实战工坊L2阶段AI大模型RAG应用开发工程主要学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。
L3阶段跃迁篇丨Agent智能体架构设计L3阶段大模型Agent应用架构进阶实现主要学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造Agent智能体。
L4阶段精进篇丨模型微调与私有化部署L4阶段大模型的微调和私有化部署更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。
L5阶段专题集丨特训篇 【录播课】