sauravbhattacharya001/prompt
GitHub: sauravbhattacharya001/prompt
一个基于 .NET 8 的 Azure OpenAI 提示工程库,提供模板编排、安全防护与全链路测试,简化提示管理与合规治理。
Stars: 1 | Forks: 0
# 🤖 提示词
**一个用于 Azure OpenAI 提示词工程的综合 .NET 库**
[](https://www.nuget.org/packages/prompt-llm-aoi)
[](https://www.nuget.org/packages/prompt-llm-aoi)
[](LICENSE)
[](https://dotnet.microsoft.com/download/dotnet/8.0)
[](https://github.com/sauravbhattacharya001/prompt/actions/workflows/codeql.yml)
[](https://github.com/sauravbhattacharya001/prompt/actions/workflows/ci.yml)
[](https://github.com/sauravbhattacharya001/prompt/actions/workflows/nuget-publish.yml)
[](https://codecov.io/gh/sauravbhattacharya001/prompt)

[](https://github.com/sauravbhattacharya001/prompt/actions/workflows/docker.yml)
[](https://sauravbhattacharya001.github.io/prompt/)
[](https://github.com/sauravbhattacharya001/prompt/releases)
[](https://github.com/sauravbhattacharya001/prompt/commits/main)
发送提示到 Azure OpenAI 并获取响应 —— 支持模板、链式、安全防护、令牌管理、版本控制以及完整的提示工程工具包。零样板代码。
[安装指南](#installation) · [快速开始](#quick-start) · [完整类库](#full-class-library) · [API 参考](#api-reference) · [更新日志](CHANGELOG.md)
## ✨ 功能特性
### 核心功能
- **单方法调用** — `GetResponseAsync()` 处理所有流程
- **多轮对话** — `Conversation` 类维护消息历史,跨轮次保持上下文
- **可配置参数** — `PromptOptions` 类提供预设(`ForCodeGeneration()`、`ForCreativeWriting()` 等)
- **自动重试** — 对 429 限流与 503 错误采用指数退避策略
- **取消支持** — 传递 `CancellationToken` 以取消长时间运行请求
- **连接池** — 线程安全的单例客户端,采用双重检查锁定
### 提示词工程
- **模板** — `PromptTemplate` 支持 `{{variable}}` 占位符、默认值、校验与组合
- **链式** — `PromptChain` 按顺序串联多个提示,每步输出作为下一步变量
- **编排器** — `PromptComposer` 流畅构建器,支持人格、上下文、任务、约束、示例与输出格式
- **少样本构造器** — `FewShotBuilder` 支持 5 种格式与令牌预算感知的少样本提示构建
- **库** — `PromptLibrary` 集中模板注册,支持搜索、分类、标签与 8 个内置模板
- **路由** — `PromptRouter` 基于意图的路由,支持关键词/正则评分与回退
### 安全与质量
- **防护** — `PromptGuard` 注入检测(10 个攻击向量)、质量评分(0–100,A–F 级)、清洗与格式封装
- **令牌预算** — `TokenBudget` 自动修剪对话以适配模型上下文窗口,支持 3 种修剪策略
- **测试套件** — `PromptTestSuite` 自动化提示评估框架,支持 10 种断言类型与可插拔响应提供器
### 管理
- **版本管理** — `PromptVersionManager` 支持提示模板的版本历史、行级差异与回滚
- **响应解析器** — `ResponseParser` 从 LLM 响应中提取结构化数据(JSON、列表、表格、键值对、代码块)
- **序列化** — 所有类均支持 JSON 往返(ToJson/FromJson/SaveToFileAsync/LoadFromFileAsync)
### 基础设施
- **1,000+ 测试** — 全面的 xUnit 测试套件
- **跨平台** — 在 Windows、Linux 与 macOS 上解析环境变量
- **NuGet 就绪** — 以 [`prompt-llm-aoi`](https://www.nuget.org/packages/prompt-llm-aoi) 发布
### 完整类库
| 类 | 描述 |
|-------|-------------|
| [`Conversation`](#conversation-class) | 带可配置模型参数的多轮消息历史 |
| `FewShotBuilder` | 支持 5 种格式与令牌预算集成的少样本提示构造 |
| [`Main`](#maingettresponseasync) | 带重试与取消的单次调用 Azure OpenAI 补全 |
| `PromptABTester` | 提示变体性能的 A/B 测试框架 |
| `PromptAnalytics` | 提示使用分析与指标收集 |
| `PromptAnnotation` | 提示中的结构化内联注释与元数据 |
| `PromptAuditLog` | 不可变的哈希链执行审计轨迹 |
| `PromptBatchProcessor` | 带并发控制的批量提示执行 |
| `PromptBenchmarkSuite` | 对提示变体进行测试场景基准测试 |
| `PromptCache` | 带可配置过期策略的响应缓存 |
| `PromptCatalogExporter` | 将提示库导出为 HTML、CSV 与 JSON 格式 |
| [`PromptChain`](#promptchain-class) | 多步骤 LLM 流水线,步骤间变量自动转发 |
| `PromptChainVisualizer` | 从提示链生成 Mermaid、DOT 与 ASCII 流程图 |
| `PromptChangeImpactAnalyzer` | 提示模板变更的冲击范围分析 |
| `PromptChangelogGenerator` | 带多种输出格式的版本历史格式化变更日志 |
| `PromptChatFormatter` | 多提供程序聊天消息格式化 |
| `PromptCompatibilityChecker` | 跨提供程序提示可移植性分析 |
| `PromptComplexityScorer` | 多维度提示复杂度分析 |
| `PromptComplianceChecker` | 提示的策略与监管合规性校验 |
| `PromptComposer` | 带语义分区与 4 种预设的可流畅结构化提示构造 |
| `PromptConditional` | 提示模板的条件逻辑 |
| `PromptContextBuilder` | 基于令牌预算的优先级提示上下文组装 |
| `PromptContextCompressor` | 带 4 种策略的智能对话上下文压缩 |
| `PromptCostEstimator` | 基于令牌的提示执行成本估算 |
| `PromptCoverageAnalyzer` | 库覆盖分析与健康评分 |
| `PromptDatasetBuilder` | 评估与微调数据集构造 |
| `PromptDebugger` | 深度结构分析 —— 反模式检测、清晰度评分与修复建议 |
| `PromptDependencyGraph` | 提示流水线的 DAG 分析 |
| `PromptDiff` | 提示版本间的行级差异对比 |
| `PromptDocGenerator` | 从提示模板自动生成文档 |
| `PromptEnsemble` | 多响应聚合(多数投票、最佳 N、共识) |
| `PromptEnvironmentManager` | 环境相关提示配置管理 |
| `PromptExplainer` | 分析提示中的技术、章节与改进建议 |
| `PromptFallbackChain` | 带自动回退的多模型健壮执行 |
| `PromptFingerprint` | 基于内容的提示指纹用于去重 |
| `PromptFuzzer` | 鲁棒性测试 —— 通过 7 种变异策略生成提示变体 |
| `PromptGoldenTester` | 提示输出的快照测试 |
| `PromptGrammarValidator` | 响应格式校验,11 种规则类型(正则、JSON、长度、结构) |
| `PromptGuard` | 注入检测、质量评分、清洗与输出封装 |
| `PromptHealthCheck` | 库级质量分析与健康评分 |
| `PromptHistory` | 提示执行历史追踪与检索 |
| `PromptInheritance` | 块级模板继承,支持 `{{super}}` |
| `PromptInterpolator` | 基于管道的模板变量转换 |
| `PromptLibrary` | 中央模板注册表,支持 CRUD、按分类/标签搜索、合并与 8 个内置模板 |
| `PromptLinter` | 基于规则的静态提示分析 |
| `PromptLocalizer` | 提示本地化与翻译管理 |
| `PromptMarkdownExporter` | 导出/导入提示库为 Markdown 格式 |
| `PromptMatrix` | 提示变量的组合测试 |
| `PromptMerger` | 合并与组合多个提示模板 |
| `PromptMetadataExtractor` | 结构化提示分析用于路由与分析 |
| `PromptMigrationAssistant` | 跨提供程序提示适配助手 |
| `PromptMinifier` | 提示压缩与空白优化 |
| `PromptNegotiator` | 带验证反馈循环的迭代提示优化 |
| `PromptOptions` | 模型参数预设(代码生成、创意写作、数据提取、摘要) |
| `PromptOutputValidator` | 基于可配置规则的 LLM 响应校验 |
| `PromptPerformanceProfiler` | 执行分析,含百分位、对比与报告 |
| `PromptPipeline` | 带中间件的提示处理流水线 |
| `PromptPromotionManager` | 生命周期阶段管理,含审批门与回滚 |
| `PromptQualityGate` | 可通过/失败的提示校验门 |
| `PromptRateLimiter` | 请求速率限制与节流 |
| `PromptRefactorer` | 自动化提示重构与优化建议 |
| `PromptReplayRecorder` | 类 VCR 的提示交互记录与回放 |
| `PromptResponseEvaluator` | 5 个维度(相关性、完整性等)的启发式质量评分 |
| `PromptRetryPolicy` | 带退避、断路器与错误分类的可配置重试 |
| `PromptRiskAssessor` | 多维度安全风险分析 |
| `PromptRouter` | 基于意图的提示路由,支持关键词/正则评分与回退 |
| `PromptSamplerConfig` | LLM 采样参数构造器 |
| `PromptSanitizer` | 提示清理与标准化工具 |
| `PromptSchemaGenerator` | 流畅的结构化输出模式构造 |
| `PromptScorecardBuilder` | 带权重评分的自定义评估量表 |
| `PromptSemanticSearch` | 基于语义相似性的提示库检索 |
| `PromptSignature` | 强类型提示签名(DSPy 风格) |
| `PromptSimilarityAnalyzer` | 多指标提示对比与重复检测 |
| `PromptSlotFiller` | 结构化槽位提取与多轮填充 |
| `PromptSnapshotManager` | 时间点库快照,含差异对比与回滚 |
| `PromptSplitter` | 边界感知的内容分块(用于长提示) |
| `PromptStreamParser` | 实时流式内容提取 |
| `PromptStyleTransfer` | 启发式提示语气与风格改写 |
| [`PromptTemplate`](#prompttemplate-class) | 支持 `{{variable}}` 占位符、默认值、校验与组合的复用模板 |
| `PromptTestSuite` | 带 10 种断言类型与可插拔响应提供器的自动化提示评估 |
| `PromptTokenOptimizer` | 令牌使用优化与提示压缩 |
| `PromptToolFormatter` | 跨 LLM 提供商的统一工具/函数调用格式 |
| `PromptUsageReport` | 含按时间分桶统计与成本分析的全面使用报告 |
| `PromptVariantGenerator` | 为测试生成提示变体 |
| `PromptVersionManager` | 提示模板的版本历史、行级差异与回滚 |
| `PromptWorkflow` | 基于 DAG 的提示工作流引擎 |
| `ResponseParser` | 从 LLM 响应中提取 JSON、列表、表格、键值对与代码块 |
| `SerializationGuards` | 反序列化的输入校验与安全检查 |
| `StreamChunk` | 流式响应解析的 Typed Chunk 模型 |
| `TokenBudget` | 上下文窗口管理,含 3 种修剪策略与 15+ 模型预设 |
## 先决条件
- [.NET 8.0](https://dotnet.microsoft.com/download/dotnet/8.0) 或更高版本
- 已部署模型的 [Azure OpenAI](https://azure.microsoft.com/en-us/products/ai-services/openai-service) 资源
## 安装
```
dotnet add package prompt-llm-aoi
```
## 配置
设置以下环境变量:
| 变量 | 描述 | 示例 |
|---|---|---|
| `AZURE_OPENAI_API_URI` | Azure OpenAI 终结点 URI | `https://myresource.openai.azure.com/` |
| `AZURE_OPENAI_API_KEY` | Azure OpenAI API 密钥 | `sk-...` |
| `AZURE_OPENAI_API_MODEL` | 已部署的模型名称 | `gpt-4` |
## 快速开始
```
using Prompt;
// Simple prompt (single-turn)
string? response = await Main.GetResponseAsync("Explain quantum computing in simple terms.");
Console.WriteLine(response);
```
### 使用自定义选项
使用 `PromptOptions` 为任意用例自定义模型行为:
```
using Prompt;
// Code generation — low temperature, high token limit
var codeOpts = PromptOptions.ForCodeGeneration();
string? code = await Main.GetResponseAsync(
"Write a merge sort in C#",
options: codeOpts);
// Creative writing — high temperature
var creativeOpts = PromptOptions.ForCreativeWriting();
string? story = await Main.GetResponseAsync(
"Write a short story about a time-traveling cat",
options: creativeOpts);
// Custom configuration
var custom = new PromptOptions
{
Temperature = 0.4f,
MaxTokens = 4000,
TopP = 0.9f,
FrequencyPenalty = 0.3f,
PresencePenalty = 0.1f
};
string? result = await Main.GetResponseAsync("Summarize this article...", options: custom);
```
**内置预设:**
| 预设 | 温度 | 最大令牌 | TopP | 用途 |
|---|---|---|---|---|
| `ForCodeGeneration()` | 0.1 | 4000 | 0.95 | 确定性代码输出 |
| `ForCreativeWriting()` | 0.9 | 2000 | 0.9 | 故事、诗歌、创意文本 |
| `ForDataExtraction()` | 0.0 | 2000 | 1.0 | JSON、结构化输出 |
| `ForSummarization()` | 0.3 | 1000 | 0.9 | 文本摘要 |
## 多轮对话
`Conversation` 类维护消息历史,使模型拥有完整上下文:
```
using Prompt;
var conv = new Conversation("You are a helpful math tutor.");
string? r1 = await conv.SendAsync("What is 2+2?");
Console.WriteLine(r1); // "4"
string? r2 = await conv.SendAsync("Now multiply that by 3.");
Console.WriteLine(r2); // "12" — the model remembers the context!
string? r3 = await conv.SendAsync("What was my first question?");
Console.WriteLine(r3); // It knows: "What is 2+2?"
```
### 自定义参数
每轮对话均可拥有独立的模型参数,可通过 `PromptOptions` 或单独属性设置:
```
// Using PromptOptions (recommended)
var opts = PromptOptions.ForCreativeWriting();
var conv = new Conversation("You are a creative writer.", opts);
// Or set properties individually
var conv2 = new Conversation("You are a creative writer.")
{
Temperature = 1.2f, // More creative
MaxTokens = 2000, // Longer responses
TopP = 0.9f,
FrequencyPenalty = 0.5f // Less repetition
};
string? story = await conv.SendAsync("Write a short story about a robot.");
```
### 重放对话
注入先前的消息,为模型提供上一会话的上下文:
```
var conv = new Conversation("You are a coding assistant.");
conv.AddUserMessage("How do I sort a list in C#?");
conv.AddAssistantMessage("Use list.Sort() for in-place sorting or list.OrderBy() for LINQ.");
// Now continue the conversation with full context
string? response = await conv.SendAsync("Show me the LINQ version with a custom comparer.");
```
### 对话历史
导出对话用于日志记录、序列化或展示:
```
var conv = new Conversation("System prompt");
conv.AddUserMessage("Hello");
conv.AddAssistantMessage("Hi there!");
List<(string Role, string Content)> history = conv.GetHistory();
foreach (var (role, content) in history)
Console.WriteLine($"[{role}] {content}");
// [system] System prompt
// [user] Hello
// [assistant] Hi there!
```
### 清除历史
重置对话但保留系统提示:
```
var conv = new Conversation("You are helpful.");
conv.AddUserMessage("Hello");
conv.Clear(); // Removes user/assistant messages, keeps system prompt
```
### 保存与加载对话
将对话保存为 JSON 并随时恢复 —— 适用于持久化会话、跨应用共享或实现对话历史:
```
var conv = new Conversation("You are a coding tutor.");
await conv.SendAsync("Explain SOLID principles");
await conv.SendAsync("Show me an example of SRP");
// Save to JSON string
string json = conv.SaveToJson();
// Save to file
await conv.SaveToFileAsync("session.json");
// Later... restore from JSON
var restored = Conversation.LoadFromJson(json);
// Or restore from file
var fromFile = await Conversation.LoadFromFileAsync("session.json");
// Continue the conversation with full context
string? response = await fromFile.SendAsync("Now show me OCP");
```
序列化的 JSON 包含所有消息与模型参数(温度、最大令牌等),因此恢复的对话是精确副本:
```
{
"messages": [
{ "role": "system", "content": "You are a coding tutor." },
{ "role": "user", "content": "Explain SOLID principles" },
{ "role": "assistant", "content": "SOLID stands for..." }
],
"parameters": {
"temperature": 0.7,
"maxTokens": 800,
"topP": 0.95,
"frequencyPenalty": 0,
"presencePenalty": 0,
"maxRetries": 3
}
}
```
## 提示模板
`PromptTemplate` 类允许你定义带有 `{{variable}}` 占位符的可复用提示。设置默认值、校验输入、组合模板并序列化以共享。
### 基础用法
```
using Prompt;
var template = new PromptTemplate(
"You are a {{role}} assistant. Help the user with {{topic}}.",
new Dictionary
由 [Saurav Bhattacharya](https://github.com/sauravbhattacharya001) 制作
标签:AI 安全, Azure OpenAI, Bias Detector, CodeQL, Docker, Injection Detection, .NET 8, NLP, NuGet, Prompt Chaining, Template Engine, 人工智能, 代码生成, 大模型, 大语言模型蜜罐, 安全评估工具, 安全防御评估, 开源, 提示词工程, 提示词注入检测, 渗透测试工具, 用户模式Hook绕过, 策略决策点, 软件开发