我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ChatGLM 集成LangChain工具详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ChatGLM 集成LangChain工具详解

引言

最新一段时间一直在学习LangChain相关的文档,发现LangChain提供了非常丰富的生态,并且也可以让业务非常方便的封装自己的工具,接入到LangcChain的生态中,比如切换不同向量存储(Vectorstores)、文件分片(Text Splitters)和文件加载器(Document Loaders)等。 本文将简单介绍下如何将自己搭建的ChatGLM集成进LangChain工具链中,当然如果有其他的自己搭建的LLM模型也可以采用类似的方式集成。

接入自己的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工具链中,并且进行简单的试验的效果。当然如果有其他自己搭建的LLM模型也可以采用类似的方式集成。后续将使用ChatGLM来实现一个本地知识库做问答系统。

参考

thomas-yanxin/LangChain-ChatGLM-Webui

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

ChatGLM-6B chatglm的api搭建

以上就是ChatGLM 集成进LangChain工具的详细内容,更多关于ChatGLM 集成进LangChain工具的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ChatGLM 集成LangChain工具详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ChatGLM 集成LangChain工具详解

这篇文章主要为大家介绍了Svelte和React框架使用比较,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-18

Go 代码生成工具详解

目录gormgen场景示例使用handlergen场景示例分享两个常用的代码生成工具:gormgenhandlergen gormgen 基于 MySQL 数据表结构进行生成 3 个文件:生成表的 struct 结构体生成表的 Markdo
2022-06-07

如何理解集成测试工具Tessy

如何理解集成测试工具Tessy,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 Tessy是一个专门针对嵌入式软件的C/C++代码进行单元、集成测试
2023-06-03

网络扫描集成工具SPARTA

网络扫描集成工具SPARTA
2023-06-04

SpringBoot下集成缓存工具类CacheManager

这篇文章主要介绍了Springboot下集成缓存工具类CacheManager,想进一步了解相关知识的同学,可以详细阅读本文
2023-03-24

PHP持续集成工具有哪些

本篇文章给大家分享的是有关PHP持续集成工具有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。持续集成的概念持续集成的概念是在现代软件工程中提出的,最早见于敏捷开发方法论中,
2023-06-17

PHP集成开发工具有哪些

这篇文章将为大家详细讲解有关PHP集成开发工具有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP UMLProfilerNew PHP formatting options支持Zend,Pear和
2023-06-17

将SCONS工具集成到Python代码中

SCONS是Python的自动智能结构化编译工具,将来或许能代替Make。    在Windows或者Linux下,SConstruct文件相当于MakeFile,使用SCONS编译,需输入scons.bat(scons),后面带上编译选项
2023-01-31

编程热搜

目录