LangChain是什么?
随着ChatGPT等大型语言模型(LLM)的流行不减,最近在利用这些LLM进行日常开发的工程师中,经常听到的一个关键词就是LangChain。
https://github.com/hwchase17/langchainhttps://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/https://www.python.org/downloads/macos/
试试LangChain的快速入门!
学习新工具时,官方站点通常会提供“Getting started”类的初学者教程,非常推荐大家先试试看。LangChain也不例外,尽管是英文的,但它提供了一个快速入门指南。在这篇Qiita文章中,我将和大家一起进行LangChain的快速入门。
安装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-keyshttps://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/https://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的最终回答中可以看出,第一次对话输入的内容被保留下来,作为上下文信息应用于第二次对话。这表明记忆功能能够在多轮对话中保持上下文,改进后续对话的响应质量。