Appearance
智谱GLM集成
除了通义千问,国内另一家值得关注的是智谱 AI 的 GLM 系列。它家 glm-4-flash 免费额度大,适合新手练手;glm-4-plus 能力对标 GPT-4o。本章讲怎么接进 LangGraph。
一、智谱 GLM 简介
智谱 AI 出自清华,主打 GLM(General Language Model)系列。常用模型:
| 模型 | 特点 | 适用 |
|---|---|---|
glm-4-plus | 旗舰,能力强 | 复杂任务/智能体 |
glm-4-flash | 免费、快、能力弱 | 练手/简单任务 |
glm-4-air | 性价比档 | 日常 |
glm-4v | 多模态(图文) | 图像理解 |
新手特点:glm-4-flash 免费,做实验不烧钱;要做正经智能体上 glm-4-plus。
二、安装与配置
2.1 安装
智谱的 LangChain 集成在 langchain-community,依赖官方 SDK zhipuai:
bash
pip install langchain-community zhipuai -i https://pypi.tuna.tsinghua.edu.cn/simple也有官方包 langchain-zhipu(更新更及时),二选一:
bash
pip install langchain-zhipu -i https://pypi.tuna.tsinghua.edu.cn/simple本文用 langchain-community 的 ChatZhipuAI,社区版用户多、文档全。
2.2 获取 API Key
- 登录智谱开放平台:https://open.bigmodel.cn
- 注册后在"API Keys"页面创建 key。
- 复制保存(形如
xxx.yyy)。
2.3 配置环境变量
bash
# Windows
setx ZHIPUAI_API_KEY "你的key"
# macOS / Linux
export ZHIPUAI_API_KEY="你的key"ChatZhipuAI 会自动读 ZHIPUAI_API_KEY。设完重开终端。
三、ChatZhipuAI 基础用法
3.1 最简调用
python
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import HumanMessage
llm = ChatZhipuAI(model="glm-4-plus", temperature=0)
resp = llm.invoke([HumanMessage(content="你好,用一句话介绍自己")])
print(resp.content)3.2 常用参数
python
llm = ChatZhipuAI(
model="glm-4-plus",
temperature=0, # 0-1
max_tokens=1024,
)注意 ChatZhipuAI 也不用配 base_url,国内直连。
3.3 流式输出
python
for chunk in llm.stream([HumanMessage(content="写一首关于秋天的诗")]):
print(chunk.content, end="", flush=True)四、工具调用
GLM-4 系列支持 OpenAI 风格工具调用:
python
from langchain_core.tools import tool
@tool
def add(a: float, b: float) -> float:
"""两数相加。"""
return a + b
@tool
def get_weather(city: str) -> str:
"""查城市天气。"""
return {"北京": "晴 25°C", "上海": "多云 28°C"}.get(city, "未知")
llm = ChatZhipuAI(model="glm-4-plus", temperature=0)
llm_with_tools = llm.bind_tools([add, get_weather])
resp = llm_with_tools.invoke("上海天气?算 10+20")
print(resp.tool_calls)实测:
glm-4-plus:工具调用稳定,和qwen-plus同档。glm-4-flash:免费但能力弱,复杂工具经常不触发或参数错。智能体别用 flash。
五、GLM-4V 多模态简介
glm-4v 支持图像输入。LangChain 里通过 HumanMessage 带图片 URL 调用:
python
from langchain_core.messages import HumanMessage
llm = ChatZhipuAI(model="glm-4v")
msg = HumanMessage(content=[
{"type": "text", "text": "描述这张图"},
{"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}},
])
print(llm.invoke([msg]).content)多模态不是本章重点,知道有这能力即可。
六、在 LangGraph 中构建智能体
和通义千问套路完全一致,换个类名就行:
python
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.tools import tool
from langchain_core.messages import HumanMessage
from langgraph.prebuilt import create_react_agent
@tool
def add(a: float, b: float) -> float:
"""两数相加。"""
return a + b
@tool
def multiply(a: float, b: float) -> float:
"""两数相乘。"""
return a * b
@tool
def get_weather(city: str) -> str:
"""查城市天气,支持北京/上海/广州。"""
data = {"北京": "晴 25°C", "上海": "多云 28°C", "广州": "雨 31°C"}
return data.get(city, f"{city} 未知")
agent = create_react_agent(
model=ChatZhipuAI(model="glm-4-plus", temperature=0),
tools=[add, multiply, get_weather],
prompt="你是中文助手,按需调工具,简体中文回答。",
)
result = agent.invoke({
"messages": [HumanMessage(content="查北京天气,再算 12 乘以 8")]
})
print(result["messages"][-1].content)七、完整可运行示例
python
import os
from dotenv import load_dotenv
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.tools import tool
from langchain_core.messages import HumanMessage
from langgraph.prebuilt import create_react_agent
load_dotenv() # 从 .env 读 ZHIPUAI_API_KEY
# 1. 基础对话
llm = ChatZhipuAI(model="glm-4-plus", temperature=0)
print("=== 基础对话 ===")
print(llm.invoke([HumanMessage(content="用一句话介绍 LangGraph")]).content)
# 2. 流式
print("\n=== 流式 ===")
for chunk in llm.stream([HumanMessage(content="写一句关于AI的格言")]):
print(chunk.content, end="", flush=True)
print()
# 3. 工具调用 ReAct
@tool
def add(a: float, b: float) -> float:
"""两数相加。"""
return a + b
@tool
def get_weather(city: str) -> str:
"""查城市天气,支持北京/上海。"""
return {"北京": "晴 25°C", "上海": "多云 28°C"}.get(city, "未知")
print("\n=== ReAct 智能体 ===")
agent = create_react_agent(
llm, [add, get_weather],
prompt="你是中文助手,按需调工具,简体中文回答。",
)
r = agent.invoke({"messages": [HumanMessage(content="上海天气?再算 50+60")]})
print(r["messages"][-1].content)八、常见踩坑
1. flash 模型能力弱
glm-4-flash 免费很诱人,但工具调用经常"不触发"或参数乱填。做智能体别用 flash,老老实实 glm-4-plus。flash 只适合纯对话练手。
2. 工具调用兼容性
智谱的 tool_calls 格式偶有边缘 case 和 OpenAI 不完全一致,极少数情况下 LangChain 解析会出小问题。升级 zhipuai 和 langchain-community 到最新版可避坑:
bash
pip install -U zhipuai langchain-community -i https://pypi.tuna.tsinghua.edu.cn/simple3. API Key 格式特殊
智谱 key 是 id.secret 形式(中间一个点),别只复制一半。ChatZhipuAI 内部会自动拆分,直接整个传或塞环境变量即可。
4. 限流与计费
glm-4-flash免费但 QPS 低,并发高会 429。glm-4-plus按量计费,新用户有赠金。- 后台能看用量看板,注意别跑超。
5. streaming 需显式开
某些版本 ChatZhipuAI 默认 streaming=False,调 stream() 不报错但不流式。显式设 streaming=True:
python
llm = ChatZhipuAI(model="glm-4-plus", streaming=True)九、小结
- 智谱 GLM:
glm-4-plus强、glm-4-flash免费练手。 ChatZhipuAI(model="glm-4-plus")即可,自动读ZHIPUAI_API_KEY,国内直连。- 工具调用 API 和通义/OpenAI 一致,靠
bind_tools。 - 踩坑:flash 别做智能体、注意 key 格式、streaming 要显式开。
下一章讲完全免费、隐私最好的方案:本地模型 Ollama。