大模型|大模型中的Langchain实战上篇

发布时间:2026/6/1 0:04:17

大模型|大模型中的Langchain实战上篇 欢迎来到人工智能的世界博客主页卿云阁欢迎关注点赞收藏⭐️留言首发时间2026年5月30日✉️希望可以和大家一起完成进阶之路作者水平很有限如果发现错误请留言轰炸哦万分感谢目录认识 LangChain 和模型调用LangChain基础认识模型调用提示词模板 PromptTemplate聊天模板和 Few-shot 示例聊天提示模板Few-shot 少量样本示例的提示模板输出解析器 OutputParserStrOutputParser()JsonOutputParser()Chain 和 LCEL 表达式未使用链使用 Chain使用表达式语言(LCEL)​编辑Chain 的几种调用方式认识 LangChain 和模型调用LangChain基础认识LangChain 是一个大模型应用开发框架它把 “读取文件、检索知识、管理对话、调用工具” 这些重复工作全部封装好让你不用写大量底层代码就能快速做出像 “私有知识库问答”“智能对话机器人” 这样的实用大模型应用。模型调用from dotenv import load_dotenv load_dotenv() import os from langchain_openai import ChatOpenAI llm ChatOpenAI( api_key 你的api, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) response llm.invoke(什么是大模型要简洁的回答) #print(response) print(response.content)多轮对话from langchain_core.messages import AIMessage, HumanMessage, SystemMessage messages [ SystemMessage(content你是于老师的个人助理。你叫小沐), HumanMessage(content我叫同学小张), HumanMessage(content你是谁) ] response llm.invoke(messages) print(response.content)提示词模板 PromptTemplate第一部分我们学习会了直接向模型提问和用角色消息提问。下一步要学的是不要每次手写完整提示词而是把提示词做成模板。比如你以前可能这样写response llm.invoke(请用简单的话解释 LangChain 是什么)但如果问题经常变就可以写成模板from langchain_core.prompts import ChatPromptTemplate prompt ChatPromptTemplate.from_messages([ (system, 你是一位擅长通俗解释技术概念的老师), (user, 请用简单的话解释{topic}) ])然后调用时只传变量messages prompt.format_messages(topicLangChain) response llm.invoke(messages) print(response.content)以后你想解释别的内容只改变量messages prompt.format_messages(topicRAG)完整的代码from dotenv import load_dotenv load_dotenv() import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate llm ChatOpenAI( api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) prompt ChatPromptTemplate.from_messages([ (system, 你是一位擅长通俗解释技术概念的老师), (user, 请用三句话解释{topic}) ]) messages prompt.format_messages(topicLangChain) response llm.invoke(messages) print(response.content)聊天模板和 Few-shot 示例聊天提示模板核心就一句from dotenv import load_dotenv import os from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI # 加载 .env 文件中的环境变量 load_dotenv() # system 消息设定模型身份 template 你是一个数学家你可以计算任何算式 # human 消息用户真正输入的问题 human_template {text} # 创建聊天提示模板 chat_prompt ChatPromptTemplate.from_messages([ (system, template), (human, human_template), ]) # 创建模型实例 model ChatOpenAI( api_key 你的api, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 把变量 text 填充进 human_template messages chat_prompt.format_messages( text我今年18岁我的舅舅今年38岁我的爷爷今年72岁我和舅舅一共多少岁了 ) # 查看最终生成的消息结构 print(messages) # 调用模型 output model.invoke(messages) # 打印模型回答 print(output.content)Few-shot 少量样本示例的提示模板from dotenv import load_dotenv import os from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate from langchain_openai import ChatOpenAI load_dotenv() # 1. 准备少量示例 examples [ { input: 22, output: 4, description: 加法运算 }, ] # 2. 定义每个示例的格式 example_prompt PromptTemplate.from_template( 算式{input}\n结果{output}\n类型{description}\n ) # 3. 创建 Few-shot 提示模板 prompt FewShotPromptTemplate( examplesexamples, example_promptexample_prompt, prefix你是一个数学题分类器。请根据示例判断算式的计算结果和运算类型。, suffix算式{input}\n结果, input_variables[input] ) # 4. 创建模型 model ChatOpenAI( api_key你的api, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 5. 格式化提示词 final_prompt prompt.format(input10-3) print(最终提示词) print(final_prompt) # 6. 调用模型 result model.invoke(final_prompt) print(result.content)输出解析器 OutputParser目标让模型输出变成程序更容易处理的格式。StrOutputParser()from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 1. 加载 .env 文件里的 API Key load_dotenv() # 2. 创建模型 model ChatOpenAI( api_key你的api, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 3. 创建聊天提示模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一位非常会讲课的 Python 老师。), (user, 请用通俗的话解释{question}) ]) # 4. 创建输出解析器 # 作用把模型返回的 AIMessage 转成普通字符串 output_parser StrOutputParser() # 5. 组成一条链 chain prompt | model | output_parser # 6. 调用链 result chain.invoke({ question: 什么是 LangChain 的输出解析器 }) # 7. 打印结果 print(result)JsonOutputParser()from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import JsonOutputParser # 1. 加载 .env 文件 load_dotenv() # 2. 创建模型 model ChatOpenAI( api_key你的api, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 3. 创建提示词模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一个严谨的问答助手。你必须只输出 JSON不要输出其它文字。), (user, 请回答这个问题{question} 输出格式必须是 {{ question: 用户的问题, answer: 你的回答 }} ) ]) # 4. 创建 JSON 输出解析器 output_parser JsonOutputParser() # 5. 组成链 chain prompt | model | output_parser # 6. 调用链 result chain.invoke({ question: LangChain 是什么 }) # 7. 打印结果 print(result) print(type(result)) print(result[question]) print(result[answer])PromptTemplate 是为了复用提示词 ChatPromptTemplate 是为了区分角色 Few-shot 是为了教模型模仿例子 OutputParser 是为了让程序能处理模型结果 LCEL Chain 是为了把它们串起来Chain 和 LCEL 表达式未使用链from dotenv import load_dotenv import os from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI load_dotenv() # 1. 准备一个提示词模板 template 桌上有{number}个苹果四个桃子和 3 本书一共有几个水果? # 2. 把普通字符串变成 LangChain 的 PromptTemplate prompt_template PromptTemplate.from_template(template) # 3. 给模板里的变量 number 填值 prompt prompt_template.format(number2) print(生成后的提示词) print(prompt) # 4. 创建模型 model ChatOpenAI( api_key你的api, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 5. 手动把 prompt 传给模型 result model.invoke(prompt) # 6. 打印模型回答 print(模型回答) print(result.content)使用 Chainfrom dotenv import load_dotenv import os from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI load_dotenv() # 1. 创建提示词模板 prompt PromptTemplate.from_template( 桌上有{apple_count}个苹果{peach_count}个桃子一共有几个水果 ) # 2. 创建模型 model ChatOpenAI( api_key你的api, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 3. 把提示词模板和模型组成一条链 chain prompt | model # 4. 调用链 result chain.invoke({ apple_count: 2, peach_count: 4 }) # 5. 打印结果 print(result.content)使用表达式语言(LCEL)from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParser load_dotenv() # 1. 创建提示词模板 prompt PromptTemplate.from_template( 请围绕主题《{topic}》生成 5 个中文标题。 ) # 2. 创建模型 model ChatOpenAI( api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 3. 创建输出解析器 output_parser StrOutputParser() # 4. 使用 LCEL 组成链 chain prompt | model | output_parser # 5. 调用链 result chain.invoke({ topic: 人工智能如何改变学习方式 }) # 6. 打印结果 print(result)Chain 的几种调用方式invoke() 一次问一个问题返回一个结果。 batch() 一次问多个问题返回多个结果。 stream() 模型边生成边返回适合做聊天页面的打字效果。from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParser load_dotenv() # 1. 创建提示词模板 prompt PromptTemplate.from_template( 请用一句话解释{topic} ) # 2. 创建模型 model ChatOpenAI( api_key, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, modelqwen3-vl-flash ) # 3. 创建输出解析器 output_parser StrOutputParser() # 4. 创建 Chain chain prompt | model | output_parser # # 第一种invoke() 调用一次 # result chain.invoke({ topic: LangChain }) print(invoke 调用结果) print(result) # # 第二种batch() 批量调用 # results chain.batch([ {topic: PromptTemplate}, {topic: OutputParser}, {topic: LCEL} ]) print(\nbatch 批量调用结果) for item in results: print(item) # # 第三种stream() 流式输出 # print(\nstream 流式输出结果) for chunk in chain.stream({ topic: RAG }): print(chunk, end)

相关新闻