ChatGLM 集成LangChain工具完整指南

作者:袖梨 2026-08-21

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“ChatGLM 集成LangChain工具”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • 引言
  • 接入自己的LLM
  • 搭建ChatGLM的api
  • 封装ChatGLM的LLM
  • 测试
  • 总结
  • 参考

引言

从实现思路看,最新一段时间一直在学习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工具的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
  • langchain采用自定义example selector示例解析
  • 大语言模型的开发利器langchainan安装采用更快入门学习
  • langchain Prompt大语言模型采用技巧详解
  • Javascript版Langchain入门教程解析
  • LangChain简化ChatGPT工程复杂度采用详解
  • Langchain集成管理prompt功能详解
  • langchain中LLM模型采用详解

相关文章

精彩推荐