当前位置:   article > 正文

LangChain 入门与避坑指北_chatglm3的half精度是什么意思

chatglm3的half精度是什么意思

前言:

本文对最近学习 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。

(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,不教了,不会我觉得可能你不适合学这个
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • langchain 环境使用主要包体如下:
requirements.txt
复制代码
 chromadb         # 存储和查询程式语言片段的数据库
 langchain[all]
 # 如果报错需要继续补齐 langchain_community langchain_openai等,按报错信息来
 fastapi          # web api 工具
 gradio           # 将模型、数据集、文本、图像等内容部署成简单的界面
 openai
 pydantic         # 数据验证和设置库
 pypdf            # 处理 PDF 文件的库
 transformers     # Hugging Face 开发的自然语言处理任务的库
 unstructured     # 处理非结构化数据
 uvicorn          # 快速的 ASGI 服务器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 模型环境尽量不要图方便使用人家自带的 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

注意: 如果和本文发布时间很近的话不建议使用 GLM3 作为本地模型,目前 LangChain 还没有将 GLM3 的接口放入,需要自己编写。(不过能让你快速了解源码)

(2)LangChain 问题

新技术的到来总是让人兴奋的,langchain 在最近迎来了它的 0.1.0 版本。md学起来贼辛苦好吧~放两张今天写文的时候的截图:

版本1.png

版本2.png 哥们我学的时候还只有 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 = load_summarize_chain(llm, prompt=chinese_prompt)
 # 原 summary = chain.run(news)
 summary = chain.invoke(news)  
 # 实测 invoke 返回内容会包含'output_text'、'input_text'等,'output_text'为原 run 返回内容
 ​
 # 会不会影响使用我目前无法下定论,因为我所处物理环境问题可变参数太多了,
 # 但是建议大家依据新的规范来写,因为控制台在执行的时候会报 warning,且格式真的很丑
 # 有因为不从 langchain_openai 引入导致程序执行不下去的经历,但尚不确认是否为网络问题
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
如何解决 langchain 问题?

目前来看应该还没有很好且直观的途径去查看文档,英文、中文文档的更新都有一定的滞后性。

入门了解架构的话推荐中文文档:LangChain中文网

英文文档会稍微快一点:Introduction |

推荐阅读
相关标签