Python+LangChain+大模型实战:使用通用配置加载器的Few‑Shot小样本提示词教程

张开发
2026/4/20 6:23:19 15 分钟阅读

分享文章

Python+LangChain+大模型实战:使用通用配置加载器的Few‑Shot小样本提示词教程
LangChain系列文章超链接《​​​​​​​PythonLangChain大模型实战使用通用配置加载器的Few‑Shot小样本提示词教程》​​​​​​​《使用Python版LangChain调用外部函数实战实现智能天气查询》《Python LangChain Agent 实战从单城市查询到多城市天气智能对比》前言在大模型应用开发中两个问题最常见API 密钥、模型地址散写代码里改一次要翻遍所有文件极易泄露、难维护。让模型做分类 / 结构化输出结果长篇大论、格式乱飞下游程序无法解析。本文用一套可直接复制运行的工程化代码一次性解决单例模式配置加载器支持小米大模型可扩展任意大模型LangChain Few‑Shot 精准控制输出格式有无 Few‑Shot 效果直观对比完整配置文件 运行结果演示1 效果先看有无 Few‑Shot 差距有多大输入这个电影太好看了无 Few‑Shot不用few-shot输出太棒了能遇到一部让自己由衷觉得好看的电影真的是一件特别开心的事 我猜你现在一定还沉浸在电影的情绪里回味着那些精彩的画面和情节吧 **方便分享一下是哪部电影吗** 我也很好奇是什么作品能让你这么激动 如果你愿意的话我们可以一起聊聊 * **最让你心动的角色**是谁为什么 * **哪个情节**让你印象最深刻可以不用怕剧透如果你不介意的话 * 是它的**故事、画面、音乐**还是演员的表演打动了你 我已经准备好听你的安利啦使用 Few‑Shot使用few-shot的输出积极结论Few‑Shot 能强制模型只输出标签、不废话、格式统一工程化必备。2 项目结构pythonProject/ ├── config.properties # 配置文件密钥/地址/模型 ├── config_loader.py # 单例配置加载器 └── langchain_fewshot.py # Few-Shot 主程序3 第一步配置文件 config.properties把敏感信息全部外置绝不硬编码[xiaomi] api_key 你的小米大模型API Key api_base_url https://api.example.com/v1 model 你的模型名称 temperature 0.1 max_tokens 10244 第二步配置加载器 config_loader.py单例模式 统一读取 类型自动转换 异常提示所有大模型项目通用。#!/usr/bin/env python3 # -*- coding: utf-8 -*- import configparser import os from typing import Dict, Any class ConfigLoader: _instance None _config None def __new__(cls, config_path: str config.properties): if cls._instance is None: cls._instance super().__new__(cls) cls._instance._load_config(config_path) return cls._instance def _load_config(self, config_path: str): if not os.path.exists(config_path): raise FileNotFoundError( f配置文件不存在: {os.path.abspath(config_path)}\n 请在项目根目录创建 config.properties ) self._config configparser.ConfigParser() self._config.read(config_path, encodingutf-8) def get(self, section: str, key: str) - str: try: return self._config[section][key].strip() except KeyError as e: raise ValueError(f配置缺失: [{section}] {key}) from e def get_xiaomi_config(self) - Dict[str, Any]: section xiaomi config { api_key: self.get(section, api_key), api_base_url: self.get(section, api_base_url), model: self.get(section, model), } # 可选配置带默认值 try: config[temperature] float(self.get(section, temperature)) except: config[temperature] 0.7 try: config[max_tokens] int(self.get(section, max_tokens)) except: config[max_tokens] 1024 return config核心亮点全局只加载一次配置高效安全外置配置避免密钥泄露可轻松扩展 OpenAI、阿里、百度等模型5 第三步LangChain Few‑Shot 情感分类langchain_fewshot.py完整可运行代码#!/usr/bin/env python3 # -*- coding: utf-8 -*- import openai from config_loader import ConfigLoader from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate def few_shot_input(input_text): # 1. 小样本示例覆盖积极/消极/中性 examples [ {text: 今天心情特别好, label: 积极}, {text: 上班迟到还下雨好烦, label: 消极}, {text: 天气一般没什么感觉, label: 中性}, ] # 2. 例子格式 example_prompt PromptTemplate( input_variables[text, label], template文本{text}\n情感{label}\n ) # 3. 组装 FewShot 模板 few_shot_prompt FewShotPromptTemplate( examplesexamples, example_promptexample_prompt, prefix请判断以下文本的情感只能输出积极/消极/中性, suffix文本{input}\n情感, input_variables[input], example_separator\n ) return few_shot_prompt.format(inputinput_text) if __name__ __main__: # 加载配置 config ConfigLoader() xiaomi_cfg config.get_xiaomi_config() # 初始化模型 client ChatOpenAI( api_keyxiaomi_cfg[api_key], base_urlxiaomi_cfg[api_base_url], modelxiaomi_cfg[model] ) input_text 这个电影太好看了 # 无 Few-Shot print(不用few-shot输出 client.invoke(input_text).content) # 使用 Few-Shot prompt few_shot_input(input_text) print(- * 50) print(使用few-shot的输出 client.invoke(prompt).content)6 Few‑Shot 核心原理examples给模型看的样例决定输出风格example_prompt统一样例格式prefix任务指令必须严格约束输出suffix待预测输入占位FewShotPromptTemplate自动拼接所有内容形成最终提示用少量示例教会模型按格式输出不用微调、零训练成本。7 运行结果展示不用few-shot输出太棒了能遇到一部让自己由衷觉得好看的电影真的是一件特别开心的事 我猜你现在一定还沉浸在电影的情绪里回味着那些精彩的画面和情节吧 **方便分享一下是哪部电影吗** 我也很好奇是什么作品能让你这么激动 如果你愿意的话我们可以一起聊聊 * **最让你心动的角色**是谁为什么 * **哪个情节**让你印象最深刻可以不用怕剧透如果你不介意的话 * 是它的**故事、画面、音乐**还是演员的表演打动了你 我已经准备好听你的安利啦 ------------------------------- 使用few-shot的输出积极8 适用场景情感分析、意图识别、文本分类实体抽取、结构化输出JSON / 标签固定格式回复、表单提取任何需要稳定、可控、简洁输出的场景

更多文章