1.初始化

import os
​
from langchain.chat_models import init_chat_model
from openai import api_key
from dotenv import load_dotenv
from rich import print as rprint
​
load_dotenv(override=True) #默认搜索当前目录下.env文件, override=True确保文件中定义的环境变量覆盖系统环境变量
​
ZHIPU_API_KEY = os.environ.get("ZHIPU_API_KEY")
ZHIPU_BASE_URL = os.environ.get("ZHIPU_BASE_URL")
​
model = init_chat_model(
    model_provider="openai", #glm系列模型的提供商不在支持范围内,但兼容openai兼容接口,model值设置为openai即可
    model = "glm-4.7-flash", #模型的名称
    api_key = ZHIPU_API_KEY, #模型的apikey密钥
    base_url = ZHIPU_BASE_URL #模型的调用地址
)
​

model_provider:模型的提供商,单独传递,而不是作为 model 参数的前缀。

这等同于前缀形式。例如:

  • model='claude-sonnet-4-5', model_provider='anthropic' 的行为与 model='anthropic:claude-sonnet-4-5' 完全相同。

多数情况下建议使用 model 参数的前缀形式(即 '提供商:模型名')。在以下场景中,你可以考虑使用 model_provider 这个关键字参数:

  • 提供商是动态的(例如从配置文件或环境变量中读取),而你不希望手动拼接字符串。

  • 你希望 model 和 model_provider 在运行时通过 configurable_fields 能够独立互换(例如,将同一个模型名称路由到不同的主机)。


支持的值及其所需的集成包(需单独安装):

提供商值 (model_provider) 所需的集成包
openai langchain-openai
anthropic langchain-anthropic
azure_openai langchain-openai
azure_ai langchain-azure-ai
google_vertexai langchain-google-vertexai
google_genai langchain-google-genai
anthropic_bedrock langchain-aws
bedrock langchain-aws
bedrock_converse langchain-aws
cohere langchain-cohere
fireworks langchain-fireworks
together langchain-together
mistralai langchain-mistralai
huggingface langchain-huggingface
groq langchain-groq
ollama langchain-ollama
google_anthropic_vertex langchain-google-vertexai
deepseek langchain-deepseek
ibm langchain-ibm
nvidia langchain-nvidia-ai-endpoints
xai langchain-xai
openrouter langchain-openrouter
perplexity langchain-perplexity
upstage langchain-upstage
baseten langchain-baseten
litellm langchain-litellm
meta langchain-meta
langsmith langchain-openai(LangSmith LLM Gateway 使用 OpenAI 兼容接口)

2.调用

2.1 invoke(阻塞调用)
import os
​
from langchain.chat_models import init_chat_model
from openai import api_key
from dotenv import load_dotenv
from rich import print as rprint
​
load_dotenv(override=True) #默认搜索当前目录下.env文件, override=True确保文件中定义的环境变量覆盖系统环境变量
​
ZHIPU_API_KEY = os.environ.get("ZHIPU_API_KEY")
ZHIPU_BASE_URL = os.environ.get("ZHIPU_BASE_URL")
​
model = init_chat_model(
    model_provider="openai",
    model = "glm-4.7-flash", #模型的名称
    api_key = ZHIPU_API_KEY, #模型的apikey密钥
    base_url = ZHIPU_BASE_URL #模型的调用地址
)
​
response = model.invoke("你好,介绍下你自己(100字以内)")
​
rprint(response)
C:\Users\13435\.conda\envs\LangChain\python.exe D:\PythonProject\LangChain\1.模型初始化.py 
AIMessage(
    content='你好,我是GLM大语言模型,由Z.ai开发。我可以回答问题、提供建议并协
助你完成各种任务。请问有什么可以帮你的吗?',
    additional_kwargs={'refusal': None},
    response_metadata={
        'token_usage': {
            'completion_tokens': 543,
            'prompt_tokens': 15,
            'total_tokens': 558,
            'completion_tokens_details': {
                'accepted_prediction_tokens': None,
                'audio_tokens': None,
                'reasoning_tokens': 500,
                'rejected_prediction_tokens': None,
                'text_tokens': None
            },
            'prompt_tokens_details': {
                'audio_tokens': None,
                'cache_write_tokens': None,
                'cached_tokens': 2,
                'image_tokens': None,
                'text_tokens': None
            }
        },
        'model_provider': 'openai',
        'model_name': 'glm-4.7-flash',
        'system_fingerprint': None,
        'id': '20260815174431b39a35b900f24db6',
        'finish_reason': 'stop',
        'logprobs': None
    },
    id='lc_run--01a004cf-07b3-7202-9b72-36f04175800f-0',
    tool_calls=[],
    invalid_tool_calls=[],
    usage_metadata={
        'input_tokens': 15,
        'output_tokens': 543,
        'total_tokens': 558,
        'input_token_details': {'cache_read': 2},
        'output_token_details': {'reasoning': 500}
    }
)
​
进程已结束,退出代码为 0
​

invoke:阻塞调用,模型完成全部输出后,再一次性发送所有信息(所需要的时间比较长)

2.2 stream(流式调用)
import os
​
from langchain.chat_models import init_chat_model
from openai import api_key
from dotenv import load_dotenv
from rich import print as rprint
​
load_dotenv(override=True) #默认搜索当前目录下.env文件, override=True确保文件中定义的环境变量覆盖系统环境变量
​
ZHIPU_API_KEY = os.environ.get("ZHIPU_API_KEY")
ZHIPU_BASE_URL = os.environ.get("ZHIPU_BASE_URL")
​
model = init_chat_model(
    model_provider="openai",
    model = "glm-4.7-flash", #模型的名称
    api_key = ZHIPU_API_KEY, #模型的apikey密钥
    base_url = ZHIPU_BASE_URL #模型的调用地址
)
​
for chunk in model.stream("你好,介绍下你自己(100字以内)"):
    print(chunk.text,end="",flush=True) #end=""阻止添加换行符,flush=True确保增量文本实时刷新
C:\Users\13435\.conda\envs\LangChain\python.exe D:\PythonProject\LangChain\1.模型初始化.py 
你好,我是GLM,由Z.ai开发的大语言模型。我可以回答问题、辅助创作、总结信息,致力于为你提供专业、便捷的帮助。
进程已结束,退出代码为 0

invoke:流式调用,在生成时流式传输其输出内容。通过逐步显示输出,可以显著改善用户体验,尤其是对于较长的响应。

3.batch(批量调用)
import os
​
from langchain.chat_models import init_chat_model
from openai import api_key
from dotenv import load_dotenv
from rich import print as rprint
​
load_dotenv(override=True) #默认搜索当前目录下.env文件, override=True确保文件中定义的环境变量覆盖系统环境变量
​
ZHIPU_API_KEY = os.environ.get("ZHIPU_API_KEY")
ZHIPU_BASE_URL = os.environ.get("ZHIPU_BASE_URL")
​
model = init_chat_model(
    model_provider="openai",
    model = "glm-4.7-flash", #模型的名称
    api_key = ZHIPU_API_KEY, #模型的apikey密钥
    base_url = ZHIPU_BASE_URL #模型的调用地址
)
​
responses = model.batch([
    "为什么鹦鹉有五颜六色的羽毛?",
    "飞机是如何飞行的?",
    "什么是量子计算?"
])
​
for response in responses:
    print(response)

batch:将一组独立请求批量处理给模型可以显著提高性能并降低成本,因为处理可以并行进行。