LangChain模型调用

LangChain模型调用
LangChain 基础介绍 #TermLangChain连接 Python 与各大大模型厂商的胶水框架统一封装模型调用、智能体、RAG 等能力兼容阿里云百炼、DeepSeek、OpenAI 等所有兼容 OpenAI 接口的模型。官网地址https://docs.langchain.com/ 中文文档docs.langchain.org.cn/oss/一、环境安装配置1. 配置国内清华 pip 源加速下载shellpip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple2. 必备依赖包shellpip install langchain langchain-openai openai python-dotenv langchain-core二、大模型调用三件套1. 阿里云百炼平台接入平台地址https://bailian.console.aliyun.com/cn-beijing#/home前置准备获取 API Key平台密钥管理页面生成获取业务空间 WorkspaceId控制台业务空间域名内标识选择平台内置模型qwen-plus、qwen3.7-max 等不支持 DeepSeek 系列写法 1LangChain 0.3 旧版 ChatOpenAIpython运行#1.导入依赖 from langchain_openai import ChatOpenAI from openai import OpenAI import os from dotenv import load_dotenv # 加载.env环境变量解决中文乱码 load_dotenv(encodingutf-8) # 读取配置 workspace_id os.getenv(ALI_WORKSPACE_ID) llm ChatOpenAI( modelqwen-plus, api_keyos.getenv(QWEN_API_KEY), # 拼接完整合法接口地址 base_urlfhttps://{workspace_id}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1 ) # 调用模型 response llm.invoke(你是谁) print(response) # 完整元数据对象 print(response.content) # 仅打印模型回答文本写法 2LangChain 1.0 新版 init_chat_model推荐python运行#1导入依赖 import os from dotenv import load_dotenv from langchain.chat_models import init_chat_model # 加载环境变量 load_dotenv(encodingutf-8) #2.实例化模型 model init_chat_model( modelqwen-plus, model_provideropenai, api_keyos.getenv(aliQwen-api), base_urlhttps://{你的WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1 ) #3.调用模型 print(model.invoke(你是谁).content) print(* * 50)[!tip] 多模型共存思路同一项目可同时初始化多个厂商模型业务层统一封装调度按需切换调用。2. DeepSeek 模型接入官方平台https://platform.deepseek.com/usage 核心要点独立接口地址密钥与阿里云不通用阿里云百炼无法调用 DeepSeek 模型。python运行#1导入依赖 import os from dotenv import load_dotenv from langchain.chat_models import init_chat_model load_dotenv(encodingutf-8) #2.实例化模型 model init_chat_model( modeldeepseek-v4-flash, model_provideropenai, api_keyos.getenv(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com/v1 ) #3.调用模型 print(model.invoke(你是谁).content) print(* * 50)三、通用 .env 配置文件统一管理密钥禁止硬编码env# 阿里云百炼配置 QWEN_API_KEYsk-xxx ALI_WORKSPACE_IDws-xxx aliQwen-apisk-xxx # DeepSeek配置 DEEPSEEK_API_KEYsk-xxx DEEPSEEK_BASE_URLhttps://api.deepseek.com/v1 DEEPSEEK_MODELdeepseek-v4-flash # LLM全局推理参数 LLM_TIMEOUT60 LLM_TEMPERATURE0.7四、两种模型调用方式 #Term同步调用 invoke ()一次性请求等待模型生成完整文本后统一返回适合短问答长文本会阻塞等待无实时打字效果。流式调用 stream ()【重点】模型分段输出文本分片 chunk循环实时读取前端交互体验更好避免长时间空白卡顿。 使用模板python运行for chunk in model.stream(提问内容): print(chunk.content, end)五、企业级强制编码规范 #Rule日志规范禁止使用 print 输出业务日志统一使用logging模块分级打印 INFO/DEBUG/ERROR携带时间戳方便线上排错。环境变量管理密钥、接口地址全部存入.env禁止硬编码代码启动时必须做非空校验密钥缺失直接抛出清晰异常.env 加入.gitignore 不提交代码仓库。模型初始化封装统一封装init_llm_client()函数集中管理模型名称、超时、温度等参数全局复用。分层精细化异常捕获区分配置异常、网络异常、接口业务错误识别常见错误码401 密钥失效、402 账户余额不足、404 模型不存在。程序入口保护使用if __name__ __main__:包裹主逻辑避免文件被导入时自动执行顶层全局 try-except 兜底防止程序崩溃。六、LangChain 架构版本对比 #Compare表格版本时代架构模式执行特点扩展机制v0.x 旧版Chain 链式线性串联流程不支持分支、循环Hooks 钩子v1.0 新版LangGraph 图状支持分支、循环、任务回溯Middleware 中间件七、企业级标准完整代码 #Codepython运行import os import logging from dotenv import load_dotenv from langchain.chat_models import init_chat_model from langchain_core.language_models import BaseChatModel from openai import APIStatusError, APIConnectionError # 1. 全局日志标准化配置 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, datefmt%Y-%m-%d %H:%M:%S ) logger logging.getLogger(LLM-Service) # 2. 加载并校验环境变量 def load_env_config() - dict: load_dotenv(encodingutf-8) config { api_key: os.getenv(DEEPSEEK_API_KEY), base_url: os.getenv(DEEPSEEK_BASE_URL, https://api.deepseek.com/v1), model_name: os.getenv(DEEPSEEK_MODEL, deepseek-v4-flash), timeout: int(os.getenv(LLM_TIMEOUT, 60)), temperature: float(os.getenv(LLM_TEMPERATURE, 0.7)) } if not config[api_key]: raise ValueError(DEEPSEEK_API_KEY 未配置请检查项目.env文件) logger.info(环境变量加载校验完成) return config # 3. 统一封装模型初始化函数 def init_llm_client(config: dict) - BaseChatModel: logger.info(f初始化模型{config[model_name]}) llm init_chat_model( modelconfig[model_name], model_provideropenai, api_keyconfig[api_key], base_urlconfig[base_url], timeoutconfig[timeout], temperatureconfig[temperature] ) logger.info(模型客户端初始化成功) return llm # 4. 同步调用业务方法 def sync_chat(llm: BaseChatModel, query: str) - str: logger.info(f同步调用提问{query}) resp llm.invoke(query) logger.info(同步调用完成) return resp.content # 5. 流式输出业务方法 def stream_chat(llm: BaseChatModel, query: str): logger.info(f流式调用提问{query}) full_text for chunk in llm.stream(query): chunk_txt chunk.content full_text chunk_txt logger.debug(f流式分片{chunk_txt}) yield chunk_txt logger.info(f流式输出结束总文本长度{len(full_text)}) # 6. 程序入口 全局异常捕获 if __name__ __main__: user_question 请介绍一下LangGraph try: env_cfg load_env_config() llm_client init_llm_client(env_cfg) # 同步调用演示 logger.info( 同步 invoke 调用 ) sync_result sync_chat(llm_client, user_question) logger.info(f同步返回结果\n{sync_result}) # 流式调用演示 logger.info( 流式 stream 调用 ) stream_total for piece in stream_chat(llm_client, user_question): stream_total piece logger.info(f流式完整内容\n{stream_total}) except ValueError as ve: logger.error(f配置参数异常{str(ve)}) except APIStatusError as se: if se.status_code 402: logger.error(调用失败账户余额不足请充值后重试) elif se.status_code 401: logger.error(调用失败API密钥无效或已过期) elif se.status_code 404: logger.error(调用失败模型名称不存在请核对参数) else: logger.error(f接口异常状态码{se.status_code}) except APIConnectionError: logger.error(网络异常无法连接模型服务商接口) except Exception as e: logger.error(f程序未知异常{str(e)}, exc_infoTrue)八、高频报错汇总 #ErrorValueError: DEEPSEEK_API_KEY 未配置原因.env 文件缺失、变量名写错、未执行load_dotenv()加载配置402 Insufficient BalanceDeepSeek 账户余额不足可切换阿里云百炼使用免费额度测试401 鉴权失败API 密钥复制错误、密钥过期、密钥权限不足404 模型不存在模型名称拼写错误阿里云接口地址不可调用 DeepSeek 模型九、配套 .gitignore 企业规范plaintext# 敏感环境配置 .env .env.* # 虚拟环境目录 .venv/ venv/ # Python缓存文件 __pycache__/ *.pyc # 日志文件 *.log logs/