资讯动态

Few-Shot 学习工程化实战指南:面向生产级 LLM 应用的示例选择、构建与评估体系

发布时间:2026/9/10 6:22:36 来源:尧图企业网站定制
Few-Shot 学习工程化实战指南面向生产级 LLM 应用的示例选择、构建与评估体系【免费下载链接】agentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity项目地址: https://gitcode.com/GitHub_Trending/agents24/agents导读Few-shot learning少样本学习是生产级 LLM 应用中最实用的提示工程技术之一通过在提示中注入少量通常 110 个高质量示例即可让模型在特定格式、风格或领域任务上稳定输出。本文以 agents 仓库中llm-application-dev插件的prompt-engineering-patterns技能文档 references/few-shot-learning.md 为骨架完整覆盖四种示例选择策略、示例构建最佳实践、上下文窗口预算管理、边界情况处理、三类提示模板、评估优化方法以及元学习等进阶技术并结合仓库内的真实示例数据assets/few-shot-examples.json、LangChain 动态选择实现references/details.md与自动化优化脚本scripts/optimize-prompt.py做源码级深化。读完本文你将能自主设计并落地一套动态检索示例 预算感知裁剪 量化评估迭代的完整 few-shot 提示系统。一、Few-Shot 学习的原理与适用场景Few-shot learning 的核心思路是不给模型描述该怎么做而是直接给它看做对了的例子。模型通过模仿提示中示例的输入输出映射关系推断出任务模式并套用到新的查询上。该技术特别适合以下任务类型格式敏感的生成任务如 JSON 结构化抽取、SQL 生成、代码生成示例能直接锁定输出格式风格或口径约束任务如客服回复、摘要风格、翻译语气示例传递隐含的文体规范需要领域知识的任务如特定业务实体抽取、专业术语分类示例补充模型权重之外的领域先验。从仓库技能定义看few-shot 被列为prompt-engineering-patterns技能的六大核心能力之首见 SKILL.md其能力描述包括示例选择策略语义相似度、多样性采样、在上下文窗口约束下平衡示例数量、构建有效的输入输出对演示、从知识库动态检索示例、通过策略性示例选择处理边界情况——这与本指南的章节结构一一对应说明示例选择与上下文管理是 few-shot 工程化的两大核心杠杆。二、四种示例选择策略示例并非越多越好选什么示例比有多少示例更重要。下面是文档给出的四种经典选择策略及其适用场景。2.1 语义相似度选择Semantic Similarity将示例库中的输入全部编码为向量检索与当前查询语义最接近的 k 个示例。实现上使用sentence_transformers将文本映射到向量空间再通过向量点积计算相似度from sentence_transformers import SentenceTransformer import numpy as np class SemanticExampleSelector: def __init__(self, examples, model_nameall-MiniLM-L6-v2): self.model SentenceTransformer(model_name) self.examples examples self.example_embeddings self.model.encode([ex[input] for ex in examples]) def select(self, query, k3): query_embedding self.model.encode([query]) similarities np.dot(self.example_embeddings, query_embedding.T).flatten() top_indices np.argsort(similarities)[-k:][::-1] return [self.examples[i] for i in top_indices]最佳适用问答、文本分类、信息抽取任务。仓库实证该策略在生产中的落地方式正是embedding 向量库 相似度检索。仓库 references/details.md 的 Pattern 3 给出了基于 LangChain 生态的官方推荐实现——用SemanticSimilarityExampleSelector配合VoyageAIEmbeddings与Chroma向量库from langchain_voyageai import VoyageAIEmbeddings from langchain_core.example_selectors import SemanticSimilarityExampleSelector from langchain_chroma import Chroma example_selector SemanticSimilarityExampleSelector.from_examples( examples[ {input: How do I reset my password?, output: Go to Settings Security Reset Password}, {input: Where can I see my order history?, output: Navigate to Account Orders}, {input: How do I contact support?, output: Click Help Contact Us or email supportexample.com}, ], embeddingsVoyageAIEmbeddings(modelvoyage-3-large), vectorstore_clsChroma, k2 # Select 2 most similar examples )底层原理是from_examples先把所有示例输入编码入库查询时对 query 编码后做向量最近邻检索k控制返回数量。这说明自研向量选择器与LangChain 官方选择器本质相同生产环境直接使用成熟向量库Chroma、Pinecone 等可获得持久化与规模化能力。2.2 多样性采样Diversity Sampling只选最相似的示例容易陷入同质化——所有示例都是同一种句式和难度模型无法学会处理变体。多样性采样通过 KMeans 聚类让示例覆盖不同模式与边界情况from sklearn.cluster import KMeans class DiversityExampleSelector: def __init__(self, examples, model_nameall-MiniLM-L6-v2): self.model SentenceTransformer(model_name) self.examples examples self.embeddings self.model.encode([ex[input] for ex in examples]) def select(self, k5): # Use k-means to find diverse cluster centers kmeans KMeans(n_clustersk, random_state42) kmeans.fit(self.embeddings) # Select example closest to each cluster center diverse_examples [] for center in kmeans.cluster_centers_: distances np.linalg.norm(self.embeddings - center, axis1) closest_idx np.argmin(distances) diverse_examples.append(self.examples[closest_idx]) return diverse_examples最佳适用需要展示任务变体、覆盖边界处理能力的场景。2.3 基于难度的渐进选择Difficulty-Based Selection为每个示例标注difficulty分数01按难度递增排列后等步长采样形成从简单到复杂的渐进式脚手架scaffolding帮助模型逐步建立推理链路class ProgressiveExampleSelector: def __init__(self, examples): # Examples should have difficulty scores (0-1) self.examples sorted(examples, keylambda x: x[difficulty]) def select(self, k3): # Select examples with linearly increasing difficulty step len(self.examples) // k return [self.examples[i * step] for i in range(k)]注意这里的step len(examples) // k会得到均匀分布的难度梯度而非严格从最低到最高——如果你的示例库本身按难度排序且数量为 k 的整数倍则恰好覆盖全难度区间。最佳适用复杂推理任务、代码生成。2.4 基于错误的示例选择Error-Based Selection面向已知失败模式failure modes主动挑选演示如何正确处理常见错误的示例属于防御性提示设计class ErrorGuidedSelector: def __init__(self, examples, error_patterns): self.examples examples self.error_patterns error_patterns # Common mistakes to avoid def select(self, query, k3): # Select examples demonstrating correct handling of error patterns selected [] for pattern in self.error_patterns[:k]: matching [ex for ex in self.examples if pattern in ex[demonstrates]] if matching: selected.append(matching[0]) return selected示例数据结构中通过demonstrates字段标记该示例示范规避了哪种错误模式。最佳适用已知失败模式明确的任务、安全关键型应用。2.5 选择策略对比策略核心机制典型依赖最佳适用语义相似度embedding 检索最近邻SentenceTransformer / 向量库问答、分类、抽取多样性采样KMeans 聚类取簇心最近样本sklearn embedding任务变体、边界覆盖难度渐进按 difficulty 排序等步长采样人工/模型标注难度复杂推理、代码生成错误引导按 error_patterns 匹配示例失败案例分析安全关键、已知失败模式三、示例构建最佳实践选择策略解决选哪些本节解决示例本身怎么写。文档给出三条硬性原则。3.1 格式一致性Format Consistency同一示例集内必须使用完全相同的字段结构与排版。模型会把示例格式当作输出模板混用格式会直接污染输出结构# Good: Consistent format examples [ { input: What is the capital of France?, output: Paris }, { input: What is the capital of Germany?, output: Berlin } ] # Bad: Inconsistent format examples [ Q: What is the capital of France? A: Paris, {question: What is the capital of Germany?, answer: Berlin} ]3.2 输入输出对齐Input-Output Alignment示例必须精确演示你希望模型执行的任务输出的粒度、详略、角度要与目标任务一致。输出过详细或角度偏移模型会复制错误的输出风格# Good: Clear input-output relationship example { input: Sentiment: The movie was terrible and boring., output: Negative } # Bad: Ambiguous relationship example { input: The movie was terrible and boring., output: This review expresses negative sentiment toward the film. }3.3 复杂度平衡Complexity Balance示例应横跨期望的难度区间——简单样例建立基线映射中等样例覆盖常规输入复杂样例展示推理深度。以四则运算为例三个示例恰好构成简单 → 中等 → 复杂的梯度examples [ # Simple case {input: 2 2, output: 4}, # Moderate case {input: 15 * 3 8, output: 53}, # Complex case {input: (12 8) * 3 - 15 / 5, output: 57} ]3.4 仓库现成示例资产仓库的 assets/few-shot-examples.json 提供了 8 类开箱即用的示例数据集涵盖sentiment_analysis情感分类三分类、entity_extraction实体抽取含 persons/organizations/products/locations/dates/monetary_values 结构化字段、code_generation、text_classification客服意图四分类、data_transformation文本转结构化 JSON、question_answering含 context/question/answer 三段式、summarization、sql_generation含 schema/request/output。以文本分类为例其示例严格遵循输入短问句 → 输出标签的紧凑格式{ input: My order hasnt arrived yet. Where is it?, output: shipping_inquiry }而entity_extraction示例则演示了空字段也要显式给出的对齐原则无实体时输出[]这本身就是输入输出对齐最佳实践的活样本可直接作为分类、抽取、转换三类任务的示例库起点。四、上下文窗口管理Few-shot 的代价是占用宝贵的上下文窗口。文档给出了预算分配模板与动态裁剪算法。4.1 Token 预算分配以 4K 上下文窗口为例的典型分配百分比为相对 4K 的占比System Prompt: 500 tokens (12%) Few-Shot Examples: 1500 tokens (38%) User Input: 500 tokens (12%) Response: 1500 tokens (38%)要点解读示例预算占近四成是性能与空间的核心权衡区——示例越多质量越高但会挤压用户输入与模型输出空间必须为 Response 预留足够空间否则模型可能在长输出任务中被截断窗口更大的模型8K/32K/200K可按同比例放大示例预算但收益会边际递减见下文常见错误。4.2 动态示例裁剪Token-Aware Truncation在生产系统中示例选择器应与 tokenizer 联动按预算上限贪心装入示例超预算即停止class TokenAwareSelector: def __init__(self, examples, tokenizer, max_tokens1500): self.examples examples self.tokenizer tokenizer self.max_tokens max_tokens def select(self, query, k5): selected [] total_tokens 0 # Start with most relevant examples candidates self.rank_by_relevance(query) for example in candidates[:k]: example_tokens len(self.tokenizer.encode( fInput: {example[input]}\nOutput: {example[output]}\n\n )) if total_tokens example_tokens self.max_tokens: selected.append(example) total_tokens example_tokens else: break return selected关键设计按相关性降序依次装入、遇到超限即 break保证预算内装入最相关的示例。实际落地时注意两点——max_tokens应设为上下文上限减去系统提示、用户输入与预留响应空间后的剩余值rank_by_relevance可以复用 2.1 节的语义相似度排序。五、边界情况处理Few-shot 系统在真实流量中必然会遇到边界输入。文档建议在示例库中显式放入边界示例让模型学会遇到什么情况该给什么响应edge_case_examples [ # Empty input {input: , output: Please provide input text.}, # Very long input (truncated in example) {input: ... word * 1000, output: Input exceeds maximum length.}, # Ambiguous input {input: bank, output: Ambiguous: Could refer to financial institution or river bank.}, # Invalid input {input: !#$%, output: Invalid input format. Please provide valid text.} ]四类典型边界空输入、超长输入、歧义输入、非法输入。这种示例即策略的做法比指令更有效——模型通过模仿学会了拒绝/澄清/兜底的行为模式而不是靠一段可能被忽略的文字指令。从仓库的 SKILL.md 能力清单看Handling edge cases through strategic example selection通过策略性示例选择处理边界情况正是 few-shot 能力的明确组成部分。六、Few-Shot 提示模板有了示例与边界策略还需要把它们组装进最终的提示。文档给出三类可直接复用的模板构建函数。6.1 分类模板def build_classification_prompt(examples, query, labels): prompt fClassify the text into one of these categories: {, .join(labels)}\n\n for ex in examples: prompt fText: {ex[input]}\nCategory: {ex[output]}\n\n prompt fText: {query}\nCategory: return prompt结构解析任务指令声明标签集合→ 逐条示例Text:/Category:对→ 查询只给Text:不给答案让模型续写Category:。尾部留白是关键——模型天然倾向续写未完成句这能稳定触发输出。6.2 抽取模板def build_extraction_prompt(examples, query): prompt Extract structured information from the text.\n\n for ex in examples: prompt fText: {ex[input]}\nExtracted: {json.dumps(ex[output])}\n\n prompt fText: {query}\nExtracted: return prompt抽取模板用json.dumps序列化结构化输出向模型示范JSON 格式的实体抽取长什么样。这与仓库few-shot-examples.json中entity_extraction、data_transformation的 JSON 输出结构一脉相承也与 references/details.md 中 Pydantic 结构化输出Pattern 1形成互补few-shot 负责让模型会输出 JSONPydantic 负责在代码侧强制校验输出 JSON两者配合是生产级抽取任务的推荐组合。6.3 转换模板def build_transformation_prompt(examples, query): prompt Transform the input according to the pattern shown in examples.\n\n for ex in examples: prompt fInput: {ex[input]}\nOutput: {ex[output]}\n\n prompt fInput: {query}\nOutput: return prompt转换模板适用于改写、翻译、格式化等任务强调按照示例所示的模式转换而非给出繁琐规则。与分类模板相比它不声明任务标签完全依赖示例隐含的映射模式。6.4 模板工程化提示模板中的示例前缀Text:/Category:/Input:/Output:应全库统一配合 3.1 节的格式一致性原则模板变量labels、examples、query应由上层代码注入保持模板本身可复用更丰富的可填充模板库可参考 assets/prompt-template-library.md含分类、抽取、生成、转换、分析、问答、SQL/正则/API 文档等专项模板。七、评估与优化Few-shot 系统上线前必须量化验证。文档给出质量指标与 A/B 测试两套工具。7.1 示例质量指标def evaluate_example_quality(example, validation_set): metrics { clarity: rate_clarity(example), # 0-1 score representativeness: calculate_similarity_to_validation(example, validation_set), difficulty: estimate_difficulty(example), uniqueness: calculate_uniqueness(example, other_examples) } return metrics四个维度清晰度示例本身无歧义、代表性与验证集分布相似度、难度量化标注服务于 2.3 节渐进选择、唯一性避免示例间重复信息。7.2 A/B 测试示例集class ExampleSetTester: def __init__(self, llm_client): self.client llm_client def compare_example_sets(self, set_a, set_b, test_queries): results_a self.evaluate_set(set_a, test_queries) results_b self.evaluate_set(set_b, test_queries) return { set_a_accuracy: results_a[accuracy], set_b_accuracy: results_b[accuracy], winner: A if results_a[accuracy] results_b[accuracy] else B, improvement: abs(results_a[accuracy] - results_b[accuracy]) } def evaluate_set(self, examples, test_queries): correct 0 for query in test_queries: prompt build_prompt(examples, query[input]) response self.client.complete(prompt) if response query[expected_output]: correct 1 return {accuracy: correct / len(test_queries)}注意evaluate_set中的build_prompt应在真实实现中替换为上文 6.16.3 节对应的任务模板保证测的就是上线用的。7.3 仓库级评估与优化工具仓库 scripts/optimize-prompt.py 提供了可直接运行的PromptOptimizer其能力远超文档示例可作为评估体系的工程化补充多指标并行评估evaluate_prompt通过ThreadPoolExecutor并行跑测试用例输出avg_accuracy、avg_latency、p95_latency、avg_tokens、success_rate五类指标智能相似度计算calculate_accuracy先做精确匹配失败则退化为词重叠率word overlap部分匹配避免全对才得分的过严判定自动变体生成generate_variations自动生成五类变体加格式指令、加 step-by-step、加校验步骤、精简措辞、追加示例其中add_examples方法正是自动注入 few-shot 示例的入口——当提示中没有 example 字样时会自动追加Input:/Output:示例块停止条件与结果导出准确率超过 0.95 即提前收敛、无改进变体即停止避免无效迭代export_results将优化历史导出为 JSON 便于追溯。该脚本的main()内置了情感分类的 Mock 测试套件Positive/Negative/Neutral 三用例可直接python scripts/optimize-prompt.py运行观察优化迭代过程——这为 few-shot 系统的量化调优提供了开箱即用的参照实现。八、进阶技术8.1 元学习学习如何选择Learning to Select用一个小模型预测某个示例对某个查询是否有效把示例选择本身变成一个监督学习问题from sklearn.ensemble import RandomForestClassifier class LearnedExampleSelector: def __init__(self): self.selector_model RandomForestClassifier() def train(self, training_data): # training_data: list of (query, example, success) tuples features [] labels [] for query, example, success in training_data: features.append(self.extract_features(query, example)) labels.append(1 if success else 0) self.selector_model.fit(features, labels) def extract_features(self, query, example): return [ semantic_similarity(query, example[input]), len(example[input]), len(example[output]), keyword_overlap(query, example[input]) ] def select(self, query, candidates, k3): scores [] for example in candidates: features self.extract_features(query, example) score self.selector_model.predict_proba([features])[0][1] scores.append((score, example)) return [ex for _, ex in sorted(scores, reverseTrue)[:k]]特征设计包含四维语义相似度、输入长度、输出长度、关键词重叠率。训练数据来自历史调用日志——记录 (query, example, 是否成功) 三元组。工程提醒训练数据需要标注成功可从 A/B 测试7.2 节或生产日志中沉淀形成评估 → 数据积累 → 选择器升级的闭环。8.2 自适应示例数量Adaptive Example Count示例数量不应固定。对简单查询给 1 个示例就够复杂任务才需要更多示例class AdaptiveExampleSelector: def __init__(self, examples): self.examples examples def select(self, query, max_examples5): # Start with 1 example for k in range(1, max_examples 1): selected self.get_top_k(query, k) # Quick confidence check (could use a lightweight model) if self.estimated_confidence(query, selected) 0.9: return selected return selected # Return max_examples if never confident enough核心机制从 k1 开始递增一旦置信度估计超过 0.9 立即返回。estimated_confidence可用轻量模型或规则实现如分类任务的标签概率。收益简单查询省 token省钱、降延迟复杂查询不欠配示例保质量。九、常见错误清单文档总结的 five 大高频误区几乎覆盖了所有 few-shot 翻车现场示例过多Too Many Examples更多不一定更好过多示例会稀释模型对任务的聚焦也挤占输入输出空间示例无关Irrelevant Examples示例必须与目标任务高度匹配领域错配的示例会产生负迁移格式不一致Inconsistent Formatting混淆模型对输出格式的判断对应 3.1 节对示例过拟合Overfitting to Examples模型过于字面地复制示例模式遇到示例变体会僵硬——可通过多样性采样2.2 节缓解忽视 Token 限制Ignoring Token Limits示例耗尽预算导致真实输入/输出空间不足对应 4.2 节动态裁剪。与之呼应SKILL.md 的 Common Pitfalls 还补充了两条工程级风险example pollution使用了与目标任务不匹配的示例与context overflow示例过多导致上下文溢出并给出了通用最佳实践——Show, Dont Tell示例比描述更有效Be Specific / Show Dont Tell这正是 few-shot 方法论的理论注脚。十、落地路线图与资源索引综合全文一个生产级 few-shot 系统的落地路线为建库以 assets/few-shot-examples.json 为起点按 3.13.3 节原则构建/扩充示例库格式统一、对齐、难度梯度并纳入 5 类边界示例选择按任务类型选策略——QA/分类用语义相似度2.1变体覆盖用多样性采样2.2推理/代码用难度渐进2.3安全关键用错误引导2.4生产环境可直接采用 references/details.md Pattern 3 的SemanticSimilarityExampleSelector 向量库方案装配用 6.16.3 节模板函数组装提示配合 4.2 节 TokenAwareSelector 做预算裁剪评估用 7.17.2 节指标与 A/B 框架量化示例集质量升级可用 scripts/optimize-prompt.py 做自动化迭代进阶数据积累后切换到 8.1 元学习选择器并引入 8.2 自适应示例数量。本技能所在插件llm-application-dev参见 插件 README还提供ai-engineer、prompt-engineer、vector-database-engineer三类 Agent以及prompt-optimize命令与 references/chain-of-thought.md、references/system-prompts.md、references/prompt-templates.md 等姊妹文档。few-shot 与 chain-of-thought思维链结合时可参考 references/details.md 中带推理痕迹的 few-shot CoT模式——示例中同时给出推理步骤与答案让模型学会先推理后作答这是复杂推理任务在 few-shot 基础之上的自然延伸。【免费下载链接】agentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity项目地址: https://gitcode.com/GitHub_Trending/agents24/agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价