Bootstrap

【LangChain实战】LangChain快速入门 原创

1、什么是大语言模型

        大语言模型是一种人工智能模型,通常使用深度学习技术,比如神经网络,来理解和生成人类语言。这些模型的“大”在于它们的参数数量非常多,可以达到数十亿甚至更多,这使得它们能够理解和生成高度复杂的语言模式。
        你可以将大语言模型想象成一个巨大的预测机器,其训练过程主要基于“猜词”:给定一段文本的开头,它的任务就是预测下一个词是什么。模型会根据大量的训练数据(例如在互联网上爬取的文本),试图理解词语和词组在语言中的用法和含义,以及它们如何组合形成意义。它会通过不断地学习和调整参数,使得自己的预测越来越准确。
        比如我们给模型一个句子:“今天的天气真”,模型可能会预测出“好”作为下一个词,因为在它看过的大量训练数据中,“今天的天气真好”是一个常见的句子。这种预测并不只基于词语的统计关系,还包括对上下文的理解,甚至有时能体现出对世界常识的认知,比如它会理解到,人们通常会在天气好的时候进行户外活动。因此也就能够继续生成或者说推理出相关的内容。
         但是,大语言模型并不完全理解语言,它们没有人类的情感、意识或理解力。它们只是通过复杂的数学函数学习到的语言模式,一个概率模型来做预测,所以有时候它们会犯错误,或者生成不合理甚至偏离主题的内容。
       LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具,它的灵活性和模块化特性使得处理语言模型变得极其简便。不论你在何时何地,都能利用它流畅地调用语言模型,并基于语言模型的“预测”或者说“推理”能力开发新的应用。
        LangChain 的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许根据自己的需求定制和创建应用中的功能链条。
       LangChain 本质上就是对各种大模型提供的 API 的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。

2、 OpenAI API

       要使用 OpenAI API,需要先用科学的方法进行注册,并得到一个 API Key。(也可以从网站购买)
       有了 OpenAI 的账号和 Key,你就可以在面板中看到各种信息,比如模型的费用、使用情况,各种模型的访问数量限制信息。其中,TPM 和 RPM 分别代表 tokens-per-minute、requests-per-minute。也就是说,对于 GPT-4,你通过 API 最多每分钟调用 200 次、传输 40000 个字节。
      openai支持的模型,这个模型便很快,需要尽量更新。
      
    

OpenAI模型调步骤

      第 1 步,先注册好你的 API Key。
      第 2 步,用 pip install openai 命令来安装 OpenAI 库。
      第 3 步,导入 OpenAI API Key。
     
import os
os.environ["OPENAI_API_KEY"] = ‘sk-*************’
#OpenAI 库就会查看名为 OPENAI_API_KEY 的环境变量,并使用它的值作为 API 密钥。

#指定 api_key 的值
import openai
openai.api_key = sk-****************’
第 4 步,导入 OpenAI 库。
from openai import OpenAI
client = OpenAI()
第 5 步,调用 Text 模型,并返回结果。
​
completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
    {"role": "user", "content": "请给情人节的祝福语"}
  ]
)
​
         message就是传入模型的提示。 messages 参数是一个列表,包含了多个消息。每个消息都有一个 role(可以是 system、user 或 assistant)和 content(消息的内容)。系统消息设定了对话的背景(你是一个很棒的智能助手),然后用户消息提出了具体请求(请给情人节的祝福语)。模型的任务是基于这些消息来生成回复。
       再说role,在 OpenAI 的 Chat 模型中,system、user 和 assistant 都是消息的角色。每一种角色都有不同的含义和作用。
  • system:系统消息主要用于设定对话的背景或上下文。这可以帮助模型理解它在对话中的角色和任务。例如,你可以通过系统消息来设定一个场景,让模型知道它是在扮演一个医生、律师或者一个知识丰富的 AI 助手。系统消息通常在对话开始时给出。
  • user:用户消息是从用户或人类角色发出的。它们通常包含了用户想要模型回答或完成的请求。用户消息可以是一个问题、一段话,或者任何其他用户希望模型响应的内容。
  • assistant:助手消息是模型的回复。例如,在你使用 API 发送多轮对话中新的对话请求时,可以通过助手消息提供先前对话的上下文。然而,请注意在对话的最后一条消息应始终为用户消息,因为模型总是要回应最后这条用户消息。
      
       第 6 步,打印输出大模型返回的文字。
print(completion.choices[0].message)
ChatCompletionMessage(content='在这个浪漫的情人节,\n让我用诗意为你祝福。\n你是我的心上人,\n让我爱得如痴如醉。\n\n你的 笑容如春花绽放,\n温暖我寒冷的心灵。\n你的眼眸如星光璀璨,\n照亮我迷茫的追寻。\n\n你是我的钟情之人,\n让我心跳不已地颤动。\n你是我的梦幻情人,\n让我心旋转不停地摇摆。\n\n愿我们的爱情永恒不变,\n如同华丽的诗篇流传。\n愿我们的幸福绽放成花,\n如同情人节的鲜花绽放。\n\n亲爱的,情人节快乐,\n愿我们的爱充满甜蜜。\n愿我们的相守长久如锦,\n永远不会离别分离。\n\n因为你,我在爱中绽放,\n因为你,我愿意为你努力。\n情人节祝福,情意满满,\n愿我们的爱情永不衰弱。', role='assistant', function_call=None, tool_calls=None)

            在使用 Chat 模型生成内容后,返回的响应,也就是 response 会包含一个或多个 choices,每个 choices 都包含一个 message。每个 message 也都包含一个 role 和 content。role 可以是 system、user 或 assistant,表示该消息的发送者,content 则包含了消息的实际内容。

3、通过 LangChain 调用OpenAI 模型

3.1 调用text-davinci-003模型

>>>import os
>>>os.environ["OPENAI_API_KEY"] = 'sk-*************'
>>> from langchain.llms import OpenAI
>>> llm = OpenAI(model_name="text-davinci-003",max_tokens=1024)
>>> llm("请给情人节的祝福语")
'\n\n1.祝你情人节快乐,幸福美满!\n\n2.爱你永不变,情人节快乐!\n\n3.愿你今生今世,永结同心!\n\n4.祝你情人节快乐,与爱 人度过温馨甜蜜的时光!\n\n5.祝你情人节快乐,真爱永不改变!\n\n6.祝你今生今世,陪伴爱人,情意绵绵!\n\n7.祝你一生有一个甜蜜的爱情,情人节快乐!\n\n8.祝你情人节快乐,爱情甜蜜每一天!'
>>> llm("请给情人节的祝福语")
'\n\n1.亲爱的,情人节快乐!愿你今天充满快乐幸福,永远幸福!\n\n2.让我们一起庆祝这个特殊的日子,感受彼此深爱的幸福!祝你 情人节快乐!\n\n3.情人节到了,衷心祝福你,愿你在这个特殊的日子里,幸福温馨!\n\n4.愿你在情人节这天,快乐无比,爱情温暖,幸福永久!\n\n5.情人节快乐!愿你在这个浪漫的节日里,拥有一份真挚的爱情!'
>>>

       这只是一个对 OpenAI API 的简单封装:先导入 LangChain 的 OpenAI 类,创建一个 LLM(大语言模型)对象,指定使用的模型和一些生成参数。使用创建的 LLM 对象和消息列表调用 OpenAI 类的 __call__ 方法,进行文本生成。生成的结果被存储在 response 变量中。

3.2 调用gpt-3.5-turbo 模型

import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model="gpt-3.5-turbo",
                    temperature=0.8,
                    max_tokens=200)
from langchain.schema import (
    HumanMessage,
    SystemMessage
)
messages = [
    SystemMessage(content="你是一个很棒的智能助手"),
    HumanMessage(content="请给情人节的祝福语")
]
response = chat(messages)
print(response)

=================================
>>> print(response)
content='亲爱的,情人节快乐!愿我们的爱情如同春天的花朵般绽放,甜蜜而美好。愿你每天都被爱所包围,幸福与快乐永远相伴。无 论身在何处,我们的心始终紧紧相连。让我们一起创造美好的回忆,共度这个特别的日子。我爱你!'

      这段代码主要是通过导入 LangChain 的 ChatOpenAI 类,创建一个 Chat 模型对象,指定使用的模型和一些生成参数。然后从 LangChain 的 schema 模块中导入 LangChain 的 SystemMessage 和 HumanMessage 类,创建一个消息列表。消息列表中包含了一个系统消息和一个人类消息。你已经知道系统消息通常用来设置一些上下文或者指导 AI 的行为,人类消息则是要求 AI 回应的内容。之后,使用创建的 chat 对象和消息列表调用 ChatOpenAI 类的 __call__ 方法,进行文本生成。生成的结果被存储在 response 变量中。

;