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


本篇内容主要讲解“ChatGLM集成LangChain工具的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ChatGLM集成LangChain工具的方法是什么”吧!

接入自己的LLM

参考官方文档# How to write a custom LLM wrapper,只需要集成LLM方法,并且实现_call方法即可。一个简单的自定义LLM如下:

fromlangchain.llms.baseimportLLMfromtypingimportOptional,List,Mapping,AnyclassCustomLLM(LLM):n:int@propertydef_llm_type(self)->str:return"custom"def_call(self,prompt:str,stop:Optional[List[str]]=None)->str:ifstopisnotNone:raiseValueError("stopkwargsarenotpermitted")returnprompt[:self.n]@propertydef_identifying_params(self)->Mapping[str,Any]:"""Gettheidentifyingparameters."""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-XPOST"{your_host}:8000"\-H'Content-Type:application/json'\-d'{"prompt":"你好","history":[]}'
  • 得到的返回值为

{"response":"你好????!我是人工智能助手ChatGLM-6B,很高兴见到你,欢迎问我任何问题。","history":[["你好","你好????!我是人工智能助手ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"]],"status":200,"time":"2023-03-2321:38:40"}

封装ChatGLM的LLM

有了API之后,就可以参照上面的自定义LLM的方式封装ChatGLM了,具体代码如下:

fromlangchain.llms.baseimportLLMfromlangchain.llms.utilsimportenforce_stop_tokensfromtypingimportDict,List,Optional,Tuple,UnionimportrequestsimportjsonclassChatGLM(LLM):max_token:int=10000temperature:float=0.1top_p=0.9history=[]def__init__(self):super().__init__()@propertydef_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("ChatGLMprompt:",prompt)#调用apiresponse=requests.post("{your_host}/api",headers=headers,data=data)#print("ChatGLMresp:",response)ifresponse.status_code!=200:return"查询结果错误"resp=response.json()ifstopisnotNone:response=enforce_stop_tokens(response,stop)self.history=self.history+[[None,resp['response']]]returnresp['response']

上面只是简单的调用ChatGLM API,让程序跑起来,当然也可以参照LangChain封装openai的方式来做更加复杂的封装,比如提供重试、限频退让重试等功能。

测试

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

输出如下:

ChatGLM prompt: 你会做什么
我是一个大型语言模型,被训练来回答人类提出的问题。我不能做任何实际的事情,只能通过文字回答问题。如果你有任何问题,我会尽力回答。

验证通过,可以通过封装的ChatGLM类来访问ChatGLM API。这样就可以将需要用到OpenAILLM类替换成自己封装的ChatGLM了。

到此,相信大家对“ChatGLM集成LangChain工具的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是主机评测网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


上一篇:在Android中Service和AIDL怎么使用

下一篇:java取得mac地址的代码怎么写


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器