您好,登錄后才能下訂單哦!
本篇內容主要講解“ChatGLM集成LangChain工具的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ChatGLM集成LangChain工具的方法是什么”吧!
參考官方文檔# 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-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" }
有了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
。這樣就可以將需要用到OpenAI
的LLM
類替換成自己封裝的ChatGLM
了。
到此,相信大家對“ChatGLM集成LangChain工具的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。