日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大语言模型的开发利器langchain

發布時間:2023/10/18 编程问答 90 如意码农
生活随笔 收集整理的這篇文章主要介紹了 大语言模型的开发利器langchain 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
  • 簡介
  • 什么是langchain
  • langchain的安裝
  • langchain快速使用
    • 構建應用
    • 聊天模式
    • Prompt的模板
    • Chains
    • Agents
    • Memory
  • 總結

簡介

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

當然不是,雖然小公司或者個人不能開發底層的大語言模型,但是我們可以在大語言模型之上進行應用開發,這應該就是我們現在能做到的。

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

什么是langchain

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

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

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

langchain的安裝

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

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

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

pip安裝

pip install langchain

conda安裝

conda install langchain -c conda-forge

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

pip install langchain[llms]

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

pip install langchain[all]

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

pip install -e .

langchain快速使用

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

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

接下來我們就以接入openai為例子進行講解。

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

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

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

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

export OPENAI_API_KEY="..."

然后安裝openai的包:

pip install openai

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

當然,如果你不想在環境變量中配置openai的key,我們也可以在OpenAI的構造函數中傳入openai_api_key:

from langchain.llms import OpenAI

llm = OpenAI(openai_api_key="...")

構建應用

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

當然,最最基礎的一個應用就是跟大模型交互了,比如跟openai交互,我們可以讓openai給我們寫首詩:

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

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

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

聊天模式

上面我們調用LLM使用用的是"text in, text out"的模型。

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

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

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

在絕大多數情況下,我們只需要用到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="請以古龍的口吻,寫首關于春天詩")])

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

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

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

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

Prompt的模板

開發過LLM應用的人都知道,在LLM中Prompt是非常重要的,一個好的Prompt直接決定了這個應用的質量。

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

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

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

from langchain.prompts import PromptTemplate

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

最后生成的結果如下:

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

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

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

from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
) template = "現在,你的角色是{your_role}, 請根據你的角色回答后續的問題."
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="世界上最遠的地方是哪里?")

對應的輸出如下:

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

非常完美。

Chains

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

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

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)
chain.run("貓")

當然,也可以結合chat使用:

from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
) chat = ChatOpenAI(temperature=0) template = "現在,你的角色是{your_role}, 請根據你的角色回答后續的問題."
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="世界上最遠的地方是哪里?")

Agents

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

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

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

這就是agents的作用。

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

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

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

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

下面是一個使用SerpAPI結合openai來進行搜索的例子:

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比較復雜,功能也很強大,后續我們會詳細講解。

Memory

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

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

但是之前我們將的LLM或者chain都是無狀態的。

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

總結

有了langchain的各種工具,現在你就可以快速開發一個屬于你自己的LLM應用啦。

總結

以上是生活随笔為你收集整理的大语言模型的开发利器langchain的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。