初识LangChain: LLM大模型与AI应用的粘合剂

发布于:2024-04-20 ⋅ 阅读:(27) ⋅ 点赞:(0)

是什么以及发展过程

推理和响应, 主要是搜索和推理结合

优劣势

环境搭建

  • Python环境
  • Jupyter Notebook 的安装与使用
  • LangChain安装

Python简介

  • 高级的接近人类语言的编程语言,易于学习
  • 动态语言
  • 直译式语言,可以跳过编译逐行执行代码
  • 广泛应用于web应用、软件、数据科学和机器学习
  • Al方向的主流语言
  • 活跃的python社区
  • 数据巨大且丰富的库

安装Python版本管理工具, pyenv 可以管理多个 python 的版本。

brew update
brew install pyenv

安装Python3.11

pyenv install 3.11.5

升级pip

sudo python3.11 -m pip install --upgrade pip

Jupyter Notebook简介

安装jupyter notebook:

# 安装jupyter
pip3 install jupyter

# 启动jupyter
jupyter notebook

安装jupyter-lab

# 安装
pip3 install jupyterlab

# 启动
jupyter lab
  • 界面: Jupyter Notebook提供了基于单个文档的界面,每个文档称为一个notebook,而JupyterLab提供了更丰富的多文档界面,可以同时打开多个notebook、代码文件、终端等。
  • 插件支持: JupyterLab有更强大的插件支持,可以扩展其功能,例如添加新的编辑器、调试器等。
  • 集成性: JupyterLab集成了更多的工具和功能,例如文件浏览器、终端、命令面板等,使得整个数据分析和开发过程更加流畅和高效。

可能遇到的问题

打开jupyter lab网页提示报错:

JupyterLab Error JupyterLab application assets not found in
“/opt/homebrew/Cellar/python@3.10/3.10.10_1/Frameworks/Python.framework/Versions/3.10/share/jupyter/lab” Please run jupyter lab build or use a different app directory

根据提示执行命令jupyter lab build查看控制台显式的报错:

Please install nodejs >=18.0.0 before continuing

所以可能是node版本导致不能build成功

查看node版本, 并切换:

重新build再重启 jupyter lab 即可

openAI-key获取

网页上GPT3.5以下都是免费使用的, 只是API调用在3.5和4.0都需要收费的, 可以使用国内的代理服务 F2API

注册后直接使用key 和代理即可, 调用的时候就可以直接调用openAI的api服务

LangChain的第一个实例

打开jupyter lab:

卸载和安装langchain和openai

# 卸载
! pip3 uninstall langchain -y
! pip3 uninstall openai -y

# 安装 langchain
! pip3 install --upgrade langchain==0.0.279 -i https://pypi.org/simple
#如果没有科学上网,可以用这个命令安装
! pip3 install --upgrade langchain==0.0.279 -i https://pypi.tuna.tsinghua.edu.cn/simple

依赖安装

  • 安装openai的api包
  • 或者使用Baichuan、ChatGLM这样的开源包
! pip3 install openai==v0.28.1 -i https://pypi.org/simple
! pip install --upgrade openai0.27.8
#如果没有科学上网,可以使用这个命令安装
! pip install openai0.27.8 -i https://pypi.tuna.tsinghua.edu.cn/simple

查看安装

! pip3 show langchain
! pip3 show openai

引入openai key

import os
os.environ["OPENAI_KEY"] = "你的key"
os.environ["OPENAI_API_BASE"] = "https://api.f2gpt.com/v1"

从环境变量中读取

import os
openai_api_key = os.getenv("OPENAI_KEY")
openai_api_base = os.getenv("OPENAI_API_BASE")
print("OPENAI_API_KEY:", openai_api_key)
print("OPENAI_PROXY:", openai_api_base)

openai官方SDK

#使用openai的官方sdk
import openai
import os

openai.api_base = os.getenv("OPENAI_API_BASE")
openai.api_key = os.getenv("OPENAI_KEY")

messages = [
{"role": "user", "content": "介绍下你自己"}
]

res = openai.ChatCompletion.create(
model="gpt-4-1106-preview",
messages=messages,
stream=False,
)

print(res['choices'][0]['message']['content'])

使用langchain调用

#hello world
from langchain.llms import OpenAI
import os

api_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(
    model="gpt-3.5-turbo-instruct",
    # 使用 temperature=0 相当于不带任何调参输出当前大模型传入文本的固定回答
    temperature=0,
    openai_api_key=api_key,
    openai_api_base=api_base
    )
llm.predict("介绍下你自己")

示例

起名大师

#起名大师,输出格式为一个数组
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
import os
from langchain.schema import BaseOutputParser

#自定义类
class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""

    def parse(self, text: str):
        """Parse the output of an LLM call."""
        print(text)
        return text.strip().split(",")


api_base = os.getenv("OPENAI_API_BASE")
api_key = os.getenv("OPENAI_KEY")
llm = OpenAI(
    model="gpt-3.5-turbo-instruct",
    temperature=0,
    openai_api_key=api_key,
    openai_api_base=api_base
    )
prompt = PromptTemplate.from_template("你是一个起名大师,请模仿示例起3个具有{county}特色的名字,示例:男孩常用名{boy},女孩常用名{girl}。请返回以逗号分隔的列表形式。仅返回逗号分隔的列表,不要返回其他内容。")
message = prompt.format(county="美国男孩",boy="sam",girl="lucy")
print(message)
strs = llm.predict(message)
CommaSeparatedListOutputParser().parse(strs)