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

ChatGLM?集成LangChain工具詳解

 更新時間:2023年04月27日 09:07:01   作者:隨想筆記  
這篇文章主要為大家介紹了Svelte和React框架使用比較,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

最新一段時間一直在學習LangChain相關(guān)的文檔,發(fā)現(xiàn)LangChain提供了非常豐富的生態(tài),并且也可以讓業(yè)務非常方便的封裝自己的工具,接入到LangcChain的生態(tài)中,比如切換不同向量存儲(Vectorstores)、文件分片(Text Splitters)和文件加載器(Document Loaders)等。 本文將簡單介紹下如何將自己搭建的ChatGLM集成進LangChain工具鏈中,當然如果有其他的自己搭建的LLM模型也可以采用類似的方式集成。

接入自己的LLM

參考官方文檔# How to write a custom LLM wrapper,只需要集成LLM方法,并且實現(xiàn)_call方法即可。一個簡單的自定義LLM如下:

from langchain.llms.base import LLM
from typing import Optional, List, Mapping, Any
class CustomLLM(LLM):
  n:int
  @property
  def _llm_type(self) -> str:
    return "custom"
  def _call(self,prompt:str,stop:Optional[List[str]]=None) -> str:
    if stop is not None:
      raise ValueError("stop kwargs are not permitted")
    return prompt[:self.n]
  @property
  def _identifying_params(self) -> Mapping[str, Any]:
        """Get the identifying parameters."""
        return {"n": self.n}

上面雖然只是一個最簡單的實現(xiàn),但是進一步思考,如果有自己的LLM,是不是也可以通過類似的方式接入到LangChain的生態(tài)中呢?

正好最近也在搭建ChatGLM,于是在想是不是可以將ChatGLM加入到LangChain工具鏈中來,利用其提供的工具方便做更深入的研究。于是搜索了一番,果然有類似開源實現(xiàn),比如thomas-yanxin/LangChain-ChatGLM-Webui,一種利用 ChatGLM-6B + langchain 實現(xiàn)的基于本地知識的 ChatGLM 應用。但是研究了一下代碼,發(fā)現(xiàn)其是將ChatGLM-6B和LangChain部署在一起的。但是由于資源有限,目前只有少量的顯卡,不能每個人都能部署一套ChatGLM。

進一步思考,是否ChatGLM也提供了類似于openai的api接口呢,只需要進行http調(diào)用就可以使用ChatGLM的能力?這樣就可以將:ChatGLM和上層的應用解耦,每個人都可以在自己本地通過api調(diào)用來進行實驗。

搭建ChatGLM的api

查閱ChatGLM-6B文檔,也發(fā)現(xiàn)了其確實可以通過API方式提供服務。 具體如下:

  • 首先需要安裝額外的依賴 pip install fastapi uvicorn ,然后運行倉庫中的 api.pypython api.py
  • 默認部署在本地的 8000 端口,通過 POST 方法進行調(diào)用
curl -X POST "http://{your_host}:8000" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'
  • 得到的返回值為
{
  "response":"你好??!我是人工智能助手 ChatGLM-6B,很高興見到你,歡迎問我任何問題。",
  "history":[["你好","你好??!我是人工智能助手 ChatGLM-6B,很高興見到你,歡迎問我任何問題。"]],
  "status":200,
  "time":"2023-03-23 21:38:40"
}

封裝ChatGLM的LLM

有了API之后,就可以參照上面的自定義LLM的方式封裝ChatGLM了,具體代碼如下:

from langchain.llms.base import LLM
from langchain.llms.utils import enforce_stop_tokens
from typing import Dict, List, Optional, Tuple, Union
import requests
import json
class ChatGLM(LLM):
    max_token: int = 10000
    temperature: float = 0.1
    top_p = 0.9
    history = []
    def __init__(self):
        super().__init__()
    @property
    def _llm_type(self) -> str:
        return "ChatGLM"
    def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
        # headers中添加上content-type這個參數(shù),指定為json格式
        headers = {'Content-Type': 'application/json'}
        data=json.dumps({
          'prompt':prompt,
          'temperature':self.temperature,
          'history':self.history,
          'max_length':self.max_token
        })
        # print("ChatGLM prompt:",prompt)
        # 調(diào)用api
        response = requests.post("{your_host}/api",headers=headers,data=data)
		# print("ChatGLM resp:",response)
        if response.status_code!=200:
          return "查詢結(jié)果錯誤"
        resp = response.json()
        if stop is not None:
            response = enforce_stop_tokens(response, stop)
        self.history = self.history+[[None, resp['response']]]
        return resp['response']

上面只是簡單的調(diào)用ChatGLM API,讓程序跑起來,當然也可以參照LangChain封裝openai的方式來做更加復雜的封裝,比如提供重試、限頻退讓重試等功能。

測試

llm = ChatGLM()
print(llm("你會做什么"))

輸出如下:

ChatGLM prompt: 你會做什么
我是一個大型語言模型,被訓練來回答人類提出的問題。我不能做任何實際的事情,只能通過文字回答問題。如果你有任何問題,我會盡力回答。

驗證通過,可以通過封裝的ChatGLM類來訪問ChatGLM API。這樣就可以將需要用到OpenAILLM類替換成自己封裝的ChatGLM了。

總結(jié)

本文簡單介紹下如何將自己搭建的ChatGLM集成進LangChain工具鏈中,并且進行簡單的試驗的效果。當然如果有其他自己搭建的LLM模型也可以采用類似的方式集成。后續(xù)將使用ChatGLM來實現(xiàn)一個本地知識庫做問答系統(tǒng)。

參考

thomas-yanxin/LangChain-ChatGLM-Webui

使用langchain配合chatglm搭建本地的知識庫,但是langchain和chatglm是部署在一起的,耦合性比較高

ChatGLM-6B chatglm的api搭建

以上就是ChatGLM 集成進LangChain工具的詳細內(nèi)容,更多關(guān)于ChatGLM 集成進LangChain工具的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • GraphQL在react中的應用示例詳解

    GraphQL在react中的應用示例詳解

    這篇文章主要為大家介紹了GraphQL在react中的應用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React報錯解決之ref返回undefined或null

    React報錯解決之ref返回undefined或null

    最近使用react做個滾動監(jiān)聽獲取更多數(shù)據(jù)效果,當想獲取dom時發(fā)現(xiàn)怎么也獲取不到,下面這篇文章主要給大家介紹了關(guān)于React報錯解決之ref返回undefined或null的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境

    詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境

    這篇文章主要介紹了詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 解讀useState第二個參數(shù)的"第二個參數(shù)"

    解讀useState第二個參數(shù)的"第二個參數(shù)"

    這篇文章主要介紹了useState第二個參數(shù)的"第二個參數(shù)",具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React中setState同步異步場景的使用

    React中setState同步異步場景的使用

    本文主要介紹了React中setState同步異步場景的使用,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • React中super()和super(props)的區(qū)別小結(jié)

    React中super()和super(props)的區(qū)別小結(jié)

    本文主要介紹了React中super()和super(props)的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • React Redux使用配置詳解

    React Redux使用配置詳解

    react-redux是redux官方react綁定庫,能夠使react組件從redux store中讀取數(shù)據(jù),并且向store分發(fā)actions以此來更新數(shù)據(jù),這篇文章主要介紹了react-redux的設置,需要的朋友可以參考下
    2022-08-08
  • 探究react-native 源碼的圖片緩存問題

    探究react-native 源碼的圖片緩存問題

    本篇文章主要介紹了探究react-native 源碼的圖片緩存問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解Redux的工作流程

    詳解Redux的工作流程

    這篇文章主要介紹了Redux的工作流程,redux是一個專門用于做狀態(tài)管理的JS庫,它可以在react、angular、vue等項目中,但基本與react配合使用,需要的朋友可以參考下
    2022-08-08
  • React中多語言的配置方式

    React中多語言的配置方式

    這篇文章主要介紹了React中多語言的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

大余县| 嘉鱼县| 岳西县| 尤溪县| 广德县| 古浪县| 新化县| 同德县| 揭阳市| 桓仁| 多伦县| 南郑县| 连云港市| 承德市| 吕梁市| 云梦县| 普兰县| 六盘水市| 九寨沟县| 股票| 隆昌县| 修水县| 平远县| 巫溪县| 荔浦县| 舞钢市| 岑巩县| 建始县| 时尚| 龙门县| 广河县| 印江| 呼伦贝尔市| 上林县| 临沧市| 左权县| 乡城县| 亚东县| 千阳县| 太和县| 固始县|