当前位置: 首页 > news >正文

第二章 LangChain核心组件实操

LangChain 做了统一抽象接口,不管 OpenAI、DeepSeek、Hugging Face 模型,调用写法基本一样,屏蔽底层接口差异,开发者只专注业务功能。

在LangChain中,大模型主要分为两类:

① LLM 文本生成模型:只传一段文字、返回一段文字,像 Llama、通义千问开源版;适合翻译、摘要、单次短文生成。
② ChatModel 对话模型:传入完整多轮对话记录(用户 + 助手历史消息),返回单条回复,像 GPT4o、DeepSeek 对话版;适合聊天机器人,能记住上下文。

模型调用(ChatOpenAI)

# 导入必要的模块from langchain_openaiimportChatOpenAI# OpenAI对话模型的统一接口from dotenvimportload_dotenvimportos# 加载API密钥(和上一章一样,从.env文件读取)load_dotenv()API_KEY=os.getenv("API_KEY")BASE_URL=os.getenv("BASE_URL")# 从环境变量读取,未配置时默认为None(使用OpenAI官方地址)ifnot API_KEY: raise ValueError("未检测到 API_KEY,请检查 .env 文件是否配置正确")# 1. 初始化对话模型# 不管是哪个厂商的ChatModel,初始化参数都类似(model、temperature等)chat_model=ChatOpenAI(api_key=API_KEY,base_url=BASE_URL,model="deepseek-chat",# 选择对话模型temperature=0.3,# 随机性:0-1,越小越严谨,越大越有创造力max_tokens=200# 最大生成 tokens 数,避免生成过长内容)# 2. 构造对话消息# ChatModel需要接收的是“消息列表”,每个消息有角色(user/assistant/system)和内容messages=[# system消息:给助手设定身份和行为准则,会影响后续所有回复{"role":"system","content":"你是一个耐心的AI学习助手,回复简洁易懂,适合高校学生理解。"},# user消息:用户的问题{"role":"user","content":"请用3句话解释什么是LangChain?"}]# 3. 调用模型生成结果# 统一调用方法:invoke(),传入消息列表result=chat_model.invoke(messages)# 4. 输出结果# 结果是一个ChatMessage对象,content属性是回复内容print("ChatModel回复:")print(result.content)

备注:模型有多个角色,system/user/assistant 不只是标记是谁说话,本质是给模型施加不同层级的约束。(优先级:system > user > assistant)
三个角色分别是什么约束?
① system 系统提示(最高优先级全局约束)
对话开篇一次性设定全局规则:角色身份、回答风格、输出限制、行为边界。
全程生效,所有问答都必须遵守,用户无法覆盖这条规则,用户看不到这条消息。
类比:课前统一教学准则。
② user 用户消息(单次任务输入)
每轮用户新提问 / 指令,推进对话流程;
必须服从 system 定下的全局规则,不能更改底层约束。
类比:学生当场提出的新问题。
③ assistant 助手消息(上下文记忆载体)
模型不会自动记住历史回复,必须把上一轮模型输出以 assistant 格式塞进消息列表,模型才能连贯理解上下文。
作用是留存对话历史,保证多轮对话不脱节。
类比:刚讲完的板书,不记录就会失忆。

from langchain_openaiimportChatOpenAI from dotenvimportload_dotenvimportos load_dotenv()API_KEY=os.getenv("API_KEY")BASE_URL=os.getenv("BASE_URL")ifnot API_KEY: raise ValueError("未检测到 API_KEY,请检查 .env 文件是否配置正确")chat_model=ChatOpenAI(api_key=API_KEY,base_url=BASE_URL,model="deepseek-chat",temperature=0.3,max_tokens=200)# 初始化对话历史(包含 system 设定)history=[{"role":"system","content":"你是一个耐心的AI学习助手,回复简洁易懂,适合高校学生理解。"}]# 第一轮对话history.append({"role":"user","content":"请用3句话解释什么是LangChain?"})result=chat_model.invoke(history)print("【第一轮回复】:")print(result.content)# 将模型的回复添加到历史中(assistant 消息)history.append({"role":"assistant","content":result.content})# 第二轮对话# 追问,模型需要上下文才能理解"它"history.append({"role":"user","content":"它的核心组件有哪些?"})result=chat_model.invoke(history)print("\n【第二轮回复】:")print(result.content)# 继续记录history.append({"role":"assistant","content":result.content})# 第三轮对话history.append({"role":"user","content":"给我一个简单的使用场景"})result=chat_model.invoke(history)print("\n【第三轮回复】:")print(result.content)

提示词模板(PromptTemplate)

PromptTemplate 相当于提示词的 “填空模板”,固定话术写死,变化内容传参填入,减少重复编码。
拆分固定文本和动态可变参数,模板一次定义、反复复用,提示词统一规范。

formatted_prompt=prompt_template.format(user_role="程序员",subject="AI Agent")result=chat_model.invoke([{"role":"user","content":formatted_prompt}])print("给程序员的AI Agent学习建议:")print(result.content)

少样本提示词模板案例:数据基建方向

# 导入必要的模板类from langchain_core.promptsimportFewShotPromptTemplate, PromptTemplate from langchain_openaiimportChatOpenAI from dotenvimportload_dotenvimportos load_dotenv()API_KEY=os.getenv("API_KEY")BASE_URL=os.getenv("BASE_URL")ifnot API_KEY: raise ValueError("未检测到 API_KEY,请检查 .env 文件是否配置正确")chat_model=ChatOpenAI(api_key=API_KEY,base_url=BASE_URL,model="deepseek-chat",temperature=0.3,max_tokens=300)# 1. 定义少样本示例:数据基建相关两大模块examples=[{"data_infra_module":"数据仓库搭建","build_plan":"核心目标:统一企业数据口径,支撑报表与离线分析;搭建步骤:1. 梳理业务分层(ODS/DWD/DWS) 2. 选型存储引擎与调度工具 3. 制定数据血缘与质量校验规则;注意事项:分层解耦,提前预留分区扩容方案。"},{"data_infra_module":"实时数据管道开发","build_plan":"核心目标:低延迟同步业务数据流,支持实时指标看板;搭建步骤:1. 接入消息中间件Kafka 2. 使用Flink做流清洗与聚合 3. 写入实时数仓/Redis;注意事项:做好消息重试、幂等处理,避免数据重复。"}]# 2. 定义示例模板example_template=""" 数据基建模块:{data_infra_module}建设方案:{build_plan}""" example_prompt=PromptTemplate(input_variables=["data_infra_module","build_plan"],template=example_template)# 3. 组装少样本提示模板few_shot_prompt=FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,suffix="数据基建模块:{new_data_module}\n建设方案:",input_variables=["new_data_module"])# 4. 传入目标模块:数据底座平台(OpenClaw)formatted_prompt=few_shot_prompt.format(new_data_module="OpenClaw统一数据底座平台")print("少样本完整提示词:")print(formatted_prompt)# 5. 调用模型生成标准化建设方案result=chat_model.invoke([{"role":"user","content":formatted_prompt}])print("\n生成的数据底座建设方案:")print(result.content)
http://www.jsqmd.com/news/1026797/

相关文章:

  • 2026年滦南县靠谱黄金回收商铺更新盘点与选择策略 - 品牌鉴赏官2026
  • 2026年常州金坛区注册公司/营业执照代办服务推荐榜:专业变更、注销、减资与各行业代办全方位解析 - 品牌发掘
  • 番禺洛浦街道金小福黄金奢侈品回收(洛溪吉祥北街直营分店) - 花生花生1
  • input-overlay:5分钟让你的直播操作可视化,告别“按了什么键“的尴尬
  • 2026年高温蠕变试验机品牌专业甄选:官方推荐与行业分析 - 优质品牌商家
  • 开发记录30_时刻分组不是按时间切块_地点时间与垃圾隔离
  • 南充房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • MediaCrawler:构建企业级社交媒体数据采集系统的3大突破
  • 原行星盘垂直结构观测与行星形成机制研究
  • 2026年靠谱灭鼠杀虫公司怎么选?官方甄选指南来了!白蚁防治与四害消杀品牌对比分析 - 优质品牌商家
  • 杭州音乐剧校考核心备考技术维度与机构选择推荐 - 优质品牌商家
  • 2026年联动门与金库门行业官方推荐甄选:河北鑫瑞智能科技等企业实力解析 - 优质品牌商家
  • 2026年国产质量流量计品牌甄选:从技术研发到工程应用,这几家值得关注 - 优质品牌商家
  • RAG4CTS:工业时序预测的检索增强生成技术解析
  • 【合肥经济学院本科毕业论文】基于Spring Boot的就业技能培训平台的设计与实现
  • 大学生真实实测|172号卡邀请码60000为官方正版!权威凭证+副业优势全分享 - 172号卡推荐码60000
  • 电动车怎么托运回家最便宜?这招省一半钱 - 快递物流资讯
  • 2026年现阶段福建隔音板批发市场格局与专业服务商选择洞察 - 品牌鉴赏官2026
  • 2026年上海工程监理服务推荐榜:建筑工程监理/水利甲级监理/市政甲级监理公司,专业实力与资质深度解析 - 品牌发掘
  • 2026年太原裱花培训推荐榜:从韩式/浮雕/国风裱花到人物与场景塑造,零基础到专业精进的爆款课程精选 - 品牌发掘
  • 网络变压器回流焊工艺解析:非ESD敏感器件与炉温曲线设定
  • 2026乐山跷脚牛肉店官方甄选指南:本地人回头率最高的8家店实测 - 优质品牌商家
  • AtlasOS:3步打造高性能Windows系统的秘密武器
  • 2026年6月主流大模型Coding能力深度对比:GPT 5.5,Claude Opus 4.8,DeepSeek V4, Qwen 3.7, GLM 5.1, Kimi 2.6
  • 沧州漏水检测维修权威推荐:卫生间-厨房-阳台-屋顶天花板漏水维修:靠谱防水补漏公司团队TOP5推荐(2026最新深度调研实测榜单) - 即刻修防水
  • 江门漏水检测维修权威推荐:卫生间-厨房-阳台-屋顶天花板漏水维修:靠谱防水补漏公司团队TOP5推荐(2026最新深度调研实测榜单) - 即刻修防水
  • 表格数据RAG分块策略:10种生产级Chunking方法实战指南
  • 2026年南宁手表回收市场深度解析:专业服务商选择与野堂首饰推荐 - 品牌鉴赏官2026
  • 2026年近期国内高性价比手绘陶瓷杯工厂盘点与选择指南 - 品牌鉴赏官2026
  • 传统业务 AI 升级:用 RAG 技术做智能客服工单处理