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

ChatGLM?集成LangChain工具詳解

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

引言

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

接入自己的LLM

參考官方文檔# How to write a custom LLM wrapper,只需要集成LLM方法,并且實(shí)現(xiàn)_call方法即可。一個(gè)簡單的自定義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}

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

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

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

搭建ChatGLM的api

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

  • 首先需要安裝額外的依賴 pip install fastapi uvicorn ,然后運(yùn)行倉庫中的 api.pypython api.py
  • 默認(rèn)部署在本地的 8000 端口,通過 POST 方法進(jìn)行調(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這個(gè)參數(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é)果錯(cuò)誤"
        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,讓程序跑起來,當(dāng)然也可以參照LangChain封裝openai的方式來做更加復(fù)雜的封裝,比如提供重試、限頻退讓重試等功能。

測(cè)試

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

輸出如下:

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

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

總結(jié)

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

參考

thomas-yanxin/LangChain-ChatGLM-Webui

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

ChatGLM-6B chatglm的api搭建

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

相關(guān)文章

  • React實(shí)現(xiàn)雙向綁定示例代碼

    React實(shí)現(xiàn)雙向綁定示例代碼

    這篇文章給大家介紹了在React中如何實(shí)現(xiàn)雙向綁定,文中給出了示例代碼,對(duì)大家的理解與學(xué)習(xí)很有幫助,有需要的朋友下面來一起看看吧。
    2016-09-09
  • useState?解決文本框無法輸入的問題詳解

    useState?解決文本框無法輸入的問題詳解

    這篇文章主要為大家介紹了useState?解決文本框無法輸入的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • react中事件處理與柯里化的實(shí)現(xiàn)

    react中事件處理與柯里化的實(shí)現(xiàn)

    本文主要介紹了react中事件處理與柯里化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • VSCode搭建React Native環(huán)境

    VSCode搭建React Native環(huán)境

    這篇文章主要介紹了VSCode搭建React Native環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • React Router中Link和NavLink的學(xué)習(xí)心得總結(jié)

    React Router中Link和NavLink的學(xué)習(xí)心得總結(jié)

    這篇文章主要介紹了React Router中Link和NavLink的學(xué)習(xí)心得總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React項(xiàng)目中使用Redux的?react-redux

    React項(xiàng)目中使用Redux的?react-redux

    這篇文章主要介紹了React項(xiàng)目中使用Redux的?react-redux,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 減少react組件不必要的重新渲染實(shí)現(xiàn)方法

    減少react組件不必要的重新渲染實(shí)現(xiàn)方法

    這篇文章主要為大家介紹了減少react組件不必要的重新渲染實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • React應(yīng)用框架Dva數(shù)據(jù)流向原理總結(jié)分析

    React應(yīng)用框架Dva數(shù)據(jù)流向原理總結(jié)分析

    這篇文章主要為大家介紹了React 應(yīng)用框架Dva數(shù)據(jù)流向原理總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React路由動(dòng)畫切換實(shí)現(xiàn)過程詳解

    React路由動(dòng)畫切換實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了react-router 路由切換動(dòng)畫的實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2022-12-12
  • Can't?perform?a?React?state?update?on?an?unmounted?component報(bào)錯(cuò)解決

    Can't?perform?a?React?state?update?on?an?unmoun

    這篇文章主要為大家介紹了Can't?perform?a?React?state?update?on?an?unmounted?component報(bào)錯(cuò)解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論