conda使用记录

本文安装环境mac os,m系列处理器;python版本:3.12

之前使用的是uv(pip),但是安装faiss的时候一直报各种各样的错误,所以选择使用conda

安装conda

  1. 下载并安装Miniforge
bash 复制代码
# 1. 下载适配的 Miniforge 安装包(国内镜像加速)
curl -L https://mirrors.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-MacOSX-arm64.sh -o Miniforge3.sh

# 2. 赋予执行权限
chmod +x Miniforge3.sh

# 3. 静默安装(-b 不弹窗,-p 指定安装路径,推荐用户目录)
bash Miniforge3.sh -b -p ~/miniforge3
  1. 配置 Conda(解决国内下载慢)
bash 复制代码
# 1. 激活 Conda 环境(临时生效)
source ~/miniforge3/bin/activate

# 2. 配置清华源(加速 Conda 包下载,2026年可用)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
conda config --set show_channel_urls yes

# 3. 配置 pip 清华源(后续安装 LangChain 用)
mkdir -p ~/.pip
echo "[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn" > ~/.pip/pip.conf
  1. 验证安装是否成功
bash 复制代码
# 1. 重启终端,执行激活命令
source ~/miniforge3/bin/activate

# 2. 查看 Conda 版本
conda --version
# 输出类似:conda 24.9.2 即成功

# 3. 查看当前环境
conda info --envs
# 输出包含 base 环境,说明安装完成
  1. 自动激活 Conda(可选)
bash 复制代码
echo 'source ~/miniforge3/bin/activate' >> ~/.zshrc
source ~/.zshrc
  1. 创建自定义专属环境,这里叫ai_tag
bash 复制代码
# 1. 创建 Python 3.12 环境(命名为 ai_rag)
conda create -n ai_rag python=3.12 -y

# 2. 激活该环境
conda activate ai_rag

卸载conda

bash 复制代码
rm -rf ~/miniforge3
sed -i '' '/miniforge3/d' ~/.zshrc  # 移除自动激活配置

conda安装Faiss和numpy

bash 复制代码
conda install numpy=1.26.4 faiss-cpu=1.9.0 -y

conda安装langchain

  1. 激活环境
  2. 用 pip安装 LangChain 核心包
bash 复制代码
pip install langchain langchain-openai。
  1. 用 pip 安装 LangChain 扩展包(必装)
    • LangChain 的 OpenAI 对接、向量库集成等核心功能依赖扩展包,这些包仅在 PyPI 上提供,在 Conda 环境中直接用 pip 安装即可(会自动适配当前 Conda 环境):
bash 复制代码
# 安装核心扩展包(适配你的 RAG 开发)
pip install langchain-openai langchain-community pymilvus -i https://pypi.tuna.tsinghua.edu.cn/simple

#langchain-openai:对接 OpenAI GPT/Embeddings(RAG 核心);
#langchain-community:集成 FAISS/Milvus 等向量库;
#pymilvus:对接 Milvus 向量数据库(可选,若用 Milvus 则装);
#清华源:解决国内下载慢的问题。
  1. 验证安装是否成功
    • 创建测试文件 test_langchain.py,运行以下代码验证:
bash 复制代码
"""
验证代码(适配版本:langchain 1.2.6 + langchain-community 0.4.1 + langchain-openai 1.1.7)
修复:MockEmbeddings 继承 LangChain 官方 Embeddings 抽象类,符合 0.4.1 版本规范
"""
import sys
import subprocess
import numpy as np
import faiss

# ========== 核心导入(严格适配你的版本) ==========
# LangChain 核心
import langchain
import langchain_core
# 关键:导入 LangChain 官方 Embeddings 抽象类
from langchain_core.embeddings import Embeddings
# FAISS 集成(langchain-community 0.4.1 规范)
from langchain_community.vectorstores import FAISS as LangChainFAISS
# 文本拆分器(1.1.0 版本)
from langchain_text_splitters import CharacterTextSplitter

# ========== 版本获取函数 ==========
def get_pkg_version(pkg_name: str) -> str:
    """通过 pip show 获取包版本,避免 __version__ 缺失"""
    try:
        result = subprocess.run(
            [sys.executable, "-m", "pip", "show", pkg_name],
            capture_output=True,
            text=True,
            check=True
        )
        for line in result.stdout.split("\n"):
            if line.startswith("Version:"):
                return line.split(":", 1)[1].strip()
        return "版本解析失败"
    except:
        return "包未安装"

# ========== 1. 版本与环境验证 ==========
print("="*60 + " 环境与版本验证 " + "="*60)
print(f"✅ Python 路径:{sys.executable}")
print(f"✅ NumPy 版本:{np.__version__}")
print(f"✅ FAISS 版本:{faiss.__version__}")
print(f"✅ LangChain 核心版本:{langchain.__version__}")
print(f"✅ LangChain-Core 版本:{langchain_core.__version__}")
print(f"✅ LangChain-Community 版本:{get_pkg_version('langchain-community')}")
print(f"✅ LangChain-OpenAI 版本:{get_pkg_version('langchain-openai')}")
print(f"✅ LangChain-Text-Splitters 版本:{get_pkg_version('langchain-text-splitters')}")
print(f"✅ LangChain-Classic 版本:{get_pkg_version('langchain-classic')}")
print("="*128)

# ========== 2. FAISS 基础功能验证 ==========
print("\n" + "="*60 + " FAISS 核心功能验证 " + "="*60)
VECTOR_DIM = 1536  # 适配 OpenAI Embeddings 1.1.7 版本默认维度
test_vectors = np.random.random((50, VECTOR_DIM)).astype(np.float32)

# 构建 FAISS 索引
faiss_index = faiss.IndexFlatL2(VECTOR_DIM)
faiss_index.add(test_vectors)
print(f"✅ FAISS 索引创建成功,插入 {faiss_index.ntotal} 个向量")

# 测试相似检索
query_vec = np.random.random((1, VECTOR_DIM)).astype(np.float32)
distances, indices = faiss_index.search(query_vec, k=3)
print(f"✅ Top3 相似向量索引:{indices[0]}")
print(f"✅ 对应距离(越小越相似):{distances[0]}")
print("="*128)

# ========== 3. 适配 LangChain 规范的 Mock Embeddings ==========
class MockOpenAIEmbeddings(Embeddings):
    """
    修复核心:继承 LangChain 官方 Embeddings 抽象类
    实现所有必需方法,符合 0.4.1 版本的调用规范
    """
    def embed_documents(self, texts: list[str]) -> list[list[float]]:
        """批量嵌入文档(必需实现)"""
        return [np.random.random(VECTOR_DIM).tolist() for _ in texts]

    def embed_query(self, text: str) -> list[float]:
        """嵌入查询文本(必需实现)"""
        return np.random.random(VECTOR_DIM).tolist()

    # 可选:实现 __call__ 方法,兼容旧版可调用逻辑
    def __call__(self, text: str) -> list[float]:
        return self.embed_query(text)

# ========== 4. LangChain 核心功能验证 ==========
print("\n" + "="*60 + " LangChain 核心功能验证 " + "="*60)
# 4.1 文本拆分器
text_splitter = CharacterTextSplitter(
    chunk_size=200,
    chunk_overlap=20,
    separator="\n"
)
test_text = """
滑雪SSR是短回转半径的滑雪板,板腰窄、转弯灵活,非常适合新手练习基础转弯动作。
FAISS是Meta(原Facebook)开发的高效向量检索库,支持亿级向量的快速相似性检索,是RAG架构的核心组件。
LangChain 1.2.6 兼容 langchain-core 1.2.7,langchain-community 0.4.1 优化了第三方工具集成逻辑。
langchain-openai 1.1.7 适配了 OpenAI 最新的 Embeddings API,默认向量维度为1536。
Conda环境适合安装需要编译的Python包(如FAISS、NumPy),避免本地编译失败的问题。
"""
text_chunks = text_splitter.split_text(test_text.strip())
print(f"✅ 文本拆分完成,共生成 {len(text_chunks)} 个片段:")
for i, chunk in enumerate(text_chunks, 1):
    print(f"   {i}. {chunk[:50]}..." if len(chunk) > 50 else f"   {i}. {chunk}")

# 4.2 初始化合规的 Embeddings 对象
embeddings = MockOpenAIEmbeddings()

# 4.3 构建 LangChain-FAISS 向量库(修复核心)
vector_db = LangChainFAISS.from_texts(
    texts=text_chunks,
    embedding=embeddings,  # 传入合规的 Embeddings 对象
    normalize_L2=True
)
print(f"\n✅ LangChain-FAISS 向量库构建成功,包含 {vector_db.index.ntotal} 个向量")

# 4.4 RAG 相似检索(无报错)
query = "新手适合用滑雪SSR吗?"
similar_docs = vector_db.similarity_search(
    query=query,
    k=2,
    score_threshold=0.8
)
print(f"\n✅ 检索查询:{query}")
print(f"✅ 找到 {len(similar_docs)} 条相关文档:")
for i, doc in enumerate(similar_docs, 1):
    print(f"   {i}. 内容:{doc.page_content}")
    print(f"      元数据:{doc.metadata}\n")

# ========== 5. 最终验证结果 ==========
print("="*128)
print("\n🎉 所有验证项均通过!关键修复总结:")
print(f"   ✅ MockEmbeddings 继承 LangChain 官方 Embeddings 抽象类")
print(f"   ✅ 实现 embed_documents/embed_query 必需方法")
print(f"   ✅ 新增 __call__ 方法,兼容可调用逻辑")
print(f"   ✅ 适配 langchain-community 0.4.1 的 Embeddings 规范")
相关推荐
理智.6293 小时前
Cursor 中使用 Conda 虚拟环境常见问题与彻底解决方案(踩坑实录)
python·conda
小鸡脚来咯10 小时前
conda使用教程
conda
工程师老罗20 小时前
Pycharm下如何新建一个conda环境?
ide·pycharm·conda
工程师老罗20 小时前
conda的常见指令
conda
理智.6291 天前
根据requirements.txt 完成环境中的依赖库导入
python·conda·pip
gs801401 天前
【保姆级】MetaGPT安装避坑指南:Windows+Conda环境下解决依赖冲突、版本过低及配置失效问题
人工智能·windows·conda·metagpt
工程师老罗1 天前
在 PyCharm 的 Conda 环境下如何安装pytorch
pytorch·pycharm·conda
用什么都重名2 天前
Conda 虚拟环境安装配置路径详解
windows·python·conda
心 爱心 爱3 天前
conda下载在服务器中 且环境存在指定目录下面
conda