https://www.gravatar.com/avatar/7a0c24f697ea1587001c36d00039b60f?s=240&d=mp

Docker多阶段构建实战:优化镜像大小与构建速度的完整指南

前言 在日常开发中,你是否遇到过这样的问题: Docker 镜像动辄几个 GB,拉取部署要等好几分钟 每次构建都要重新安装所有依赖,CI/CD 流水线慢得让人抓狂 构建环境和运行环境混在一起,镜像里塞了大量不需要的工具 这些问题的根源在于:构建产物和运行环境没有分离。Docker 的多阶段构建(Multi-stage Build)正是为解决这一痛点而生的利器。本文将通过三个真实语言栈的案例,带你掌握这一核心技术。 什么是多阶段构建? 多阶段构建的核心思想非常简单:一个 Dockerfile 中使用多个 FROM 指令,每个阶段只保留最终需要的文件。 1 2 3 4 5 6 7 8 阶段1(构建阶段) 阶段2(运行阶段) ┌─────────────────┐ ┌─────────────────┐ │ FROM ubuntu │ │ FROM alpine │ │ 安装JDK/Maven │ ──→ │ 只复制JAR包 │ │ 编译代码 │ │ 运行应用 │ │ 生成产物 │ │ │ │ (~800MB) │ │ (~200MB) │ └─────────────────┘ └─────────────────┘ 箭头表示只复制构建产物(如二进制文件、编译结果),而非整个构建环境。 案例一:Java Spring Boot 应用 Spring Boot 应用是最典型的受益场景。传统方式用 openjdk:17 基础镜像,最终镜像通常在 500MB 以上。

用Python+LangChain从零搭建RAG系统:让大模型读懂你的私有文档

为什么需要RAG? 大语言模型(LLM)虽然强大,但它有一个致命短板——知识截止日期。ChatGPT不知道你公司上周发布的内部文档,Claude不了解你项目特有的业务逻辑。直接让LLM回答私有领域的问题,轻则答非所问,重则一本正经地胡说八道。 RAG(Retrieval-Augmented Generation,检索增强生成) 就是解决这个问题的利器。它的核心思路非常简单: 检索:根据用户问题,从你的文档库中找到相关片段 增强:把这些片段作为上下文,注入到Prompt中 生成:让LLM基于这些上下文生成准确回答 这种方式不需要微调模型,成本低、见效快,是目前企业级AI应用最主流的架构方案。 技术栈选型 我们用到的技术栈: LangChain:RAG框架,负责文档加载、切分、检索、链式调用 ChromaDB:轻量级向量数据库,本地运行,无需额外部署 OpenAI Embeddings:将文本转为向量表示 OpenAI GPT:生成回答的大模型 完整代码实现 1. 环境准备 1 pip install langchain langchain-openai langchain-community chromadb tiktoken 确保设置了OpenAI API Key: 1 export OPENAI_API_KEY="sk-your-api-key-here" 2. 加载文档 RAG的第一步是加载你的文档。LangChain支持多种数据源,这里我们以本地Markdown文件为例: 1 2 3 4 5 6 7 8 9 10 11 from langchain_community.document_loaders import DirectoryLoader, TextLoader # 加载指定目录下的所有.md文件 loader = DirectoryLoader( "./docs", glob="**/*.md", loader_cls=TextLoader, loader_kwargs={"encoding": "utf-8"} ) documents = loader.load() print(f"共加载 {len(documents)} 个文档片段") 如果你需要加载PDF或Word文档,只需替换对应的Loader:

使用LangChain与ChromaDB构建本地知识库RAG问答系统

前言 在大模型应用开发中,RAG(Retrieval-Augmented Generation,检索增强生成)是最核心的技术范式之一。它通过将外部知识库与大语言模型结合,解决了LLM的"幻觉"问题和知识时效性问题。 本文将从零开始,使用 LangChain 框架和 ChromaDB 向量数据库,构建一个完整的本地知识库问答系统。所有代码均可本地运行,无需依赖云端API。 为什么需要RAG? 直接使用大模型存在以下痛点: 知识截断:模型训练数据有截止日期,无法回答最新问题 幻觉问题:模型会"编造"不存在的信息 领域缺失:通用模型缺乏特定领域的专业知识 数据安全:企业内部数据不适合上传到第三方API RAG的核心思路是:先检索,再生成。从知识库中检索相关文档片段,将其作为上下文注入Prompt,让大模型基于真实数据进行回答。 技术架构 1 2 3 4 5 6 7 用户提问 ↓ [文档加载] → [文本分割] → [向量化] → [ChromaDB存储] ↓ 用户提问 → [Embedding] → [向量检索] → [Top-K相关片段] ↓ [Prompt组装] → [LLM生成回答] 环境准备 安装依赖 1 2 3 4 5 6 7 8 9 10 # 创建虚拟环境 python -m venv rag_env source rag_env/bin/activate # Linux/Mac # rag_env\Scripts\activate # Windows # 安装核心依赖 pip install langchain langchain-community langchain-chroma chromadb pip install sentence-transformers # 本地Embedding模型 pip install unstructured # 文档加载器 pip install tiktoken # Token计算 项目结构 1 2 3 4 5 6 7 8 9 rag_project/ ├── knowledge_base/ # 知识库文档目录 │ ├── doc1.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Mac上通过brew install mysql安装,但是某天突然无法启动,报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)。 网上的解决方案试了一遍没一个有用,真正有用的是 1 rm -rf /opt/homebrew/var/mysql 但是会把所有的内容清空。自己慎重。 删除后重新安装就OK了

2023 11 08 阿里云Linux更新docker

前言 我的系统信息: 1 2 3 Distributor ID: AlibabaCloud(AliyunLinux) Description: Alibaba Cloud Linux (Aliyun Linux) release 2.1903 LTS (Hunting Beagle) Release: 2.1903 aliyun linux 2实际对应的是centos7。默认的docker版本是Docker version 1.13.1, build 7d71120/1.13.1,这个版本已经很老旧了,无法兼容一些新的容器。所以升级是非常有必要的。 卸载旧版本 删除docker 1 2 3 4 5 6 7 8 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 如果无法卸载,则需要先查看安装的docker包。 执行下面的指令: 1 yum list installed | grep docker 打印结果如下: 1 2 3 4 5 6 7 8 docker.