1. 问题背景与现象分析
最近在本地开发环境中使用LangChain框架时遇到了一个典型问题:系统提示找不到langchain.prompts模块,而实际上代码中确实正确引用了这个包。这种情况在使用AI开发框架时并不少见,特别是当框架处于快速迭代阶段时。
具体报错信息通常表现为:
code复制ModuleNotFoundError: No module named 'langchain.prompts'
或者
code复制ImportError: cannot import name 'PromptTemplate' from 'langchain.prompts'
这个问题特别容易出现在以下场景:
- 同时使用本地Ollama模型和LangChain框架
- 项目环境中安装了多个不同版本的LangChain相关包
- 使用了较新的LangChain版本但代码是基于旧版API编写的
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题根源深度解析
2.1 LangChain的模块结构调整
LangChain作为一个快速发展的AI应用框架,其模块结构在0.1.x版本后进行了重大调整。原先集成在核心包中的许多功能被拆分到了子包中,这是导致PromptTemplate导入失败的根本原因。
具体变化包括:
langchain.prompts→langchain_core.promptslangchain.llms→langchain_community.llmslangchain.chains→langchain_core.chains
这种模块化重构虽然提高了框架的可维护性,但也带来了版本兼容性问题。
2.2 依赖冲突分析
另一个常见原因是依赖冲突。当环境中同时存在以下包时,容易出现版本不匹配:
langchain(核心框架)langchain-openai(OpenAI集成)langchain-ollama(Ollama本地模型集成)langchain-community(社区贡献的集成)
这些包如果版本不协调,就会导致模块导入失败。特别是当使用pip install langchain安装了最新版,但其他相关包还停留在旧版本时。
3. 完整解决方案
3.1 基础修复方案
最可靠的解决方法是统一安装指定版本的LangChain生态包:
bash复制# 先卸载现有可能冲突的包
pip uninstall -y langchain langchain-openai langchain-ollama
# 安装指定版本的包
pip install langchain==0.1.24 langchain-openai langchain-ollama -U
这个方案适用于大多数情况,因为0.1.24是一个相对稳定且兼容性好的版本。
3.2 代码适配方案
如果由于项目需求必须使用新版LangChain,则需要调整导入语句:
python复制# 旧版导入方式(0.1.x及之前)
from langchain.prompts import PromptTemplate
# 新版导入方式(0.1.x之后)
from langchain_core.prompts import PromptTemplate
同时建议检查其他相关导入,确保都使用了正确的模块路径。
3.3 环境隔离方案
对于长期项目,强烈建议使用虚拟环境来管理依赖:
bash复制# 创建虚拟环境
python -m venv langchain-env
# 激活环境
source langchain-env/bin/activate # Linux/Mac
langchain-env\Scripts\activate # Windows
# 在干净环境中安装依赖
pip install langchain==0.1.24 langchain-openai langchain-ollama
4. 完整可运行示例代码
以下是一个整合了Ollama本地模型和LangChain的完整示例,已经过测试可稳定运行:
python复制# 导入依赖
from langchain_ollama import ChatOllama
from langchain.prompts import PromptTemplate # 0.1.x版本使用
# from langchain_core.prompts import PromptTemplate # 新版使用
import os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 初始化本地Ollama模型(以qwen2:0.5b为例)
model = ChatOllama(
model="qwen2:0.5b",
temperature=0.7 # 控制生成结果的随机性
)
# 创建提示模板
prompt = PromptTemplate(
template="你是一位专业的程序员。\n请对以下信息进行简短描述:{text}",
input_variables=["text"]
)
# 格式化输入
input_text = prompt.format(text="大模型langchain")
# 调用模型获取响应
output = model.invoke(input_text)
# 输出结果
print("模型回答:")
print(output.content)
5. 高级调试技巧
5.1 依赖树检查
当问题复杂时,可以使用以下命令检查依赖关系:
bash复制pipdeptree | grep -E 'langchain|ollama'
这将显示所有LangChain相关包的版本及其依赖关系,帮助发现版本冲突。
5.2 备选模型方案
如果Ollama模型不可用,可以考虑以下替代方案:
python复制# 使用OpenAI模型替代
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0.7
)
5.3 版本兼容性对照表
| 功能模块 | 旧版(<=0.1.24)导入路径 | 新版(>0.1.24)导入路径 |
|---|---|---|
| PromptTemplate | langchain.prompts | langchain_core.prompts |
| ChatOllama | langchain_ollama | langchain_ollama |
| ChatOpenAI | langchain_openai | langchain_openai |
| LLMChain | langchain.chains | langchain_core.chains |
6. 常见问题排查指南
6.1 问题:安装后仍然报错
可能原因:
- 缓存未清除
- 多个Python环境干扰
解决方案:
bash复制# 清除pip缓存
pip cache purge
# 确认使用的Python解释器
which python # Linux/Mac
where python # Windows
6.2 问题:模型加载缓慢
优化建议:
- 检查Ollama服务是否本地运行
- 减小模型尺寸(如使用qwen2:0.5b而非更大模型)
- 增加超时设置:
python复制model = ChatOllama(
model="qwen2:0.5b",
temperature=0.7,
timeout=60 # 单位秒
)
6.3 问题:提示模板不生效
检查要点:
input_variables是否与template中的变量名匹配- 变量是否包含特殊字符
- 模板字符串是否包含非法缩进
7. 性能优化建议
7.1 批处理请求
对于大量文本处理,可以使用批处理提高效率:
python复制inputs = [
{"text": "大模型langchain"},
{"text": "人工智能编程"}
]
# 批量格式化
batch_inputs = [prompt.format(**item) for item in inputs]
# 批量调用模型
results = model.batch(batch_inputs)
7.2 缓存机制
为重复查询添加缓存:
python复制from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache
set_llm_cache(InMemoryCache())
7.3 流式输出
对于长文本生成,使用流式输出改善用户体验:
python复制for chunk in model.stream(input_text):
print(chunk.content, end="", flush=True)
8. 项目结构建议
对于正式项目,推荐以下结构:
code复制my_llm_project/
├── config/
│ ├── __init__.py
│ └── settings.py # 存放模型配置
├── models/
│ ├── __init__.py
│ └── llm_client.py # 封装模型调用
├── prompts/
│ ├── __init__.py
│ └── templates.py # 集中管理提示模板
└── main.py # 主程序
这种结构便于维护和扩展,特别是当提示模板和模型配置变得复杂时。
9. 安全注意事项
- 不要将API密钥硬编码在代码中,始终使用环境变量
- 对于生产环境,考虑添加速率限制
- 敏感数据不应直接发送给模型
- 本地模型要注意磁盘和内存使用情况
10. 扩展学习资源
- 官方LangChain文档(注意版本匹配)
- Ollama模型库文档
- Python虚拟环境管理最佳实践
- 提示工程(Prompt Engineering)技巧
在实际项目中,我建议定期检查依赖版本,特别是在团队协作或部署到不同环境时。使用requirements.txt或pyproject.toml精确记录依赖版本可以避免大多数兼容性问题。
