3. 开发环境搭建:Python虚拟环境配置、Docker部署Elasticsearch与Kibana、安装依赖库
说实话,很多初学者在搭建环境这一步就卡住了。我见过太多人花了两三天装包,最后发现版本冲突,心态直接崩了。嗯,这一章咱们就把这事彻底捋清楚。
我会带你一步步搞定三件事:Python虚拟环境、Docker部署ES和Kibana、以及核心依赖库的安装。这三件事说白了就是给知识库项目打好地基,地基稳了,后面盖楼才不慌。
3.1 Python虚拟环境:为什么必须搞?
你想想看,一个项目要装LangChain,另一个项目要装Flask,它们可能依赖同一个包的不同版本。如果不隔离,那就是一场灾难。我在项目中遇到过好几次,因为全局环境装了个新包,结果把旧项目的依赖搞崩了,排查了一整天。
虚拟环境就是干这个的——每个项目有自己的小天地,互不干扰。
3.1.1 创建虚拟环境
我个人习惯用 venv,它是Python自带的,不需要额外安装。操作很简单:
# 创建虚拟环境,命名为 fin_env
python -m venv fin_env
# 激活虚拟环境(Windows)
fin_env\Scripts\activate
# 激活虚拟环境(Mac/Linux)
source fin_env/bin/activate
激活成功后,命令行前面会出现 (fin_env) 的标识。这时候你安装的所有包,都只会在这个环境里生效。
.venv 或 env,这样一眼就能看出来。记得把虚拟环境文件夹加到 .gitignore 里,别提交到代码仓库。
3.1.2 管理依赖
依赖管理是门学问。我见过有人直接把所有包都列在 requirements.txt 里,结果别人一装就报错。为什么?因为没锁定版本号。
正确的做法是:
# 生成当前环境的依赖清单(带版本号)
pip freeze > requirements.txt
# 别人拿到项目后,一键安装
pip install -r requirements.txt
举个例子,我的 requirements.txt 长这样:
langchain==0.1.0
transformers==4.36.0
elasticsearch==8.11.0
torch==2.1.0
pip freeze > requirements.txt 把系统全局的包都导出来。我曾经犯过这个错,结果别人装的时候发现一堆莫名其妙的包,还冲突。正确的做法是:先激活虚拟环境,再执行这个命令。
3.2 Docker部署Elasticsearch与Kibana
Elasticsearch(简称ES)是知识库的搜索引擎,Kibana是它的可视化界面。用Docker部署,说白了就是拉个镜像、跑个容器,几分钟搞定。
我个人强烈推荐用Docker Compose,因为它可以把ES和Kibana一起管理,省心省力。
3.2.1 编写docker-compose.yml
在项目根目录下创建一个 docker-compose.yml 文件:
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: es-knowledge
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
container_name: kibana-knowledge
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- "5601:5601"
depends_on:
- elasticsearch
volumes:
es_data:
这里有几个关键点:
- discovery.type=single-node:单节点模式,开发环境够用了
- xpack.security.enabled=false:关闭安全认证,省得折腾证书
- ES_JAVA_OPTS:限制内存,别让ES把电脑吃爆了
3.2.2 启动服务
# 启动ES和Kibana
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f elasticsearch
启动后,访问 http://localhost:9200 能看到ES的JSON响应,访问 http://localhost:5601 进入Kibana界面。
避坑指南: 我曾经在Mac上遇到过ES启动失败,原因是Docker分配的内存不够。解决办法是在Docker Desktop的设置里,把内存调到4GB以上。Windows用户也要注意,WSL2的内存限制同样会影响。
3.3 安装核心依赖库
依赖库的安装顺序有讲究。我建议先装PyTorch,再装Transformers,最后装LangChain。为什么?因为LangChain依赖Transformers,而Transformers又依赖PyTorch。按顺序装,能避免版本冲突。
3.3.1 安装PyTorch
PyTorch是深度学习框架,用来跑模型。去官网 pytorch.org 选择你的配置,复制命令即可:
# CPU版本(大多数开发环境够用)
pip install torch torchvision torchaudio
# GPU版本(如果有NVIDIA显卡)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
3.3.2 安装Transformers
Transformers是Hugging Face的库,提供了大量预训练模型:
pip install transformers==4.36.0
装完后可以验证一下:
python -c "from transformers import pipeline; print('Transformers安装成功')"
3.3.3 安装LangChain
LangChain是知识库的核心框架,负责编排LLM调用和文档处理:
pip install langchain==0.1.0
pip install langchain-community # 社区扩展包
pip install langchain-openai # OpenAI集成
3.3.4 安装Elasticsearch客户端
Python连接ES需要客户端库:
pip install elasticsearch==8.11.0
3.3.5 其他辅助库
pip install tiktoken # Token计数
pip install pypdf # PDF解析
pip install sentence-transformers # 文本向量化
pip install chromadb # 向量数据库(备用)
3.4 验证环境
全部装完后,跑一个简单的测试脚本,确保所有组件都能正常工作:
# test_env.py
from elasticsearch import Elasticsearch
from langchain.llms import OpenAI
from transformers import pipeline
# 测试ES连接
es = Elasticsearch("http://localhost:9200")
print(f"ES连接状态: {es.ping()}")
# 测试Transformers
classifier = pipeline("sentiment-analysis")
result = classifier("I love this course!")
print(f"情感分析结果: {result}")
# 测试LangChain
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
print("LangChain加载成功")
docker ps 看一眼,如果容器没启动,用 docker-compose logs 看日志,90%的问题都能找到答案。
3.5 本章知识体系
下面这张图帮你理清整个开发环境的架构:
这张图展示了三层架构:最底层是Docker容器(ES和Kibana),中间层是Python依赖库,最上层是虚拟环境。每一层都独立运行,但又紧密协作。
好了,环境搭建就到这里。你跟着操作一遍,应该半小时内就能搞定。如果遇到问题,别慌,先看日志,再查文档,实在不行就重启——我当年就是这么过来的。