惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
The Hacker News
The Hacker News
L
LINUX DO - 热门话题
T
Tenable Blog
Hugging Face - Blog
Hugging Face - Blog
Google Online Security Blog
Google Online Security Blog
博客园 - Franky
P
Proofpoint News Feed
H
Hacker News: Front Page
P
Privacy & Cybersecurity Law Blog
月光博客
月光博客
P
Proofpoint News Feed
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
博客园_首页
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
Forbes - Security
Forbes - Security
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Hacker News - Newest:
Hacker News - Newest: "LLM"
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
O
OpenAI News
G
Google Developers Blog
Martin Fowler
Martin Fowler
罗磊的独立博客
S
SegmentFault 最新的问题
T
Tor Project blog
量子位

博客园 - 「圣杰」

.NET+AI | Harness | MAF 1.4 发布,Harness Engineering 如约而至,智能体工程化更进一步 Microsoft Agent Framework 1.0 正式发布:Agent Skills 补齐后,.NET AI Agent 开发真正进入工程化时代 .NET+AI | Workflow | 核心概念速通(1) .NET+AI | 基于 Microsoft Agent Framework 一步步集成 Agent Skills,让你的 AI Agent 更智能 未来已来 | 写给 .NET 开发者的 2025 年度总结 从 MCP 到 Agent Skills,AI Ready 的 .NET 10 正当时 .NET+AI | Agent | 人机协作(9) .NET+AI | MEAI | 自定义中间件(8) .NET+AI | MEAI | 上下文压缩(7) .NET+AI | MEAI | 会话缓存(6) .NET+AI | MEAI | ChatOptions 详解(5) AI 时代,.NET 开发者是向左还是向右? .NET+AI | MEAI | Function Caling 实操(4) .NET+AI | MEAI | Function Calling 基础(3) .NET+AI | MEAI | .NET 平台的 AI 底座 (1) .NET 搞 AI 不行? ​微软 AI Agent三剑客:AutoGen、Semantic Kernel与MEAI的协同演进 .NET+AI | eShopSupport 知多少 .NET + AI | Semantic Kernel vs Microsoft.Extensions.AI 极客时间上新 .NET + AI 体系课
.NET+AI | MEAI | 提示工程基础(2)
「圣杰」 · 2025-11-14 · via 博客园 - 「圣杰」

MEAI 提示工程实战:从零构建企业级意图识别系统

一句话简介

本文以铁路票务意图识别为例,演示如何使用 Microsoft.Extensions.AI (MEAI) 构建高质量提示词,掌握 7 大核心技巧和参数调优方法,快速构建企业级 AI 应用。


🎯 核心价值

  • 结构化提示:掌握指令、上下文、输入、输出四大组件
  • 7 大核心技巧:从基础到进阶,系统提升提示词质量
  • MEAI 集成:使用 ChatOptions 和 ChatMessage 构建企业级管道
  • 参数调优:掌握 Temperature、TopP 等关键参数的最佳实践
  • 提示优化闭环:建立持续改进机制

📚 提示词基础框架

提示词由四大基础组件构成,缺一不可:

四大组件详解

组件 作用 示例
指令 明确任务目标 "识别用户的铁路票务意图"
上下文 提供背景知识 "可选意图包括:订票、退票、咨询"
输入 描述数据结构 "用户请求:帮我订一张票"
输出 约束响应格式 "以 JSON 格式返回 {intention, reason}"

为什么需要结构化?

  • ✅ 减少歧义,让模型理解任务边界
  • ✅ 提升准确性,帮助模型做出正确判断
  • ✅ 便于解析,让业务系统能够直接消费
  • ✅ 可维护性强,便于团队协作和迭代

🎬 场景设定:铁路票务意图识别

业务需求:识别用户属于以下哪一类意图,路由到对应的业务模块:

  • 🎫 订票意图:购买车票
  • 🔄 退票意图:退订车票
  • 咨询意图:咨询信息或无法明确判断

测试用例"帮我订一张从北京到上海的票,后天下午出发。"


💻 七大核心技巧演练

技巧一:明确任务边界 🎯

问题:基础提示容易导致模型输出冗余文字或答非所问。

解决:明确告诉模型"做什么"和"不做什么"。

基线提示(仅包含任务和输入):

var baselinePrompt = $"""
请帮我识别用户意图。
用户请求是:{userRequest}
意图:
""";

技巧二:结构化输出 📊

问题:自然语言描述不便于程序解析。

解决:通过 JSON 结构约束回复,减少闲聊,让下游服务直接解析字段。

var structuredPrompt = $$"""
你需要识别用户的铁路票务意图,选项仅包括:
* 订票意图
* 退票意图
* 咨询意图

请严格以如下 JSON 格式返回结果:
{
    "intention": "<订票意图/退票意图/咨询意图>",
    "reason": "<简要说明识别理由>"
}

用户请求:{{userRequest}}
""";

优势

  • ✅ 输出格式统一,便于自动化处理
  • ✅ 减少模型的冗余输出
  • ✅ 提高业务系统的集成效率

技巧三:少样本学习(Few-Shot)📚

问题:模型对边界情况判断不准确。

解决:加入 1-2 个高质量示例显著提升准确率。

var fewShotPrompt = $$"""
你需要识别用户的铁路票务意图,选项仅包括:
* 订票意图
* 退票意图
* 咨询意图

<example>
用户请求:我的票能退吗?
意图:
{
    "intention": "退票意图",
    "reason": "用户询问是否可以退票"
}
</example>

<example>
用户请求:请问高铁可以带宠物吗?
意图:
{
    "intention": "咨询意图",
    "reason": "用户咨询乘车规则,非订退票"
}
</example>

用户请求:{{userRequest}}
""";

原理:通过示例让模型学习任务的"模式",类似于"通过例子教学"。


技巧四:角色设定(Role Prompting)👤

问题:模型缺乏明确的身份定位,输出风格不统一。

解决:通过 System 消息注入角色定义,提前锁定模型身份与口吻。

MEAI 实现方式:使用 ChatMessage 列表,第一条设置为 ChatRole.System

var rolePrompt = """
你是一名铁路票务意图识别专家,负责在前端界面与后端服务之间准确判断用户意图。
仅从以下选项中选择:订票意图、退票意图、咨询意图。

请严格以如下 JSON 格式返回结果:
{
    "intention": "<订票意图/退票意图/咨询意图>",
    "reason": "<简要说明识别理由>"
}

若无法明确判断,则选择 "咨询意图",理由写 "输入不够明确,默认为咨询"。
""";

var messages = new List<ChatMessage>
{
    new(ChatRole.System, rolePrompt),
    new(ChatRole.User, userRequest)
};

优势

  • ✅ 让模型"扮演"专业角色,输出更专业
  • ✅ 减少多轮对话中的风格漂移
  • ✅ 提高输出的一致性和可预测性

技巧五:添加上下文(Context Enrichment)🌐

问题:模型缺乏必要的业务上下文(如当前时间、用户信息等)。

解决:系统级上下文携带时间、用户信息等关键字段。

var contextualPrompt = """
你是一名铁路票务意图识别专家,负责准确判断用户意图。

<context>
系统当前时间:2025年10月29日 18:00
用户Id:shengjie
用户等级:VIP会员
</context>

请严格以如下 JSON 格式返回结果:
{
    "intention": "<订票意图/退票意图/咨询意图>",
    "reason": "<简要说明识别理由>"
}
""";

应用场景

  • 🕒 时间相关任务(如"明天""后天"需要知道当前时间)
  • 👤 用户个性化(如根据用户历史行为调整回复)
  • 📍 业务规则(如特定时段的票务政策)

技巧六:拒答策略(Refusal Strategy)🛡️

问题:输入信息不足或超出范围时,模型可能"一本正经地胡说"。

解决:明确拒答与默认策略,在缺乏信息时选择最安全的响应。

var refusalPrompt = """
你是一名铁路票务意图识别专家,负责判断用户是否在处理车票相关需求。

若无法判断为订票或退票,请返回咨询意图,并在 reason 中注明 "输入不涉及票务,默认为咨询"。
当完全没有票务相关线索时,请回复:
{
    "intention": "咨询意图",
    "reason": "输入不够明确,默认为咨询"
}
""";

拒答策略的价值

  • ✅ 降低幻觉风险
  • ✅ 提供回退机制
  • ✅ 提高系统鲁棒性

技巧七:思维链引导(Chain-of-Thought)🧠

问题:对于多步骤推理任务,模型可能直接给出结论,缺乏推理过程。

解决:给出思考流程提示,帮助模型逐条检查条件并给出稳健答案。

var reasoningPrompt = """
你是一名铁路票务意图识别专家,负责分析用户文本并输出结构化结果。

当接收到输入时,请按以下步骤思考:
1. 关键词扫描:检查是否包含订票相关词,如"买票""预订""订"。
2. 退票检测:若无订票相关词,再查找"退票""取消""退"。
3. 咨询判断:若前两步未命中,判断是否属于咨询或闲聊。
4. 置信度评估:若不确定,选择咨询意图并在 reason 中说明原因。
5. 格式输出:严格按 JSON 模板返回结果。

请严格以如下 JSON 格式返回结果:
{
    "intention": "<订票意图/退票意图/咨询意图>",
    "reason": "<简要说明识别理由和推理过程>"
}
""";

思维链的价值

  • 🧩 提高复杂任务的准确性
  • 🧩 让推理过程可解释
  • 🧩 便于调试和优化

⚙️ MEAI 生成参数配置

在 MEAI 中,通过 ChatOptions 统一管理生成参数:

var chatOptions = new ChatOptions
{
    Temperature = 0.1f,      // 低随机性,保证稳定输出
    TopP = 0.9f,             // 核采样
    MaxOutputTokens = 120    // 限制输出长度
};

var response = await chatClient.GetResponseAsync(userPrompt, chatOptions);

参数速查表

任务类型 Temperature TopP MaxTokens 说明
意图识别/分类 0.1-0.3 0.9 100-200 需要稳定输出
内容生成/创作 0.7-1.0 0.9 500-2000 需要创造性
摘要/提取 0.3-0.5 0.8 200-500 平衡准确性
代码生成 0.2-0.4 0.95 500-1500 语法准确
对话/闲聊 0.6-0.9 0.9 100-300 自然流畅

关键参数说明:

  • Temperature:控制随机性(0=确定性,2=高随机性)
  • TopP:核采样概率(0.9=保留90%概率质量)
  • MaxOutputTokens:限制输出长度,节省token成本

🔄 提示优化闭环

当基础提示稳定后,可借助模型本身迭代提示,形成"生成 → 评估 → 再生成"的循环。

让模型充当提示工程师:

var improvementRequest = $"""
你是一名提示工程师,专注于提升提示词的清晰度和执行效果。
请分析以下提示词,并给出优化建议。

请按以下格式输出:
1. **优化后提示**:给出改进后的完整提示词
2. **改进说明**:说明做了哪些改进以及为什么
3. **进一步建议**:列出 2-3 条可选的进一步优化思路

待优化的原始提示如下:
{原始提示}
""";

🎯 总结

通过本文,我们系统学习了使用 MEAI 进行提示工程的核心技巧:

  • 四大基础组件:指令、上下文、输入、输出缺一不可
  • 七大核心技巧:从明确边界到思维链,逐步提升提示词质量
  • MEAI 集成:使用 ChatOptions 和 ChatMessage 构建企业级管道
  • 参数调优:Temperature、TopP、MaxOutputTokens 的最佳实践
  • 优化闭环:建立持续改进机制,让模型自我优化提示词

核心价值:

  • 🎯 提升输出质量:稳定、准确的输出
  • 🎯 便于系统集成:JSON 格式便于业务系统解析
  • 🎯 降低幻觉风险:拒答策略和思维链减少错误判断
  • 🎯 提高可维护性:清晰的提示结构便于团队协作

如需获取文章配套完整代码,可扫码咨询领取。👇