前言:
本文对最近学习 LangChain 的过程进行一个简单的概述,介绍基本的概念、简述需要注意的问题,并提供我觉得当下还不错的学习方法。
1 前期准备
- Python 基础,a little 就行,或者拥有基本的 debug 能力即可上手
- shell 基础,环境问题是所有问题中最头疼的问题,有 shell 命令的基础能快速复现环境即可
- 面向对象思想。可有可无,这是后面自己查看工程结构的必须,减少重复编程。
- 6g+ 的显存 or OPENAI_API_KEY,显卡要求其实不大,以 ChatGLM-6B 为例,6g 显存跑模型没有问题,但是我在实践中出现了刚好吃满 6g,导致写的 langchain 提交不上去的情况,建议使用 6g+ 的显存。对显卡没要求。毕竟跑 1 分钟和跑 5 分钟区别不大。 OPENAI_API_KEY 不需要买 GPT 4.0 的,GPT 3.5 的完全够用了,后面会详细讲配置问题。KEY 也不贵,超过 5 块钱先斟酌下,我买的时候只花了 3.2 哦~
2 避坑指北
下面是在开始前先给大家描述下我遇到的一些错误,以防开始学习之后报错找了一圈发现就在该文档下面 emmmm。
①人工智能/大模型学习路线
②AI产品经理资源合集
③200本大模型PDF书籍
④超详细海量大模型实战项目
⑤LLM大模型系统学习教程
⑥640套-AI大模型报告合集
⑦从0-1入门大模型教程视频
⑧LLM面试题合集
(1)环境问题
建议使用 conda 对环境进行管理,如果你想用本地显存跑模型,强烈建议模型和 langchain 使用两套环境!!! 以防止中途因为一些必要插件关联导致的版本变动,以至于程序无法启动。
- torch && torchvision(据说有80%的小笨蛋在开始就栽在了版本上,然后~就没有然后了)
pyhton
复制代码
# 如果不清楚自己的版本的,可以使用如下代码进行确认:
import torch
print(torch.__version__)
import torchvision
print(torchvision.__version__)
# 我使用的版本如下:
# torch 1.13.1+cu117
# torchvision 0.14.1+cu117
# 版本基本没有优劣之分(因为我也不清楚)
# 在博客 https://blog.csdn.net/shiwanghualuo/article/details/122860521 可以看到对照
# 也可以直接访问:
# https://gitcode.com/pytorch/vision?utm_source=csdn_github_accelerator&isLogin=1
# 安装版本命令 emmm,不教了,不会我觉得可能你不适合学这个
- langchain 环境使用主要包体如下:
requirements.txt
复制代码
chromadb # 存储和查询程式语言片段的数据库
langchain[all]
# 如果报错需要继续补齐 langchain_community langchain_openai等,按报错信息来
fastapi # web api 工具
gradio # 将模型、数据集、文本、图像等内容部署成简单的界面
openai
pydantic # 数据验证和设置库
pypdf # 处理 PDF 文件的库
transformers # Hugging Face 开发的自然语言处理任务的库
unstructured # 处理非结构化数据
uvicorn # 快速的 ASGI 服务器
- 模型环境尽量不要图方便使用人家自带的 python,不是很好管理,new 一个环境然后读取 requirement.txt即可,以 chatglm3 为例,他的文件如下:
requirements.txt
复制代码
# basic requirements
protobuf>=4.25.2
transformers>=4.37.1
tokenizers>=0.15.0
cpm_kernels>=1.0.11
torch>=2.1.0
gradio>=4.16.0
sentencepiece>=0.1.99
sentence_transformers>=2.2.2
accelerate>=0.26.1
streamlit>=1.30.0
fastapi>=0.109.0
loguru~=0.7.2
mdtex2html>=1.3.0
latex2mathml>=3.77.0
# for openai demo
openai>=1.10.0
zhipuai>=2.0.1
pydantic>=2.5.3
sse-starlette>=2.0.0
uvicorn>=0.27.0
timm>=0.9.12
tiktoken>=0.5.2
# for langchain demo
langchain>=0.1.4
langchainhub>=0.1.14
arxiv>=2.1.0
注意: 如果和本文发布时间很近的话不建议使用 GLM3 作为本地模型,目前 LangChain 还没有将 GLM3 的接口放入,需要自己编写。(不过能让你快速了解源码)
(2)LangChain 问题
新技术的到来总是让人兴奋的,langchain 在最近迎来了它的 0.1.0 版本。md学起来贼辛苦好吧~放两张今天写文的时候的截图:
哥们我学的时候还只有 0.1.3 呢艹。
言归正传,langchain 0.0 系列和 0.1 系列最大的差别就是以往很多接口因为它的模块化设计进行了调整。在下面进行简单的举例:
python
复制代码
# 部分包名由 langchain 下放到 langchain_community/langchain_openai
# 下面是常见的最新的引用(含变动)
from langchain_community.document_loaders import UnstructuredURLLoader
from langchain_openai import OpenAI
from langchain_openai import ChatOpenAI
# invoke(Any) 代替执行语句
# 在实操中有两个地方遇到了这个问题:
# eg.1
openaichat = ChatOpenAI(model_name="gpt-3.5-turbo")
# 原 res = openaichat(msg)
res = openaichat.invoke(msg) # 输出内容不影响
# eg.2
llm = OpenAI(max_tokens=1500)
chain = lo