LangChain实战课-02-LangChain系统安装和快速入门 | 豆包MarsCode AI刷题

71 阅读5分钟

1. 大模型

简言之,大模型就是一个超级强的接下茬的人,当你说出前半句或者只是给定一点提示,他就能接出后半句,类似:

image.png

但是又没那么简单,这种预测并不只基于词语的统计关系,还包括对上下文的理解,甚至有时能体现出对世界常识的认知,比如它会理解到,人们通常会在天气好的时候进行户外活动。因此也就能够继续生成或者说推理出相关的内容。从语境中找到一定规律,并能结合这种规律进行推理。 但是,大语言模型并不完全理解语言,它们没有人类的情感、意识或理解力。它们只是通过复杂的数学函数学习到的语言模式,一个概率模型来做预测,所以有时候它们会犯错误,或者生成不合理甚至偏离主题的内容。

2. LangChain安装

LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具

# 添加[llms]会引入大多数依赖项(比如说最重要的OpenAI的API接口,
# 比如说开源大模型库HuggingFace Hub,再比如说对各种向量数据库的支持)
pip install langchain[llms]

# 当然如果只安装langchain
pip install langchain

# 安装完成之后,还需要更新到 LangChain 的最新版本,这样才能使用较新的工具
pip install --upgrade langchain

LangChain官方文档 | 🦜️🔗 LangChain

3. OpenAI API的介绍

在openAI的API的dashboard中可以看到对应api密钥以及各个api的使用情况。

image.png

chat Model 和 text Model

两种都是给定一段prompt,返回一段response,但两者的调用方式和输入格式是有区别的。

  • Chat Model,聊天模型,用于产生人类和AI之间的对话,代表模型当然是gpt-3.5-turbo(也就是ChatGPT)和GPT-4。当然,OpenAI还提供其它的版本,gpt-3.5-turbo-0613代表ChatGPT在2023年6月13号的一个快照,而gpt-3.5-turbo-16k则代表这个模型可以接收16K长度的Token,而不是通常的4K。(注意了,gpt-3.5-turbo-16k并未开放给我们使用,而且你传输的字节越多,花钱也越多)
  • Text Model,文本模型,在ChatGPT出来之前,大家都使用这种模型的API来调用GPT-3,文本模型的代表作是text-davinci-003(基于GPT3)。而在这个模型家族中,也有专门训练出来做文本嵌入的text-embedding-ada-002,也有专门做相似度比较的模型,如text-similarity-curie-001。
# 示例代码,Doubao API不兼容这个废弃的openAI的API了,无法运行了
import os
from openai import OpenAI

# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'

client = OpenAI()

response = client.completions.create(
    model=os.environ.get("LLM_MODELEND"),
    temperature=0.5,
    max_tokens=100,
    prompt="请给我的花店起个名",
)

print(response.choices[0].text.strip())
response = client.chat.completions.create(  
  model="gpt-4",
  messages=[
        {"role": "system", "content": "You are a creative AI."},
        {"role": "user", "content": "请给我的花店起个名"},
    ],
  temperature=0.8,
  max_tokens=60
)

两者主要的不同点在于“prompt”和“message”: 这里的message等同于prompt,只是message有了角色这个概念,且message可以有多条。具体角色如下:

  • system:系统消息主要用于设定对话的背景或上下文。这可以帮助模型理解它在对话中的角色和任务。例如,你可以通过系统消息来设定一个场景,让模型知道它是在扮演一个医生、律师或者一个知识丰富的AI助手。系统消息通常在对话开始时给出。
  • user:用户消息是从用户或人类角色发出的。它们通常包含了用户想要模型回答或完成的请求。用户消息可以是一个问题、一段话,或者任何其他用户希望模型响应的内容。
  • assistant:助手消息是模型的回复。例如,在你使用API发送多轮对话中新的对话请求时,可以通过助手消息提供先前对话的上下文。然而,请注意在对话的最后一条消息应始终为用户消息,因为模型总是要回应最后这条用户消息。

import os
from openai import OpenAI

# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'

client = OpenAI()

# text = client.invoke("请给我写一句情人节红玫瑰的中文宣传语")
response = client.chat.completions.create(
    model=os.environ.get("LLM_MODELEND"),
    messages=[
        {"role": "system", "content": "You are a creative AI."},
        {"role": "user", "content": "请给我的花店起个名"},
    ],
    temperature=0.8,
    max_tokens=600,
)

print(response.choices[0].message.content)

image.png

这里还是直接通过openAI提供的api进行的模型调用,textModel更适合单轮次的会话,而chatModel更适合多轮次的会话,且chatModel经过了后续的对齐,更像是真实的聊天场景。

4. 通过 LangChain 调用 Text 和 Chat 模型


import os
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage

# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'

chat = ChatOpenAI(model=os.environ.get("LLM_MODELEND"), temperature=0.8, max_tokens=600)

messages = [
    SystemMessage(content="你是一个很棒的智能助手"),
    HumanMessage(content="请给我的花店起个名"),
]
response = chat(messages)
print(response.content)

上述代码是chatModel的LangChain封装,没有写textModel是因为这里只能用豆包,所以说无法调用那个gpt-3了,而且我觉得可能textModel有点过时🤐🤐,不过下面还是放了对应的代码,其实就是调用的模型不同,然后给的提示词不同。

import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.llms import OpenAI
llm = OpenAI(  
    model="gpt-3.5-turbo-instruct",
    temperature=0.8,
    max_tokens=60,)
response = llm.predict("请给我的花店起个名")
print(response)

花之缘、芳华花店、花语心意、花风旖旎、芳草世界、芳色年华

import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model="gpt-4",
                    temperature=0.8,
                    max_tokens=60)
from langchain.schema import (
    HumanMessage,
    SystemMessage
)
messages = [
    SystemMessage(content="你是一个很棒的智能助手"),
    HumanMessage(content="请给我的花店起个名")
]
response = chat(messages)
print(response)

content='当然可以,叫做"花语秘境"怎么样?' 
additional_kwargs={} example=False

chatModel还是更接近对话一下,有点味道😂

值得思考:这里利用的是open AI的key,或者说是doubao的key,那么如果使用的是开源大模型配置起来会有什么不同呢??