最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

langchain中LLM模型使用詳解

 更新時(shí)間:2023年08月30日 09:32:41   作者:flydean  
這篇文章主要為大家介紹了langchain中LLM模型使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

簡(jiǎn)介

構(gòu)建在大語言模型基礎(chǔ)上的應(yīng)用通常有兩種,第一種叫做text completion,也就是一問一答的模式,輸入是text,輸出也是text。這種模型下應(yīng)用并不會(huì)記憶之前的問題內(nèi)容,每一個(gè)問題都是最新的。通常用來做知識(shí)庫。

還有一種是類似聊天機(jī)器人這種會(huì)話模式,也叫Chat models。這種模式下輸入是一個(gè)Chat Messages的列表。從而可以保存上下文信息,讓模型的回復(fù)更加真實(shí)。

實(shí)際上Chat models的底層還是LLMs,只不過在調(diào)用方式上有些變化。

簡(jiǎn)單使用LLMs

什么是LLMs呢?LLMs是Large Language Models的簡(jiǎn)稱,也就是我們常說的大語言模型。

對(duì)于langchain來說,它本身并不提供大語言模型,它只是一個(gè)中間的粘合層,提供了統(tǒng)一的接口,方便我們對(duì)接底層的各種LLMs模型。

langchain除了可以對(duì)接OpenAI之外,還可以對(duì)接Cohere, Hugging Face等其他的大語言模型。

比如下面是openAI的使用:

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

接下來就可以調(diào)用llm的方法來進(jìn)行text completion了。

一般來說有兩種方式。第一種方式就是直接輸出:

llm("給我寫首詩")

還有一種方式調(diào)用他的generate方法:

llm_result = llm.generate(["給我唱首歌", "給我寫首詩"])

這種方式可以傳入一個(gè)數(shù)組,用來生成比較復(fù)雜的結(jié)果。

langchain支持的LLM

現(xiàn)在大語言模型可謂是蓬勃發(fā)展,一不留神就可能出一個(gè)新的大語言模型。

就目前而言,基本的國外主流模型langchain都是支持的。

比如:openai,azure openai,AmazonAPI,Hugging Face Hub等等。數(shù)目繁多,功能齊全,你想要的他全都有,你沒想到的他也有。

那么有小伙伴可能要問題了,langchain支不支持國產(chǎn)的大語言模型呢?

答案是肯定的,但并不是直接的。

如果你發(fā)現(xiàn)langchain并沒有你想要的llm,那么你可以嘗試進(jìn)行自定義。

langchain為我們提供了一個(gè)類叫做LLM,我們只需要繼承這個(gè)LLM即可:

class LLM(BaseLLM):
    @abstractmethod
    def _call(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        run_manager: Optional[CallbackManagerForLLMRun] = None,
    ) -> str:
        """Run the LLM on the given prompt and input."""

其中,唯一一個(gè)必須要實(shí)現(xiàn)的方法就是_call,這個(gè)方法傳入一個(gè)字符串和一些可選的stop word,然后返回LLM的輸出即可。

另外還可以實(shí)現(xiàn)一個(gè)_identifying_params方法,用來輸出自定義LLM的一些參數(shù)信息。

大家可以自行嘗試和接入不同的LLM模型。

一些特殊的LLM

很多時(shí)候調(diào)用LLM是需要收費(fèi)的,如果我們?cè)陂_發(fā)的過程中也要不斷的消耗token肯定是得不償失。

所以langchain為了給我們省錢,提供了一個(gè)FakeLLM來使用。

顧名思義,F(xiàn)akeLLM就是可以手動(dòng)來mock一些LLM的回答,方便測(cè)試。

from langchain.llms.fake import FakeListLLM
responses = ["窗前明月光\n低頭鞋兩雙"]
llm = FakeListLLM(responses=responses)
print(llm("給我寫首詩"))

上面的輸出結(jié)果如下:

窗前明月光
低頭鞋兩雙

langchain中還有一個(gè)和FakeLLM類似的叫做HumanInputLLM。

這個(gè)LLM可以打印出給用戶的prompt,并且將用戶的輸入作為輸出返回給用戶,大家可以自行體驗(yàn)。

LLM的高級(jí)用法

除了正常的LLM調(diào)用之外,langchain還提供了一些LLM的高級(jí)用法。

異步調(diào)用

比如異步調(diào)用LLM。當(dāng)然目前只支持OpenAI, PromptLayerOpenAI, ChatOpenAI 和 Anthropic這幾個(gè)LLM。其他的對(duì)LLM的支持貌似正在開發(fā)中。

異步方法也很簡(jiǎn)單,主要是調(diào)用llm的agenerate方法,比如下面這樣:

async def async_generate(llm):
    resp = await llm.agenerate(["Hello, how are you?"])
    print(resp.generations[0][0].text)

緩存功能

另外,對(duì)于一些重復(fù)的請(qǐng)求來說,langchain還提供了緩存功能,這樣可以重復(fù)的請(qǐng)求就不需要再發(fā)送到LLM去了,給我們節(jié)約了時(shí)間和金錢,非常好用。

langchain提供的cache也有很多種,比如InMemoryCache,FullLLMCache,SQLAlchemyCache,SQLiteCache和RedisCache等等。

我們以InMemoryCache為例,看看是怎么使用的:

from langchain.cache import InMemoryCache
langchain.llm_cache = InMemoryCache()
# 第一次沒有使用緩存
llm.predict("Tell me a joke")
# 第二次使用了緩存
llm.predict("Tell me a joke")

使用起來很簡(jiǎn)單,只需要添加一行l(wèi)lm_cache即可。

如果你使用其他的cache,除了構(gòu)造函數(shù)不同之外,其他的都是類似的。

保存LLM配置

有時(shí)候我們配置好了LLM之外,還可以把LLM相關(guān)的參數(shù)以文本的形式存儲(chǔ)起來。

保存llm到文件:

llm.save("llm.json")

加載llm:

llm = load_llm("llm.json")

流式處理

LLM的速度是一個(gè)硬傷,由于返回整個(gè)響應(yīng)的速度太慢了,所以推出了流式響應(yīng)。只要有response返回,就傳輸給用戶。并不需要等待所有內(nèi)容都獲得之后再處理。這樣對(duì)用戶的體驗(yàn)是最好的。

目前l(fā)angchain只支持OpenAI,ChatOpenAI和ChatAnthropic。

要實(shí)現(xiàn)這個(gè)流式處理, langchain提供了BaseCallbackHandler,我們只需要繼承這個(gè)類,實(shí)現(xiàn)on_llm_new_token這個(gè)方法即可。

當(dāng)然langchain已經(jīng)給我們提供了一個(gè)實(shí)現(xiàn)好的類叫做:StreamingStdOutCallbackHandler。下面是他的實(shí)現(xiàn):

def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
        sys.stdout.write(token)
        sys.stdout.flush()

使用的時(shí)候,只需要在構(gòu)建llm的是傳入對(duì)應(yīng)的callback即可:

from langchain.llms import OpenAI
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = OpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()], temperature=0)
resp = llm("給我寫首詩")

統(tǒng)計(jì)token數(shù)目

這個(gè)統(tǒng)計(jì)token使用數(shù)目的功能目前只能在openai使用。

from langchain.llms import OpenAI
from langchain.callbacks import get_openai_callback
llm = OpenAI(model_name="text-davinci-002", n=2, best_of=2)
with get_openai_callback() as cb:
    result = llm("T給我寫首詩")
    print(cb)

總結(jié)

LLM是大語言模型最基礎(chǔ)的模式,chat模式的底層就是基于LLM實(shí)現(xiàn)的。后續(xù)我們會(huì)詳細(xì)介紹chat模式,盡請(qǐng)期待。

更多關(guān)于langchain LLM模型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 記錄Django開發(fā)心得

    記錄Django開發(fā)心得

    學(xué)習(xí)使用Django也有一個(gè)月了,也該整理整理了,給自己,也給大家分享一下哈(再次鄙視國內(nèi)的IT技術(shù)文檔/問答環(huán)境,抄抄抄,你們TM自己寫點(diǎn)不行?。。。。。?當(dāng)然我剛學(xué)Django/Python,也歡迎指點(diǎn)錯(cuò)誤的地方,
    2014-07-07
  • Python把csv文件轉(zhuǎn)換為excel文件

    Python把csv文件轉(zhuǎn)換為excel文件

    本文主要介紹了Python把csv文件轉(zhuǎn)換為excel文件,可以使用xlrd,xlrwt,openpyxl,xlwings,pandas 等庫操作 Excel,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Selenium 配置啟動(dòng)項(xiàng)參數(shù)的方法

    Selenium 配置啟動(dòng)項(xiàng)參數(shù)的方法

    這篇文章主要介紹了Selenium 配置啟動(dòng)項(xiàng)參數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • logging level級(jí)別介紹

    logging level級(jí)別介紹

    今天小編就為大家分享一篇logging level級(jí)別介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 基于Python+ECharts實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)大屏

    基于Python+ECharts實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)大屏

    文章介紹了如何使用Python爬蟲和ECharts構(gòu)建實(shí)時(shí)數(shù)據(jù)大屏,通過自動(dòng)化數(shù)據(jù)采集和動(dòng)態(tài)數(shù)據(jù)展示,提高決策效率,關(guān)鍵步驟包括爬蟲開發(fā)、ECharts可視化和系統(tǒng)集成,同時(shí)提供了常見問題的解決方案和進(jìn)階方向,需要的朋友可以參考下
    2026-01-01
  • python類方法中的self關(guān)鍵字使用

    python類方法中的self關(guān)鍵字使用

    這篇文章主要介紹了python類方法中的self關(guān)鍵字使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • python初學(xué)之用戶登錄的實(shí)現(xiàn)過程(實(shí)例講解)

    python初學(xué)之用戶登錄的實(shí)現(xiàn)過程(實(shí)例講解)

    下面小編就為大家分享一篇python初學(xué)之用戶登錄的實(shí)現(xiàn)過程(實(shí)例講解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • python 多進(jìn)程共享全局變量之Manager()詳解

    python 多進(jìn)程共享全局變量之Manager()詳解

    這篇文章主要介紹了python 多進(jìn)程共享全局變量之Manager()詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Tensorflow中k.gradients()和tf.stop_gradient()用法說明

    Tensorflow中k.gradients()和tf.stop_gradient()用法說明

    這篇文章主要介紹了Tensorflow中k.gradients()和tf.stop_gradient()用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 詳解pyqt5的UI中嵌入matplotlib圖形并實(shí)時(shí)刷新(挖坑和填坑)

    詳解pyqt5的UI中嵌入matplotlib圖形并實(shí)時(shí)刷新(挖坑和填坑)

    這篇文章主要介紹了詳解pyqt5的UI中嵌入matplotlib圖形并實(shí)時(shí)刷新(挖坑和填坑),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

南丹县| 宁安市| 山阳县| 交口县| 凤庆县| 西城区| 宁海县| 丰都县| 客服| 客服| 湖州市| 仁怀市| 曲麻莱县| 石嘴山市| 辽源市| 昆山市| 常宁市| 伊金霍洛旗| 瑞丽市| 潜江市| 阳谷县| 奉新县| 平定县| 两当县| 连南| 镇巴县| 工布江达县| 舒城县| 永顺县| 牙克石市| 台湾省| 永修县| 墨竹工卡县| 凤台县| 新兴县| 延寿县| 清新县| 本溪市| 安义县| 大新县| 罗江县|