欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)

 更新時間:2023年07月12日 10:55:09   作者:flydean  
這篇文章主要為大家介紹了大語言模型的開發(fā)利器langchain安裝使用快速入門學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

簡介

最近隨著chatgpt的興起,人工智能和大語言模型又再次進(jìn)入了人們的視野,不同的是這一次像是來真的,各大公司都在拼命投入,希望能在未來的AI賽道上占有一席之地。因為AI需要大規(guī)模的算力,尤其是對于大語言模型來說。大規(guī)模的算力就意味著需要大量金錢的投入。那么對于小公司或者個人來說是不是什么都做不了呢?

當(dāng)然不是,雖然小公司或者個人不能開發(fā)底層的大語言模型,但是我們可以在大語言模型之上進(jìn)行應(yīng)用開發(fā),這應(yīng)該就是我們現(xiàn)在能做到的。

今天給大家介紹一個大語言模型的開發(fā)框架langchain,有了它,在AI的世界,你可以如虎添翼。

什么是langchain

簡單來說,langchain是一個基于大語言模型只上的開發(fā)框架,有了他,我們就可以輕松在各種大模型之上進(jìn)行實際應(yīng)用的開發(fā)。

langchain的主要特點有兩個,第一點就是組件化。langchain提供了各種封裝好的組件供我們使用,大大縮短了我們開發(fā)的時間。

第二點就是提供了工具鏈,可以組裝各種組件,從而實現(xiàn)更加復(fù)雜的功能。

langchain的安裝

廢話不多說,我們來看下langchain是如何安裝的。

AI時代大家一定要學(xué)一下python,至于為什么要學(xué)習(xí)python呢?因為其他語言都不好使......

langchain實際上是python的一個開發(fā)包,所以可以通過pip或者conda兩種方式來安裝:

pip安裝

pip install langchain

conda安裝

conda install langchain -c conda-forge

默認(rèn)情況下上面的安裝方式是最簡單的安裝,還有很多和langchain集成的modules并沒有安裝進(jìn)來,如果你希望安裝common LLM providers的依賴模塊,那么可以通過下面的命令:

pip install langchain[llms]

如果你想安裝所有的模塊,那么可以使用下面的命令:

pip install langchain[all]

因為langchain是開源軟件,所以你也可以通過源代碼來安裝,下載好源代碼之后,通過下面的命令安裝即可:

pip install -e .

langchain快速使用

下面我們以幾個具體的例子來講解一下langchain如何使用的。

因為langchain只是一個大語言模型上的開發(fā)框架,它的所有的能力都是依賴于大語言模型的,所以在使用langchain之前,我們需要一個大語言模型,最簡單同時也是最強(qiáng)大的大語言模型就是openai的chatgpt了。

接下來我們就以接入openai為例子進(jìn)行講解。

當(dāng)然langchain也可以接入其他的大語言模型框架,后面的系列教程中我們會詳細(xì)講解。

要使用openai,必須先注冊一個openai的賬號,然后拿到openai的api key。

具體的注冊流程這里就不講了。大家可以自行參考網(wǎng)絡(luò)上的各種教程。

有了api key之后,我們需要配置一下環(huán)境變量:

export OPENAI_API_KEY="..."

然后安裝openai的包:

pip install openai

接下來就可以愉快的使用openai提供的各種功能了。

當(dāng)然,如果你不想在環(huán)境變量中配置openai的key,我們也可以在OpenAI的構(gòu)造函數(shù)中傳入openai_api_key:

from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="...")

構(gòu)建應(yīng)用

有了上面的準(zhǔn)備工作,接下來我們就可以開始使用langchain了。

當(dāng)然,最最基礎(chǔ)的一個應(yīng)用就是跟大模型交互了,比如跟openai交互,我們可以讓openai給我們寫首詩:

>>> from langchain.llms import OpenAI
>>> llm = OpenAI(temperature=0.9)
>>> llm.predict("請以古龍的口吻,寫首關(guān)于春天詩")
春天來了,萬物復(fù)蘇,
終于迎來了一個新的時辰,
草兒花兒抬起頭,
喜迎新綠與絢麗的顏色。
山林里,小草發(fā)芽,
河畔邊,花兒香烈,
這讓我們感到心曠神怡,
這真是一個美好的世界。
春天來了,列位朋友,
請喜迎這樣一個新時辰,
不要抱怨什么,
享受春的溫暖與欣慰。

雖然寫出來了,但是我覺得寫的一般般吧。

但是這不重要,我們知道了如何通過langchain來調(diào)用openai的大模型,這個才是最重要的。

聊天模式

上面我們調(diào)用LLM使用用的是"text in, text out"的模型。

雖然聊天模式也是基于LLM,但是他更進(jìn)了一步,因為他保存了會話的上下問題,所以在對話上更加智能化。

在代碼上,傳入的就不是文本了,而是message對象。

在langchain中,目前支持下面幾種消息類型:AIMessage, HumanMessage, SystemMessage 和 ChatMessage。

在絕大多數(shù)情況下,我們只需要用到AIMessage, HumanMessage, SystemMessage即可。

下面是使用的代碼例子:

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
chat = ChatOpenAI(temperature=0)
chat.predict_messages([HumanMessage(content="請以古龍的口吻,寫首關(guān)于春天詩")])

那么聊天模式和LLM模式有什么不一樣呢?

大家可以看到,聊天模式調(diào)用的是predict_messages接口, 而LLM模式調(diào)用的是predict接口。

事實上聊天模式底層還是使用的是LLM,為了方便大家的使用,你也可以直接使用chat.predict方法來進(jìn)行LLM方式的調(diào)用,如下所示:

chat.predict("請以古龍的口吻,寫首關(guān)于春天詩")

Prompt的模板

開發(fā)過LLM應(yīng)用的人都知道,在LLM中Prompt是非常重要的,一個好的Prompt直接決定了這個應(yīng)用的質(zhì)量。

但是Prompt肯定需要結(jié)合用戶的輸入和我們自己做的一些限定來結(jié)合使用。

這時候就需要用到Prompt的模板功能了。 我們可以在系統(tǒng)中設(shè)置好模板,用戶只需要填充模板中的特定消息即可。

在LLM模式中,可以使用PromptTemplates,這樣來寫:

from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("請幫忙我詳細(xì)描述一下這個物體,這個物體的名字是: {object}?")
prompt.format(object="貓")

最后生成的結(jié)果如下:

請幫忙我詳細(xì)描述一下這個物體,這個物體的名字是: 貓

如果是在chat models中,代碼會復(fù)雜一點點,但是邏輯實際上是一樣的。 在chat models中,需要用到幾種MessagePromptTemplate,比如:ChatPromptTemplate,SystemMessagePromptTemplate和HumanMessagePromptTemplate。

我們具體來看下如何使用:

from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
template = "現(xiàn)在,你的角色是{your_role}, 請根據(jù)你的角色回答后續(xù)的問題."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chat_prompt.format_messages(your_role="教師", text="世界上最遠(yuǎn)的地方是哪里?")

對應(yīng)的輸出如下:

[
    SystemMessage(content="現(xiàn)在,你的角色是教師, 請根據(jù)你的角色回答后續(xù)的問題.", additional_kwargs={}),
    HumanMessage(content="世界上最遠(yuǎn)的地方是哪里?")
]

非常完美。

Chains

langchain還有一個非常有用的功能就是Chains,他可以把多種不同的功能結(jié)合起來。

比如上面我們用到了LLM,還用到了Prompt的模板,那么我們可以用Chains把他們結(jié)合起來:

from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
chain.run("貓")

當(dāng)然,也可以結(jié)合chat使用:

from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
chat = ChatOpenAI(temperature=0)
template = "現(xiàn)在,你的角色是{your_role}, 請根據(jù)你的角色回答后續(xù)的問題."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(llm=chat, prompt=chat_prompt)
chain.run(your_role="教師", text="世界上最遠(yuǎn)的地方是哪里?")

Agents

什么是agents? 從字面意義上看,Agents就是代理。

事實上langchain中的Agents就是代理的意思。

比如我們現(xiàn)在需要向openai詢問昨天的天氣,但是openai本身只是一個大模型,它并不知道實時的信息。但是通過agents就可以先進(jìn)行一次判斷,看看這個問題是交給大模型處理合適,還是交給搜索引擎來查詢比較合適。

這就是agents的作用。

agents利用LLM來判斷需要怎么處理這個任務(wù),并且以什么樣的順序來處理這個任務(wù)。

但是使用agents是要有些條件的,首先你這個LLM模型必須支持agent,這樣才能進(jìn)行后續(xù)的工作。

其次是需要挑選合適的工具來進(jìn)行你想要做的事情,比如:Google Search, Database lookup, Python REPL等等。

最后就是需要指定支持的agent的名字,這樣LLM才知道到底需要進(jìn)行哪種action。

下面是一個使用SerpAPI結(jié)合openai來進(jìn)行搜索的例子:

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import OpenAI
# The language model we're going to use to control the agent.
llm = OpenAI(temperature=0)
# The tools we'll give the Agent access to. Note that the 'llm-math' tool uses an LLM, so we need to pass that in.
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# Finally, let's initialize an agent with the tools, the language model, and the type of agent we want to use.
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
# Let's test it out!
agent.run("What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?")

agent比較復(fù)雜,功能也很強(qiáng)大,后續(xù)我們會詳細(xì)講解。

Memory

最后要講解的langchain的一個功能就是Memory。

因為很多時候,我們的應(yīng)用應(yīng)該是一個有狀態(tài)的,也就是說應(yīng)用需要知道你之前做了什么,這樣才可以給用戶提供更好的服務(wù)。

但是之前我們將的LLM或者chain都是無狀態(tài)的。

所以langchain提供了一個Memory的功能,可以把之前的輸入輸出保存起來,方便后續(xù)的使用。

總結(jié)

有了langchain的各種工具,現(xiàn)在你就可以快速開發(fā)一個屬于你自己的LLM應(yīng)用啦。

以上就是大語言模型的開發(fā)利器langchain快速入門學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于大語言模型開發(fā)langchain的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在pytorch中查看可訓(xùn)練參數(shù)的例子

    在pytorch中查看可訓(xùn)練參數(shù)的例子

    今天小編就為大家分享一篇在pytorch中查看可訓(xùn)練參數(shù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python生成器推導(dǎo)式用法簡單示例

    python生成器推導(dǎo)式用法簡單示例

    這篇文章主要介紹了python生成器推導(dǎo)式用法,結(jié)合簡單實例形式分析了Python生成器推導(dǎo)式的原理、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-10-10
  • python print出共軛復(fù)數(shù)的方法詳解

    python print出共軛復(fù)數(shù)的方法詳解

    在本篇內(nèi)容里小編給大家分享的是關(guān)于python print出共軛復(fù)數(shù)的方法總結(jié)內(nèi)容,有需要的讀者們可以學(xué)習(xí)下。
    2019-06-06
  • Python 對象序列化與反序列化之pickle json詳細(xì)解析

    Python 對象序列化與反序列化之pickle json詳細(xì)解析

    我們知道在Python中,一切皆為對象,實例是對象,類是對象,元類也是對象。本文正是要聊聊如何將這些對象有效地保存起來,以供后續(xù)使用
    2021-09-09
  • Python正則表達(dá)式非貪婪、多行匹配功能示例

    Python正則表達(dá)式非貪婪、多行匹配功能示例

    這篇文章主要介紹了Python正則表達(dá)式非貪婪、多行匹配功能,結(jié)合實例形式分析了Python正則表達(dá)式中非貪婪及多行匹配功能的實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下
    2017-08-08
  • Python?sklearn庫中的隨機(jī)森林模型詳解

    Python?sklearn庫中的隨機(jī)森林模型詳解

    本文主要說明?Python?的?sklearn?庫中的隨機(jī)森林模型的常用接口、屬性以及參數(shù)調(diào)優(yōu)說明,需要讀者或多或少了解過sklearn庫和一些基本的機(jī)器學(xué)習(xí)知識
    2023-08-08
  • python去除字符strip方法的實現(xiàn)

    python去除字符strip方法的實現(xiàn)

    Python中strip()方法用于去除字符串首尾的空白字符,包括空格、制表符和換行符,可以確保字符串沒有多余的空白字符,感興趣的可以了解一下
    2024-11-11
  • Python實現(xiàn)批量將MP3音頻轉(zhuǎn)為WAV格式詳解

    Python實現(xiàn)批量將MP3音頻轉(zhuǎn)為WAV格式詳解

    這篇文章主要介紹了通過Python實現(xiàn)將MP3音頻轉(zhuǎn)為WAV格式的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,感興趣的可以了解一下
    2021-12-12
  • 關(guān)于Python3的import問題(pycharm可以運行命令行import錯誤)

    關(guān)于Python3的import問題(pycharm可以運行命令行import錯誤)

    這篇文章主要介紹了關(guān)于Python3的import問題(pycharm可以運行命令行import錯誤),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 利用Python操作消息隊列RabbitMQ的方法教程

    利用Python操作消息隊列RabbitMQ的方法教程

    RabbitMQ是一個在AMQP基礎(chǔ)上完整的,可復(fù)用的企業(yè)消息系統(tǒng)。他遵循Mozilla Public License開源協(xié)議。下面這篇文章主要給大家介紹了關(guān)于利用Python操作消息隊列RabbitMQ的方法教程,需要的朋友可以參考下。
    2017-07-07

最新評論