你还不知道LangChain?30分钟快速掌握这门必备技能!

LangChain是什么?

随着ChatGPT等大型语言模型(LLM)的流行不减,最近在利用这些LLM进行日常开发的工程师中,经常听到的一个关键词就是LangChain。

https://github.com/hwchase17/langchainicon-default.png?t=N7T8https://github.com/hwchase17/langchain

LangChain 是一种用于高效开发基于大型语言模型(LLM)的应用程序的库。它是为最受欢迎的机器学习语言 Python 提供的。

什么是库?

在编程中经常听到的“库”对初学者来说可能不太好理解。简单来说,库就像是一组便利的工具包,有人已经为特定编程语言编写了常用功能,我们只需要调用这些功能就能轻松使用。

例如,在Python语言中有一个常用的库叫做math。这个库提供了许多有助于数学计算的功能。在math库中,有一个名为sqrt()的函数,用于计算平方根。平方根就是我们在数学中学习的“根号(√)”,例如9的平方根是3。

如果我们在自己的应用程序中需要计算“9的平方根”,自行编写代码可能会比较复杂,但通过引入math库并调用sqrt()函数,传入“9”这个参数,就可以轻松得到答案“3”。这就是库的优势所在。

外部库”需要先进行安装!

库分为“标准库”和“外部库”。例如,math库是Python运行环境中默认包含的“标准库”,因为它非常常用。而像这次介绍的LangChain这样的“外部库”,是由开发者在日常工作中不断创建和维护的。使用外部库之前,需要先在想要运行代码的计算机上进行安装。

让我们实际操作一下吧!

环境准备

假设使用的是较新的搭载Apple Silicon版CPU的Mac。

  • 安装代码编辑器VS Code
  • 安装VS Code的“Python”扩展
  • 安装最新版的Python和pip

https://www.python.org/downloads/macos/icon-default.png?t=N7T8https://www.python.org/downloads/macos/

试试LangChain的快速入门!

学习新工具时,官方站点通常会提供“Getting started”类的初学者教程,非常推荐大家先试试看。LangChain也不例外,尽管是英文的,但它提供了一个快速入门指南。在这篇Qiita文章中,我将和大家一起进行LangChain的快速入门。

https://python.langchain.com/docs/get_started/quickstarticon-default.png?t=N7T8https://python.langchain.com/docs/get_started/quickstart

安装Python库

我们首先需要安装LangChain和OpenAI这两个Python库。您可以通过以下命令在终端中进行安装:

pip install langchain
pip install openai

※根据环境的不同,有时需要使用“pip3”来执行适用于Python 3的命令。

设置OpenAI API密钥为环境变量

在开始使用OpenAI API之前,您需要将API密钥设置为环境变量。可以通过以下命令在终端中设置:

export OPENAI_API_KEY="ここにAPIキーを記載する"

※请注意,在Mac OS中,环境变量在关闭终端后会被清除。

虽然可以直接在代码中包含API密钥,但因为API的密钥类似于密码,是一种认证信息,为了安全起见,在终端中设置每次都重新设置是更安全的方式。这样,即使他人看到代码,也不会滥用您的OpenAI账户。

您可以从以下页面登录您的OpenAI账户并查看API密钥。注册后前3个月会赠送18美元的信用额度,您可以免费使用这些额度,尽情利用吧。

https://platform.openai.com/account/api-keysicon-default.png?t=N7T8https://platform.openai.com/account/api-keys

让我们首先在不使用LangChain的情况下调用OpenAI。这可以帮助我们更好地理解LangChain的便利性。

我们将直接在Python中使用OpenAI的API,尝试询问“日本的首相是谁?”。

我要创建一个名为 test.py 的文件,并运行以下代码。

import os
import OpenAI

openai.api_key = os.environ["OPENAI_API_KEY"]

response = openai.ChatCompletion.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "日本の総理大臣は誰ですか?"},
    ],
)
print(response.choices[0]["message"]["content"].strip())

使用VS Code的调试功能运行时,终端会显示如下的结果。

私には日本の総理大臣の最新情報がありません。2021年7月現在、日本の総理大臣は菅義偉氏ですが、この情報は常に更新され、正確であるとは限りません。正確な情報を確認するには、公式のニュースソースや政府のウェブサイトを参照してください。

主要功能之一:“LLM”

LangChain 的其中一个主要功能是“LLM”,即调用语言模型的功能。这是最基本的功能之一。

具体来说,它允许用户指定语言模型(如OpenAI),并通过添加参数,如Temperature(影响回答多样性)和Prompt(输入文本),向LLM的API发送请求。这个功能作为一个封装器,使得从程序中方便地调用LLM的API。

让我们创建一个名为 llms.py 的文件,并编写以下代码示例:

from langchain.llms import OpenAI

llm = OpenAI(temperature=0.9)
output = llm.predict("日本の総理大臣は誰ですか?")

print(output)

使用VS Code的调试功能运行时,终端会显示如下的结果。

安倍晋三が現在の日本の総理大臣です。

这样,我们就可以向OpenAI的API传递Temperature和输入文本参数,并生成回答内容。相比不使用LangChain时的实现,我们用更少的代码实现了类似的功能。这体现了LangChain在简化代码和提高开发效率方面的优势。

主要功能之二:“聊天模型”

聊天模型(Chat models)可以简单理解为语言模型(LLM)的变种。它们专注于生成对话内容,与普通的LLM有所不同。聊天模型的输入输出参数略有不同,更适合处理多轮对话的场景。

让我们创建一个名为 chat_models.py 的文件,并编写以下代码示例:

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

chat = ChatOpenAI(temperature=0)
output = chat.predict_messages([HumanMessage(content="日本の総理大臣は誰ですか?")])

print(output)

使用VS Code的调试功能运行时,终端会显示如下的结果。

content='2021年現在の日本の総理大臣は菅義偉(すが・よしひで)です。' additional_kwargs={} example=False

看起来输出格式发生了变化,首相的最新信息也有些微的差异,这可能是由于使用的语言模型不同所导致的。

另外,Chat models 还提供了与前述的 LLMs 相同的接口形式。您可以使用 predict 方法代替 predict_messages 方法来调用这些模型。这样可以更方便地统一处理不同类型的模型调用。

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

chat = ChatOpenAI(temperature=0)
output = chat.predict("日本の総理大臣は誰ですか?") #ここが少し変わった

print(output)

输出格式与LLMs一样,仅为纯文本。

2021年現在、日本の総理大臣は菅義偉(すが・よしひで)です。

主要功能三:“提示模板”

在使用文本生成AI开发应用程序时,将传递给LLM的提示(输入文本)模板化,并根据需要更改其中的一些关键字,会非常方便。LangChain 提供的功能“Prompt templates”可以实现这一点。

让我们创建一个名为 prompts.py 的文件,并编写以下代码示例:

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template("{keyword}を解説するQiita記事のタイトル案は?")
prompt = template.format(keyword="Python")

chat = ChatOpenAI(temperature=0)
output = chat.predict(prompt)

print(output)

从示例代码中可以看到,{keyword} 部分可以作为一个占位符,被后续指定的值替换。这个方法将一段文本整理成模板,使得特定的关键字能够根据需要动态替换。

当使用VS Code的调试功能运行代码时,终端会显示如下结果。

1. Python入門者必見!基本的な文法から応用まで解説
2. Pythonでプログラミングを始めよう!初心者向けの解説記事
3. Pythonの基礎から応用まで徹底解説!初心者でもわかるように説明します
4. Pythonの使い方をマスターしよう!初心者向けの解説記事
5. Pythonの基本的な文法を理解しよう!初心者でもわかりやすい解説記事

让我们将 {keyword} 替换为 "AWS" 并再次运行代码。以下是修改后的代码示例:

1. AWSとは?クラウドコンピューティングの基礎知識から解説
2. AWSの魅力とは?ビジネスにおける活用方法を解説
3. AWSの主要サービスを徹底解説!初心者でもわかる使い方と活用法
4. AWSのセキュリティ対策について解説!安全なクラウド環境を構築する方法
5. AWSの料金体系を理解しよう!コスト削減のためのノウハウを紹介
6. AWSのデータベースサービスを解説!RDSやDynamoDBの使い方と特徴
7. AWSのマネージドサービスを解説!LambdaやS3などの活用方法を紹介
8. AWSのアーキテクチャ設計について解説!スケーラビリティや可用性の向上方法
9. AWSのIoTサービスを解説!デバイス管理やデータ収集の方法を紹介
10. AWSの機械学習サービスを解説!SageMakerやRekognitionの活用方法

主要功能四:“链条”

链条(Chains)是LangChain的核心功能之一,也体现在其名称中。顾名思义,Chains功能允许用户将LangChain的各种功能“链”在一起,创建复杂的工作流程和操作序列。

让我们创建一个名为 chains.py 的文件,并编写以下代码示例:

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

chat = ChatOpenAI(temperature=0)
template = PromptTemplate.from_template("{keyword}を解説するQiita記事のタイトル案は?")

chain = LLMChain(llm=chat, prompt=template)
output = chain.run("LangChain")

print(output)

从示例代码中可以看出,我们将“聊天模型”和“提示模板”放入名为 LLMChain 的对象中,然后通过 run 方法将它们串联在一起运行。

使用VS Code的调试功能运行时,终端会显示出相应的结果。

「LangChainとは?ブロックチェーン技術を活用した言語学習プラットフォームの魅力」

顺便提一下,由于LangChain是一款较新的软件,有时基于名字的推测可能会出错。

主要功能五:“代理人”

代理人(Agents)是一个非常有趣的功能。它可以根据输入文本自动判断需要执行的任务,利用多个工具,以工作流程的方式依次完成任务目标。

在这个例子中,我们将使用LLM和以下工具:

  • SerpAPI:一个用于获取Google搜索结果的API工具。
  • LLM Math:LangChain的一个工具,用于执行算术计算。

在使用之前,您需要通过pip安装SerpAPI,并将API密钥设置为环境变量。这些代理人可以根据输入动态选择适当的工具来完成任务,极大地提高了自动化和工作效率。

pip install google-search-results
export SERPAPI_API_KEY="ここにAPIキーを記載します"

注册SerpAPI后,您可以免费获得一定使用量的API密钥。

https://serpapi.com/icon-default.png?t=N7T8https://serpapi.com/

让我们创建一个名为 agents.py 的文件,并编写以下代码示例:

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
output = agent.run("今日の新宿区の最高気温の摂氏温度の平方根はいくつ?")

print(output)

从最终的代理人(Agents)传递的提示来看,我们需要获取“今天新宿区的最高气温”这一信息,这需要通过网络搜索来获得。然后,我们还需要进行一个平方根的算术计算。

使用VS Code的调试功能运行代码时,终端会显示出相应的结果,展示了代理人如何使用SerpAPI和LLM Math工具来完成这些任务。

> Entering new AgentExecutor chain...
 I need to find out the highest temperature in Shinjuku today and then calculate its square root.
Action: Search
Action Input: "Today's highest temperature in Shinjuku"
Observation: Today, in Shinjuku, cloudy weather is expected. The temperature will vary between a minimum of 22°C (71.6°F) and a maximum of 31°C (87.8°F).
Thought: I now need to calculate the square root of the maximum temperature.
Action: Calculator
Action Input: 31°C
Observation: Answer: 304.15
Thought: I now know the final answer.
Final Answer: 5.5°C

> Finished chain.
5.5°C

确实很厉害!我也用Google搜索确认了今天新宿的最高气温,大约是31℃(30℃)。平方根的计算结果看起来也是正确的。这个功能展示了LangChain代理人结合网络搜索和数学计算工具的强大能力。

主要功能六:“记忆”

最后介绍的功能是Memory,这个功能非常直观,就像ChatGPT的Web UI一样,它可以记住过去的对话内容,从而在下一次输入时进行参考和调整。

让我们创建一个名为 memory.py 的文件,并编写以下代码示例:

from langchain import OpenAI, ConversationChain

llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True)

output = conversation.run("私は日本人です。何を聞いても日本語で答えてください。")
output = conversation.run("Who is the prime minister of Japan?")

print(output)

如果使用 VS Code 的调试功能运行它,终端中将输出以下输出。

> Entering new ConversationChain chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.

Current conversation:
Human: 私は日本人です。何を聞いても日本語で答えてください。
AI:  はい、わかりました。私はあなたの日本語を理解します。どうぞ、どうぞ、質問をしてください。
Human: Who is the prime minister of Japan?
AI:

> Finished chain.
 日本の現在の首相は安倍晋三さんです。

※由于进行了两次连续对话,终端显示的结果中可能包含一些冗余信息。

从AI的最终回答中可以看出,第一次对话输入的内容被保留下来,作为上下文信息应用于第二次对话。这表明记忆功能能够在多轮对话中保持上下文,改进后续对话的响应质量。

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值