AI开发-python-langchain框架(1-2提示词)

先看代码

复制代码
import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv

load_dotenv()
#提示词
prompt = ChatPromptTemplate.from_template("请根据下面的主题写一篇小红书营销的短文: {topic}")
# 模型
llm = ChatOpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("DEEP_URL"),  # Deepseek 的 API 基础地址
    model="deepseek-v3:671b",  # Deepseek 对话模型(可选:deepseek-chat-pro 等高级模型)
    temperature=0.7,  # 温度参数(0-1,越低越稳定)
    max_tokens=1024  # 最大生成 tokens
)

output_parser = StrOutputParser()

chain = prompt | llm | output_parser
# 调用模型 invoke所有结果生成以后一次性返回
message = chain.invoke({"topic":"资源网站"})
result = output_parser.invoke(message)
print(result)

# 流式-调用模型 stream结果一点点返回能看到动态返回的效果
for chunk in chain.stream({"topic":"资源网站"}):
    print(chunk,end="",flush =True)

这段代码是基于 LangChain 框架对接 DeepSeek 大模型 ,实现「小红书营销短文生成」的完整案例,同时支持一次性同步返回结果流式逐段返回结果两种核心调用方式,先明确整体核心定位,再拆解关键重点:

一、整体流程概览(核心逻辑链)

代码遵循 LangChain 的「Prompt 模板 → 大模型调用 → 输出解析 」经典流水线模式,通过链式调用(| 操作符)简化流程,整体可概括为:

  1. 加载环境变量(API 密钥、接口地址),保障配置安全
  2. 定义固定格式的提示词模板,规范模型生成内容
  3. 初始化 DeepSeek 大模型客户端,配置核心参数
  4. 定义输出解析器,统一结果格式
  5. 构建完整工作链,实现两种不同方式的模型调用与结果返回

二、核心重点拆解(必掌握)

1. 环境配置与安全优化(load_dotenv()

  • 核心作用:从项目根目录的 .env 文件中读取环境变量,避免将 API_KEY 等敏感信息直接硬编码在代码中,提升项目安全性和可维护性。

2. LangChain 核心组件使用(三大核心部件)

这是代码的核心骨架,三个组件协同工作完成任务,也是 LangChain 框架的基础用法:

(1)提示词模板(ChatPromptTemplate

  • 核心作用:定义固定的对话模板,通过 {topic} 占位符实现「动态参数注入」,避免手动拼接字符串,让提示词更规范、可复用。
  • 关键方法:from_template() 快速创建简单提示词模板,传入的字符串中包含一个或多个占位符,后续调用时通过字典传入对应值即可。
  • 效果:当传入 {"topic":"资源网站"} 时,模型实际接收的提示词是「请根据下面的主题写一篇小红书营销的短文:资源网站」。

(2)大模型客户端(ChatOpenAI

  • 核心亮点:虽然类名是 ChatOpenAI,但可通过 base_url 配置对接非 OpenAI 的兼容 OpenAI API 格式的大模型(此处对接 DeepSeek),这是 LangChain 对接各类大模型的常用技巧。
  • 核心配置参数解读(必理解):
  • api_key:大模型平台的身份验证密钥,从环境变量读取。
  • base_url:大模型的 API 请求基础地址,覆盖 OpenAI 默认地址,实现对接第三方模型。
  • model:指定调用的具体模型(此处为 deepseek-v3:671b,可替换为 DeepSeek 其他模型)。
  • temperature:生成内容的随机性(0-1 区间),0 表示结果固定、可复现,1 表示随机性最强,此处 0.7 兼顾创意和稳定性。
  • max_tokens:模型生成内容的最大长度限制,避免生成过长内容,1024 足以满足短文生成需求。

(3)输出解析器(StrOutputParser

  • 核心作用:将大模型返回的「结构化响应对象」(包含内容、元数据等信息)解析为「纯字符串格式」,简化后续结果处理和使用。
  • 简化效果:如果不使用解析器,模型返回的是包含 contentrole 等字段的复杂对象,需要通过 message.content 才能获取核心内容,而解析器直接返回纯文本,更易使用。

3. LangChain 链式调用(prompt | llm | output_parser

  • 核心语法:使用 | 操作符将多个 LangChain 组件串联成一条「工作链(Chain)」,这是 LangChain 的特色语法,模拟数据流水线传递。
  • 数据流转逻辑:
  1. 传入的参数({"topic":"资源网站"})先传入 prompt,完成模板渲染,生成完整提示词。
  2. 渲染后的完整提示词传递给 llm(大模型),模型完成内容生成,返回结构化响应。
  3. 结构化响应传递给 output_parser,解析为纯字符串结果。
  • 优势:无需手动编写数据传递逻辑,代码更简洁、可读性更强,后续可灵活增删组件(如添加内容校验、格式优化等)。

4. 大模型两种核心调用方式(同步一次性返回 vs 流式逐段返回)

这是代码的核心功能体现,对应不同的使用场景,必须掌握两者的区别和适用场景:

(1)同步调用(chain.invoke()

  • 核心方法:chain.invoke({"topic":"资源网站"})
  • 工作机制:发送请求后,等待模型完整生成所有内容,一次性返回最终结果,期间程序处于阻塞状态,无中间输出。
  • 额外说明:代码中 result = output_parser.invoke(message) 是冗余操作(链式调用中已包含输出解析),直接 message = chain.invoke(...) 即可获取解析后的纯字符串。
  • 适用场景:需要完整获取结果后进行后续处理(如保存到文件、批量分析),对实时性要求不高的场景。

(2)流式调用(chain.stream()

  • 核心方法:for chunk in chain.stream({"topic":"资源网站"})
  • 工作机制:发送请求后,模型生成内容的过程中,会将结果按片段(chunk)逐段返回,无需等待完整结果,可实时看到输出效果。
  • 关键细节:print(chunk, end="", flush=True) 中,end="" 避免每个片段后换行,flush=True 强制刷新缓冲区,确保片段能实时打印到控制台,实现「打字机」效果。
  • 适用场景:对实时性要求高的场景(如网页端实时展示、聊天机器人实时回复),提升用户体验,避免长时间等待无反馈。
  • 核心优势:减少用户等待感,支持大篇幅内容的实时展示,且可在流式返回过程中进行中断、筛选等操作。

5. 依赖库说明(运行前必安装)

代码运行需要安装以下核心依赖库,可通过一条命令安装:
*

复制代码
pip install langchain langchain-core langchain-openai python-dotenv

三、总结(核心重点回顾)

  1. 核心框架:LangChain 实现「模板 - 模型 - 解析」的流水线工作链,简化大模型调用流程。
  2. 关键技巧:ChatOpenAI 类通过 base_url 对接 DeepSeek 等兼容 OpenAI API 的模型。
  3. 两种调用:同步调用(一次性返回,适合后续批量处理)vs 流式调用(逐段返回,适合实时展示)。
  4. 安全规范:使用 load_dotenv() 管理敏感配置,避免硬编码 API 密钥。
  5. 核心组件:ChatPromptTemplate(提示词模板)、ChatOpenAI(模型客户端)、StrOutputParser(输出解析)、链式调用(| 操作符)是 LangChain 入门必掌握的核心内容。