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:将一组独立请求批量处理给模型可以显著提高性能并降低成本,因为处理可以并行进行。

赣公网安备36010402000648号