当前位置: 首页 > 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.gsyq.cn/news/1538673.html

相关文章:

  • 开发记录30_时刻分组不是按时间切块_地点时间与垃圾隔离
  • RAG4CTS:工业时序预测的检索增强生成技术解析
  • MediaCrawler:构建企业级社交媒体数据采集系统的3大突破
  • 2026年靠谱灭鼠杀虫公司怎么选?官方甄选指南来了!白蚁防治与四害消杀品牌对比分析 - 优质品牌商家
  • 原行星盘垂直结构观测与行星形成机制研究
  • 杭州音乐剧校考核心备考技术维度与机构选择推荐 - 优质品牌商家
  • 2026年国产质量流量计品牌甄选:从技术研发到工程应用,这几家值得关注 - 优质品牌商家
  • 网络变压器回流焊工艺解析:非ESD敏感器件与炉温曲线设定
  • 2026年上海工程监理服务推荐榜:建筑工程监理/水利甲级监理/市政甲级监理公司,专业实力与资质深度解析 - 品牌发掘
  • 2026年6月主流大模型Coding能力深度对比:GPT 5.5,Claude Opus 4.8,DeepSeek V4, Qwen 3.7, GLM 5.1, Kimi 2.6
  • 【共创季稿事节】鸿蒙原生ArkTS布局方式之Flex+flexGrow弹性增长布局
  • 2026年近期国内高性价比手绘陶瓷杯工厂盘点与选择指南 - 品牌鉴赏官2026
  • 2026成都木跳板租赁品牌甄选:耐用性与服务能力深度测评 - 优质品牌商家
  • 汕尾漏水检测维修权威推荐:卫生间-厨房-阳台-屋顶天花板漏水维修:靠谱防水补漏公司团队TOP5推荐(2026最新深度调研实测榜单) - 即刻修防水
  • 2026年中,企业如何甄选可靠的文化墙设计公司与服务商? - 品牌鉴赏官2026
  • MobileNetV2深度解析:从倒残差结构到移动端高效部署实战
  • 兰州房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • 2026年伺服电机选型指南:五家值得关注的供应商深度评测 - 优质品牌商家
  • 南通房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • 灶台导航 (六):时间统筹算法——让多道菜同时上桌
  • MongoDB建库原理与实操:从use到insertOne的完整流程
  • 2026洁净室防爆吸尘器Top3:史沃斯凭实力登顶 - 工业清洁测评社
  • 2026年近期武汉地区优良的ECS电控系统源头厂家综合解析 - 品牌鉴赏官2026
  • 李梦娇常识2026|最新版|国考
  • 惠州 GEO 公司哪家好?2026技术 + 资质 + 效果真实优选答案 - Guangdong1
  • 2026黄岛区专业的帮信罪辩护律师口碑排行 - 品牌排行榜
  • 物理信息神经算子:从理论解构到工程实践的技术深度探索
  • Kinetis K系列PDB模块:实现纳秒级精度的硬件定时触发与同步采样
  • 2026青岛城阳区专业空调不制冷维修公司联系电话 - 品牌排行榜
  • 北京房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水