中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ChatGLM集成LangChain工具的方法是什么

發布時間:2023-04-27 17:59:13 來源:億速云 閱讀:196 作者:iii 欄目:開發技術

本篇內容主要講解“ChatGLM集成LangChain工具的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ChatGLM集成LangChain工具的方法是什么”吧!

接入自己的LLM

參考官方文檔# How to write a custom LLM wrapper,只需要集成LLM方法,并且實現_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}

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

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

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

搭建ChatGLM的api

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

  • 首先需要安裝額外的依賴 pip install fastapi uvicorn ,然后運行倉庫中的 api.py: python api.py

  • 默認部署在本地的 8000 端口,通過 POST 方法進行調用

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這個參數,指定為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)
        # 調用api
        response = requests.post("{your_host}/api",headers=headers,data=data)
		# print("ChatGLM resp:",response)
        if response.status_code!=200:
          return "查詢結果錯誤"
        resp = response.json()
        if stop is not None:
            response = enforce_stop_tokens(response, stop)
        self.history = self.history+[[None, resp['response']]]
        return resp['response']

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

測試

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

輸出如下:

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

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

到此,相信大家對“ChatGLM集成LangChain工具的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸水县| 邹城市| 贵溪市| 通州区| 达州市| 牡丹江市| 定襄县| 武宣县| 鲁山县| 盘山县| 陆河县| 密山市| 汝城县| 图片| 额济纳旗| 台山市| 龙山县| 旺苍县| 城固县| 且末县| 巩留县| 九龙县| 康定县| 新安县| 星座| 英超| 清丰县| 将乐县| 仪征市| 页游| 佛坪县| 保康县| 东乌珠穆沁旗| 盐亭县| 东宁县| 师宗县| 射洪县| 宁陕县| 化州市| 北宁市| 石林|