LangChain 入门笔记及课后思考题回答 | 豆包MarsCode AI 刷题

150 阅读4分钟

Chat Model:聊天模型,用于产生人类和AI之间的对话

Text Model:文本模型

调用 Text Model

  1. 先注册好OpenAI API Key。

  2. 用 pip install openai 命令来安装OpenAI库。

  3. 导入 OpenAI API Key。

  4. 导入OpenAI库,并创建一个Client。

    from openai import OpenAI
    client = OpenAI()
    
  5. 指定Text Model,并调用completions方法。

    response = client.completions.create(
      model="gpt-3.5-turbo-instruct",
      temperature=0.5,
      max_tokens=100,
      prompt="请给我的花店起个名")
    

    常见参数如下: image.png

  6. 打印输出大模型返回的文字。

    print(response.choices[0].text.strip())
    

    在使用Text模型(如text-davinci-003)的情况下,响应对象的主要字段包括: image.png choices字段是一个列表,因为在某些情况下,你可以要求模型生成多个可能的输出。每个选择都是一个字典,其中包含以下字段:

    • text:模型生成的文本。
    • finish_reason:模型停止生成的原因,可能的值包括 stop(遇到了停止标记)、length(达到了最大长度)或 temperature(根据设定的温度参数决定停止)。

调用 Chat Model

示例代码:

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
)

先说消息,消息就是传入模型的提示。此处的messages参数是一个列表,包含了多个消息。每个消息都有一个role(可以是system、user或assistant)和content(消息的内容)。系统消息设定了对话的背景(你是一个很棒的智能助手),然后用户消息提出了具体请求(请给我的花店起个名)。模型的任务是基于这些消息来生成回复。

再说角色,在OpenAI的Chat模型中,system、user和assistant都是消息的角色。每一种角色都有不同的含义和作用。

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

响应对象的主要字段包括:

image.png

通过 LangChain 调用 Text 和 Chat 模型

调用 Text Model

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)

调用 Chat Model

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)

思考题

  1. 从今天的两个例子看起来,使用LangChain并不比直接调用OpenAI API来得省事?而且也仍然需要OpenAI API才能调用GPT家族模型。那么LangChain的核心价值在哪里?至少从这两个示例中没看出来。针对这个问题,你仔细思考思考。

    答:

    • 流水线任务处理:LangChain可以通过链式调用多个LLM,形成灵活的任务分解流水线,针对不同的模块给出不同的解答方案。
    • 模型无缝切换:支持多种模型平台,便于比较不同模型的性能和效果。

    核心价值在于其可扩展性和对复杂任务的适配能力上。

  2. LangChain支持的可绝不只有OpenAI模型,那么你能否试一试HuggingFace开源社区中的其它模型,看看能不能用。

    答:

    from langchain import HuggingFaceHub
    llm = HuggingFaceHub(model_id="bigscience/bloom-1b7")
    

    不能用,没有API Key。

  3. 上面我提到了生成式模型,那么,大语言模型除了文本生成式模型,还有哪些类别的模型?比如说有名的Bert模型,是不是文本生成式的模型?

    答:

    还有其他类别的模型:

    • encoder-decoder model:既可以用来生成任务,也可以用来理解任务。
    • discriminator model(判别式模型):用来分类或者判断。

    Bert不是文本生成式的模型,应该属于判别式模型,主要任务是对文本进行分类、判断或编码,而不是生成新内容,其预训练过程是MLM和NSP,跟传统的文本生成式模型的预训练任务都不一致。