Back to "LLMApi:释放便笺"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

AI API ASP.NET Core LLM LLMAPi mockllmapi Nuget

LLMApi:释放便笺

Sunday, 02 November 2025

这是GitHub.的现场发布记录

诱引

这是来自 GitHub 的 @'@live_'}, 因此将会经常更新@.}

单元说明

v2.3.0 -完整内容型態支援

已释放@:_12月#13, 2025# 焦点: 完整 HTTP 内容类型支持 @ MS K1 窗体@ , 文件上传 @ MPK3 深路

此发布增加了对所有常见 HTTP 内容类型的全面支持@, @}使模拟 API 与 HTML 窗体@ ,} 文件上传@MS K2和复杂的嵌套路径兼容.}所有功能都使用手动 JSON 构建,用于 @.NET {10}兼容=.}

主要特点

1.-表格机构支持application/x-www-form-urlencoded) 🔥

已解决问题: 不支持 HTML 表单提交@- 一种基本的 HTTP 内容类型 @.

解决方案: 将表单数据自动转换为 JSON, 并正常逃跑

使用率示例:

curl -X POST http://localhost:5116/api/mock/users/register \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=john_doe&[email protected]&age=30"

特点:

  • 单值和多个值 @ ( @ arrays@ MS K1 @
  • 正在跳出特殊字符@( @ quotes @ , @ 反斜@ MS K2 @ newlines @ I,_ tabs @ )}
  • Unicode 和 Demoji 支持
  • JSON 手工制造JSON
  • 空值处理

多重值:

curl -X POST http://localhost:5116/api/mock/posts \
  -d "title=My Post&tags=tech&tags=programming&tags=llm"

自动转换为 JSON 阵列的标记@: @% ["tech", "programming", "llm"]

2. 檔案上傳支援 @ MS K1multipart/form-data) 🔥

已解决问题& :% 没有支持文件上传@-}对于测试文档来说关键 *\ MS K2 image 上传 UIs.}

解决方案: memory-安全文件流,包含元数据提取

使用率示例:

curl -X POST http://localhost:5116/api/mock/photos/upload \
  -F "title=My Photo" \
  -F "description=Beautiful sunset" \
  -F "[email protected]"

特点:

  • Memory - 安全流@:}檔案讀取過{8}{KB 缓冲区,並被丟棄}(沒有儲存@)
  • 抽取元数据: filename@,内容类型 @,}大小 @MS K3字节已读
  • 多个文件\ : 上传多个文件
  • 混合内容: 表单字段 @+}文件组合
  • 大型文件支持“: 测试” 用“ @100 mB +" 文件测试
  • 内容类型: Text, PDF, JEGMS K3二進位@- 全部支援

如何运作:

  • 文件内容流出并丢弃了 @ ( 防止内存 bloat)\
  • 只保留元数据并转给LLM
  • LLM 生成基于上传内容的适当响应

回应实例:

{
  "message": "File uploaded successfully",
  "file": {
    "fieldName": "image",
    "fileName": "photo.jpg",
    "contentType": "image/jpeg",
    "size": 524288,
    "processed": true
  }
}

@3.任意道路的长度#🔥

已解决问题: 有限路径深度支持 @- 重新更新的APIs经常使用深巢@.

解决方案“:充分支持通过深路” {**path} 所有的路线

使用率示例:

# 9-segment deep path
curl "http://localhost:5116/api/mock/v1/api/products/electronics/computers/laptops/gaming/high-end/2024/details"

# RESTful resource structure
curl "http://localhost:5116/api/mock/v2/organizations/org-123/departments/dept-456/employees/emp-789/reviews"

# With complex query string
curl "http://localhost:5116/api/mock/products/search?category=electronics&brand=Dell&model=XPS15&price_min=1000&price_max=2500"

特点:

  • 路径深度没有实际限制@( @ tested to @21}片段 @MS K2
  • 查询参数已完全保存
  • 使用所有 HTTP 方法“ (GET, POSTMS K2PUT,DELETE},PATCHMSKO5”
  • 与表格和文件上传兼容
  • LLMLM 将路径部分纳入现实的应对措施

技术实施

@.NET {10} 兼容性

所有功能都使用 人工建造JSON 以避免反射@-}基于序列的序列化 @:

// Manual JSON escaping
private static string EscapeJsonString(string str)
{
    return "\"" + str
        .Replace("\\", "\\\\")
        .Replace("\"", "\\\"")
        .Replace("\n", "\\n")
        .Replace("\r", "\\r")
        .Replace("\t", "\\t")
        + "\"";
}

为什么手动#?:NET10}在使用性能和安全性能的TrimmedMSKO4AOT应用程序中,

内存@- @Safe 文件处理

// Stream and dump file content
var buffer = new byte[8192];
long totalRead = 0;
int bytesRead;

while ((bytesRead = await stream.ReadAsync(buffer)) > 0)
{
    totalRead += bytesRead;
    // Content is discarded - only track size
}

结果结果成果@ :} Constant O(1)}不论文件大小的内存用量@ MS K2

全面测试

新测试23集成=) 测试套件总数-=YTET -伊甸园字幕组=- 翻译: 及通过率: 100%

测试文件:

  • FormBodyHandlingTests.cs - 12 窗体解析测试
  • JsonHandlingTests.cs JSON逃跑和抽取的测试
  • V2_3_0_FeatureTests.cs - 23 完整工作流程集成测试

覆盖面覆盖率:

  • 窗体正文解析@( @single value @,}数列 @ , 特殊字符=,_ unicode{,emoji)}
  • 多窗体数据 {(}%metatadata diplication\ ,混合字段 @+}files@,}大文件_)}
  • JSON逃脱了 (所有特殊字符 MS K1Q 边缘病例
  • 深度路径@( @% 上至 < 21 participle\ MS K2} 复杂查询,+Restful 结构=){
  • 组合假想 ( @deep path #+}窗体:#+}文件=)}*

业绩表现 实绩

文件上传性能:

  • 内存@ : @ Constant OZ(1) @ *-}只有@ MS K3QKB 在记忆中缓冲
  • 速度速度:串流允许大文件不屏蔽
  • 安全安全安全@: 内容从未存储@, 防止 doS 攻击

JSON 建筑绩效:

  • 手动解脱 @ 10-20%# 速度快于反射
  • 减少GC收集量
  • 可预见运行时间行为

断开更改

✅ 无无 完全后退兼容

  • 所有现有功能的工作没有变化
  • 无 API表面变化
  • 配置后向兼容
  • 零回归 = ( = 所有 = 345 现有测试通过 =)

《移徙指南指南》

没有需要的迁移@!}所有更改都是添加的 @:

// Existing code works as-is
builder.Services.AddLLMockApi(builder.Configuration);
app.MapLLMockApi("/api/mock");

// New content types automatically supported
// - JSON (existing)
// - Form bodies (new)
// - File uploads (new)
// - Deep paths (enhanced)

文件文件文件文件文档文件文件的文件文件文件会议文件文件文件,文件文件文献文件文件/文件文件资料文件文件文文件文件归档文件文件:文件文件记录文件文件、文件文件提供文件文件文号文件文件(文件文件 Do文件文件存档文件文件 文件文件文件和文件文件证件文件文件文件中文件文件Do文件文件档案文件文件

新文件新文件:

  • TEST_SUMMARY.md @- 完全测试覆盖 #(60新的检测%)
  • IMPLEMENTATION_SUMMARY.md 技术实施细节
  • V2_3_0_TESTS.md 集成测试文件

更新文件:

  • README.md -窗体的新使用示例@,}文件 @,深路
  • 更新的“"”区域
  • 最新特征一览表
  • 更新测试覆盖率科

已知限制

  1. 文件内容被倾弃 @ ( @ {% 无法为LLM 访问, 以便分析@ MS K1} *
  2. 最大文件大小受 ASP.NET 核心默认值限制
  3. 窗体阵列命名字段常规@: @% 重复的战地名称变为数组

使用案例

机构支助表格:

  • HTML 窗体测试@( @login},}注册 ,}备注)}
  • 传统网络应用
  • URL - @encoded API 客户端

文件上传支持:

  • 文档上传 UIS
  • 图像上传测试
  • 概况图片更新
  • 散装文件操作
  • 附件处理

深路徑:

  • 更新的APIP结构
  • 多@ - @% 启动应用程序
  • 等级资源获取
  • 复杂的路由模式

捐款者

LLMock API团队开发和测试的所有 v2.3.0}功能


@ 2.2.0 @ @ MPK1 @ 插件工具@ MS K2 @ pre- @ 配置的APIs

焦点: MCP-兼容的工具系统@,预置-Configed REST APISMS K4和智能上下文内存

此版本引入了一个强大的插件工具系统, 用于调用外部API和连锁模拟端点@,}以及前“ -” 配置的REST API定义, 消除重复配置@MS K2 内容内存现已自动“-” 管理并自动到期和全面外出提取@.

主要特点

1. 插件工具 @& 动作系统@🔥

已解决问题无法调用外部API或连锁模拟端点来创造现实的工作流程和决策树*.}

解决方案与 HTTP 和 Mock 工具执行器兼容的工具系统

工具类型:

HTTP 工具 呼叫外部 AST APIS :

{
  "Name": "getUserData",
  "Type": "http",
  "HttpConfig": {
    "Endpoint": "https://api.example.com/users/{userId}",
    "Method": "GET",
    "AuthType": "bearer",
    "AuthToken": "${API_TOKEN}",  // Environment variable support
    "ResponsePath": "$.data"       // JSONPath extraction
  }
}

Mock 工具 “-”链条决定树的模拟端点“:”

{
  "Name": "getOrderHistory",
  "Type": "mock",
  "MockConfig": {
    "Endpoint": "/api/mock/users/{userId}/orders",
    "Method": "GET",
    "QueryParams": { "limit": "10" },
    "Shape": "{\"orders\":[{\"id\":\"string\",\"total\":0.0}]}"
  }
}

密钥特征:

  • 模板替代: {paramName} URLs @,}标题{,}机构中的占位符
  • 环境变量: ${ENV_VAR_NAME} 用于安全保存证书
  • 验证:Bailer_BARBasic,API 关键支持
  • JSONPath 采掘公司: 从回复中提取特定字段
  • 工具链链\ : 执行多个工具的序列
  • 安全安全限额: Max Tool Chain Depth 和 Max ConcontomTools 防止逃跑处决
  • 结果缓存:按要求进行昂贵的缓存操作
  • MCP 兼容准备用于示范背景议定书一体化的架构

执行模式:

  • Disabled: 工具不可用 @ MS K1 默认@ )
  • Explicit呼叫通过 ?useTool=name 或 X-Use-Tool @(_ 阶段@1} @ -_ 当前=)
  • LlmDriven“:LLM”决定使用哪些工具来调用“(阶段”、“2 -未来”、“MS K4”。

使用率示例:

# Execute tool explicitly
GET /api/mock/user-profile?useTool=getUserData&userId=123

# Chain multiple tools
GET /api/mock/dashboard?useTool=getUserData,getOrderHistory&userId=123

# Tool results automatically merged into LLM context
Response: {
  "user": { /* enriched with real API data */ },
  "orders": [ /* from tool chain */ ]
}

文件文件文件文件文档文件文件的文件文件文件会议文件文件文件,文件文件文献文件文件/文件文件资料文件文件文文件文件归档文件文件:文件文件记录文件文件、文件文件提供文件文件文号文件文件(文件文件 Do文件文件存档文件文件 文件文件文件和文件文件证件文件文件文件中文件文件Do文件文件档案文件文件: docs/TOOLS_ACTIONS.md (500+线)

2.+Pre@-+AST AIPS=🔥_BARBAR

已解决问题“:”+“重复配置,用于常见的API模式 ” @“-”形状 @,环境@,}工具 @MS K4 限制速率%,等#.

解决方案: 定义完整 API 配置

配置示例:

{
  "RestApis": [
    {
      "Name": "user-profile",
      "Method": "GET",
      "Path": "profile/{userId}",
      "Shape": "{\"user\":{},\"orders\":[],\"recommendations\":[]}",
      "ContextName": "user-session",
      "Tools": ["getUserData", "getOrderHistory"],
      "Tags": ["users", "composite"],
      "CacheCount": 5,
      "RateLimitDelay": "500-1000"
    }
  ]
}

支持的特性:

  • 形状指定: JSON 形状或 OpenAPI 引用
  • O开放APIPI 一体化: OpenApiSpec + OpenApiOperationId 用于 schema @ - @% 驱动生成
  • 共享背景: 通过自动环境管理 ContextName
  • 工具集成工具工具:pre-config 执行工具
  • Tags=/}组:按类别组织API
  • 利率限制:Per-API 延迟配置
  • N- 完成: 生成多个变量
  • 串流: 启用 SSE 流
  • 模拟错误: 内建{-} 错误配置
  • 默认参数:查询参数和页眉

福利福利福利:

  • 零重复: 配置
  • 统一测试@ :} 相同的形状 @ I/ @ context 横跨团队
  • 快速蛋白设计:_
  • 文件文件文件文件文档文件文件的文件文件文件会议文件文件文件,文件文件文献文件文件/文件文件资料文件文件文文件文件归档文件文件:文件文件记录文件文件、文件文件提供文件文件文号文件文件(文件文件 Do文件文件存档文件文件 文件文件文件和文件文件证件文件文件文件中文件文件Do文件文件档案文件文件: APIs 在配置中自定义@-文档

用法 管理端点 - 进入v2.2.1):

# List all configured APIs
GET /api/configured

# Execute configured API
GET /api/configured/user-profile?userId=123

apperings .Full.json 组合键完整的例子包括e @-}商业工作流程=,}监控APIS,}和测试假想

3. 自动过期的动态上下文内存 @🔥

已解决问题:- 背景内存先前累积的无限期@,- 需要人工清理, 并可能导致长期-_ 正在运行的测试会话或 CI/CD管道中的内存泄漏 @.

解决方案ASP.NET核心 IMemoryCache 滑动到期

// NEW: Automatic expiration with sliding window
public class MemoryCacheContextStore : IContextStore
{
    private readonly IMemoryCache _cache;
    private readonly TimeSpan _slidingExpiration; // Default: 15 minutes

    // Contexts automatically expire after inactivity
    // Every access refreshes the expiration timer
    // Zero risk of memory leaks!
}

关键惠益:

  • 零手动清理@ : 上下文在无活动时间后自动消失@ 15 分钟
  • 滑落过期: Timer resets 在每次 API 呼叫 @-}活动环境永远不会过期
  • 内存高效“: 完美用于 CI/CD输油管 ” @- 在运行之间没有状态累积
  • 可配置期限由 @5@ minutes 到 @ 24_ 小时根据您的需要设定

配置配置:

{
  "mostlylucid.mockllmapi": {
    "ContextExpirationMinutes": 15  // Default: 15 (range: 5-1440)
  }
}

推荐设置:

  • 分钟“:快速测试”“, CI/CD管道
  • 分钟“: 默认”“- 常规开发测试”“(”建议“MSC3”
  • 分钟:Complical multiple @-_step工作流程
  • 分钟:长探索性试验课程

智能共享数据提取

已解决问题: 唯有硬码字段 @(id, userId, name, email) 被追蹤@, 限制域域@MS K2 特定字段的一致性, 如 SKUs, 帐号 @, 參考編碼}, 等.

解决方案:捕捉的递归性实地提取 全部所有 自动自动字段

在“(”之前:

// Only 4 hardcoded fields extracted
{"lastId": "123", "lastUserId": "456", "lastName": "Alice", "lastEmail": "[email protected]"}

现在"(#V}2.2.0)\i":

// ALL fields extracted up to 2 levels deep
{
  "orderId": "123",
  "sku": "WIDGET-01",
  "price": "49.99",
  "customer.customerId": "456",
  "customer.tier": "gold",
  "customer.address.city": "Seattle",  // Nested 2 levels
  "items.length": "1",
  "items[0].productId": "789",
  "items[0].quantity": "2",
  // Legacy keys still work:
  "lastId": "123"
}

新能力:

  • 嵌套对象:摘录 address.city, payment.cardNumber 带有点符号
  • 阵列跟踪: 仓储阵列长度 @(items.length: 5)
  • 第一个项目数据:捕捉 items[0].productId 自动自动
  • 自定义字段@ : @ 任何域@ MS K1} 特定字段现已被跟踪
  • 无限制域域“:”为e @-}商业=,融资 ,}医疗保健$,a gaming@,等
  • 后向兼容*: 遗产* lastId, lastUserId 关键键仍然工作

世界影响:

### Create order with SKU and tier
POST /api/mock/orders?context=checkout
Response: {"orderId": 123, "sku": "WIDGET-01", "customer": {"tier": "gold"}}

### Apply discount - automatically uses same SKU and tier!
POST /api/mock/discounts?context=checkout
Response: {
  "discountId": 789,
  "sku": "WIDGET-01",      ← Same SKU from previous call
  "customerTier": "gold",  ← Same tier from previous call
  "discount": 0.15
}

法学硕士现在看到 全部 在快速提取的字段中提取并保持域间的一致性{-} 特定数据在没有任何配置}.

技术细节

可排除工具系统:

工具控制器 (Models/ToolConfig.cs):

  • 所有工具类型的综合配置模型
  • 支持 HTTPMSMK0 mock,和可扩展的工具类型
  • 带有类型验证的参数模型
  • 超时和缓存配置

HttpPTool 工具提示执行器 (Services/Tools/HttpToolExecutor.cs):

  • 使用 URLs @ ,}标题{,}代理机构的模板替换 {paramName}
  • 环境变量分辨率 ${ENV_VAR_NAME}
  • 身份验证 <: beer , Basic> _, API 键
  • JSONPAT 响应提取
  • 全面错误处理

MockTool 执行器 (Services/Tools/MockToolExecutor.cs):

  • 要求决策树工作流程的其他模拟端点
  • 支持所有模拟端点功能 @(shape,}上下文@,等
  • 启用复杂的多@ - step API 模拟

工具注册 (Services/Tools/ToolRegistry.cs):

  • 发现和验证配置的工具
  • 通过互联网进行可扩展的执行程序登记 IToolExecutor 接口界面
  • 为 LLM 生成工具定义@ ( 阶段 @ MS K1 已就绪 @ MPK2

工具条纹器 (Services/Tools/ToolOrchestrator.cs):

  • 协调具有安全限制的工具执行
  • MaxTool Chain Depeh 每个请求跟踪@ ( 防止无限循环 @ MS K1\ {
  • 最大当前工具限制
  • 每项请求的结果缓存
  • LLM 上下文合并格式结果

Preáñó- 配置的REST APIs:

恢复功能Apiconfig (Models/RestApiConfig.cs):

  • 完全的API定义模式
  • OpenAPI 样本参考支持
  • 工具集成@,标签 @,}默认参数
  • 所有模拟功能@ : @ 形状 @ MS K1 @ 上下文 @ IMK2 @ 限制速率 @ MPK3}\ 流化@ MASK4 缓存

恢复登记 (Services/RestApiRegistry.cs):

  • 装入并验证所有已配置的 API
  • Tread\ -}安全查找 ConcurrentDictionary
  • 配置变化上的自动-reload @ (IOptionsMonitor)
  • 基于 Tag- 的过滤和分组
  • 有效 HTTP 方法@,正值

上下文内存:

内存缓存文本存储器 (Services/MemoryCacheContextStore.cs):

  • 用途 IMemoryCache 与 SlidingExpiration 选项
  • 登记登记册 PostEvictionCallback 自动清理记录
  • Tread=-}安全带 ConcurrentDictionary 用于名称跟踪
  • 查点时发现和清除静态进入记录

OpenApicon Text 管理器 (Services/OpenApiContextManager.cs):

  • 新建新设新 ExtractAllFields() 具有递回提取法的方法
  • 具有可配置深度的递归字段提取@ (default @ MS K1 @\ 2 level=)
  • 嵌套对象@,数列 @,和原始值
  • 短时补丁固定@ :_ 长字符串 @ I(>100 @ chars)# 现在在共享数据中截断, 以防止浮肿
  • 后向与遗留的实地开采兼容

配置配置 (LLMockApiOptions.cs):

  • 新建新设新 Tools 用于插入工具定义的工具
  • 新建新设新 ToolExecutionMode (Disabled/明确}/LlmDriven)
  • 新建新设新 MaxConcurrentTools 和 MaxToolChainDepth 安全限值
  • 新建新设新 RestApis API 配置定义的数组
  • 新建新设新 ContextExpirationMinutes 范围@:} @5-1440)
  • 所有通过互联网在DI注册的所有登记 LLMockApiExtensions.RegisterCoreServices()

测试

8#新测试 内 OpenApiContextManagerTests.cs:

  • 对所有原始田地的动态提取
  • ✅ 带有点符号的内嵌天体提取
  • ✅ 阵列长跟踪
  • @ ✅_ 第一阵列项目实地提取
  • @ ✅_ 多层嵌套级别@ MS K1# 默认深处@ I) @
  • ✅混合数据类型 @(strings,}数字@,booleans)
  • ✅ 后向兼容到遗留键
  • ✅ 边框情况 @ MS K1 空天体@ , 无值 *, 深巢限制=)

文件更新

新文件新文件:

  • docs/TOOLS_ACTIONS.md @ (500+_ line {):} 插入工具系统完整指南

    • 概览和MCP兼容性
    • 工具类型 @(_HTTP 和 Mok)
    • 所有选项的配置引用
    • 身份鉴别失败 !
    • 使用实例和模式
    • 带有模拟工具的决策树模式
    • 高级假设情景@(条件逻辑 @,动态端点 @MS K2 POST 模板_)
    • 阶段 #2/3# 路线图 ( LLLM-}驱动工具选择@,# 高级决策树_ MS K4 @
    • 使用类型Script schemas 的 API 参考
    • 解决问题和绩效考虑
  • docs/RATE_LIMITING_BATCHING.md:全面税率限制指南

    • 配置选项和战略
    • N- 批量完成
    • Per- endpoint 统计跟踪
    • 绩效测试实例

更新文件:

  • README.md@ :_ 新建 v2.2.0} 配有工具及预置的-}configed APIs 部分
  • appsettings.Full.json:的完整示例
    • 5 工具配置 * @(_HTTP 和 Moock 工具*)
    • “8”前称“-”后称“AST API”定义
    • 工具认证示例
    • 决定树型
  • LLMApi.http新的 HTTP 请求示例
    • 通过查询参数和信头执行工具
    • 模板替代示例
    • 工具链链模式
    • 验证示例
    • JSONPath 提取
    • 业绩监测
  • docs/API-CONTEXTS.md:《内存和共享数据提取》完整改写
    • Imemory缓存结构
    • 滑落到期行为
    • 动态提取实例
    • Real-世界使用有嵌套数据的案例
  • CLAUDE.md\ : 更新了所有新的配置选项
    • 工具 @ &% 动作配置
    • Pre- 配置的 REST APIs
    • 上下文到期设置

断开更改

无无 与 v2.1.0: 兼容的完全后退

  • 遗留字段提取@( @%lastId, lastUserId@,等#.)}仍在工作
  • 现有环境守则继续工作,没有变化
  • 新建功能为自动 & @ - 不需要更改代码

《移徙指南指南》

无需移民@! @ 提升并享受自动福利

  1. 上下文过期: 自动- 语境现在可以清理了
  2. 强化采掘: 自动- 所有字段现在都被跟踪

任择: 配置过期时间( 如果默认) @ MS K1 分钟 doesn't access your problem=:}

{
  "mostlylucid.mockllmapi": {
    "ContextExpirationMinutes": 30  // Increase for longer test sessions
  }
}

绩效影响

内存使用由于自动到期,总数减少

  • 环境不再无限期累积
  • CD输油管仍保持记忆力=-}有效
  • LongM- 运行服务自我@ - @ clean

采掘权@:_Minimal\ (<}#1%ms per response@)

  • 循环提取是高度优化的
  • 仅运行带有上下文的响应
  • 深度限值防止失控循环

Tok 用法略微增加

  • 在共享数据中的更多字段 @ = 稍长的提示
  • 每个上下文的典型增加@ : @ MS K1 @ signs
  • 被自动过期 {(}\ ffewer 上下文所抵消\ )*

兼容性

  • 完全后退兼容 和 v2.1.0
  • 所有现有功能继续运作
  • 无中断更改
  • 升级@-_in @-}推荐地点

质量 @&}校验释放

焦点提高可靠性#,}全面测试>,}改善开发者的经验

本版的重点是改进块状可靠性@, 提供全面的验证工具 @, 和简化配置管理}#. 所有来自 v2.0的所有功能都保持完全兼容.

主要重大改进

1.集成 HTTP 校验套件

  • 70+测试案例*: 全面验证覆盖 LLMApi.http
    • OpenAPI 管理@(load @, list,得到%,卸载@MS K4描述 @)
    • API 上下文管理@(accreate @,}更新 ,暂停,续会{,删除)
    • gRPC 方案管理@( @upload_,}列表 @ ,}获得服务 @,{
    • SSE 连续流动验证
    • 用大数组进行弹头测试
    • 背景历史和自定义描述
    • 后端选择 @ (@ X% MS K1 LLLM @ MPK2 Backend header_ )}
    • 校对:Portnoy
    • 合并功能验证
    • 错误模拟@( 全面 HTTP 错误代码@ )

“2. 增强弹簧可靠性”

  • 清晰的排列格式用于 JSON 阵列生成的 Explicate 指令
    • 添加关键格式化规则 PromptBuilder.cs: NSK1 你的第一个字符 必须是□: ["
    • 加固阵列格式化 ChunkingCoordinator.cs 圆块上下文
    • 防止逗号@ - @ 分隔对象输出 * MS K1 @ e @ .} @ g.,} {...},{...} 代替 [{...},{...}])
  • 改进后的指示“: ”在多“-”申请期间更好地指导LLMs
  • 已知限制:有文件的模型{/$tempertiature 推荐最佳块积}(se docs/OLLAMA_MODELS.md)

3.配置精简

  • 清洁清洁 appsettings.json: 移除的动画模型批注@, 更清洁的结构
  • docs/OLLAMA_MODELS.md:+#新的综合参考指南 @(285_BARBAR_线条@)}
    • 具有硬件要求的模型配置
    • 不同用途个案的温度准则
    • 上下文窗口对建议的缩放建议
    • 多@ - @% 后端配置示例
    • 模拟排除故障指南
    • 示范安装指示

4.文件改进

  • 全部交换器文档:所有25+管理端点现在都有完整的 Swagger docs
    • 标记组织 @(_OpenAPI 管理@,} API 背景 @ ,} gRPC,等
    • 摘要和详细说明
    • 请求回复示例
  • 后端 API 引用: 新建 docs/BACKEND_API_REFERENCE.md (600+线)
    • 完整的终点文件
    • 查询参数和页眉参考
    • 错误反应格式
    • 信号R枢中文件

错误修正

  • 用于 OpenAPI 端点描述的 HTTP 测试中的固定 URL 编码问题@ (:, /, {, } 字符@) @%

修改后的文件

代码更改@: @%

  • mostlylucid.mockllmapi/Services/PromptBuilder.cs: 增强的阵列格式指示 @(lines @MS K2
  • mostlylucid.mockllmapi/Services/ChunkingCoordinator.cs: 添加的数组格式
  • LLMApi/appsettings.json: 简化配置

新建文档@:

  • docs/OLLAMA_MODELS.md:综合模型配置指南
  • docs/BACKEND_API_REFERENCE.md完整的管理API参考

更新文件@: @%

  • LLMApi/LLMApi.http“:”从“448”扩展至“MS K2”线条:“(70+”新验证测试 ‘)’

已知限制

高温赛车:

  • LLM 可能会生成逗号@ - 分隔对象, 而不是在温度下生成数组@ MPK1\
  • 工作变通办法:
    1. 以块状请求将温度降低到 @ 0.8-1.0@ label
    2. 使用 lama3.2:3b 或 mistral-nemo @ (更好的指令
    3. 为避免块积而减少项目计数
    4. 禁用自动@ - @ chunking 使用 ?autoChunk=false

见见 docs/OLLAMA_MODELS.md 详细排除故障@. @%

兼容性

  • 完全后退兼容 和 v2.0.0
  • 所有现有功能继续运作
  • 无中断更改

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}万岁!

没有任何改变 @-尽管有大版本的大调 {,}所有现有的代码都在继续工作

这是将LLMock API 转换成一个全面的“,” Producting @-ready 模拟平台@.+#版本 @MS K3}添加现实的 SSE流模式,+% moto-}后端负载平衡Q,+全面后端选择_,}和广泛的文档=.}

主要特点

@1.# 现实的 SSE流模式 @MS K1 @MAJOR@) @

用于测试不同真实的 SSE 流模式的三个不同的 SES 串流模式@- @world API type_:

LlmTokets 模式 (Default-向后兼容})

  • 用于 AI 聊天界面的 Token@- @by @ - @token 串流
  • 格式化@: @% {"chunk":"text","accumulated":"fulltext","done":false}
  • 使用 case:测试聊天室UIsMS K1LLM应用程序

完整对象模式 (NEW)

  • JSO 完整 JSON 作为单独的 SSE 事件作为单独对象
  • 格式化@: @% {"data":{object},"index":0,"total":10,"done":false}
  • 使用 case @:}Twitter@/_X API,}存储滴答机 @ ,} real -时间 feed, IoT 传感器

数组项目模式 (NEW)

  • 具有丰富元数据的排列项目
  • 格式化@: @% {"item":{object},"index":0,"total":100,"arrayName":"users","hasMore":true,"done":false}
  • 使用 case @ : @ pagged 结果@ MS K1 @ 散装出口 @ I,搜索结果

設定@: @% 1

{
  "MockLlmApi": {
    "SseMode": "CompleteObjects"  // LlmTokens | CompleteObjects | ArrayItems
  }
}

请求覆写@: @

GET /api/mock/stream/users?sseMode=CompleteObjects
GET /api/mock/stream/data?sseMode=ArrayItems
GET /api/mock/stream/chat?sseMode=LlmTokens

客戶端範例 @ ( @ completeObjects@ MS K1

const eventSource = new EventSource('/api/mock/stream/users?sseMode=CompleteObjects');

eventSource.onmessage = (event) => {
    const response = JSON.parse(event.data);

    if (response.done) {
        console.log('Complete!');
        eventSource.close();
    } else {
        console.log(`User ${response.index + 1}/${response.total}:`, response.data);
        // response.data contains the complete user object
    }
};

2. 多- 后端加载平衡 *(MAJOR})

在多个 LLM 后端中分配高通量请求@ :

設定@: @% 1

{
  "MockLlmApi": {
    "Backends": [
      {
        "Name": "ollama-llama3",
        "Provider": "ollama",
        "Weight": 3,
        "Enabled": true
      },
      {
        "Name": "ollama-mistral",
        "Provider": "ollama",
        "Weight": 2,
        "Enabled": true
      },
      {
        "Name": "lmstudio-default",
        "Provider": "lmstudio",
        "Weight": 1,
        "Enabled": true
      }
    ]
  }
}

加载平衡的信号枢纽@: @

{
  "HubContexts": [
    {
      "Name": "high-throughput-data",
      "BackendNames": ["ollama-llama3", "ollama-mistral", "lmstudio-default"]
    }
  ]
}

功能@: @%

  • 圆四重量-罗滨分布
  • 请求选择后端@ option: check
  • 如果后端不可用, 自动失败默认
  • 使用信号R,SSEMS K1REST},和图解QL

3. 全面后端选择

请求选择 (=多方法=):=

# Via query parameter
GET /api/mock/users?backend=openai-gpt4

# Via header
GET /api/mock/users
X-LLM-Backend: openai-gpt4

# SignalR hub context
{
  "HubContexts": [
    {
      "Name": "analytics",
      "BackendName": "openai-gpt4-turbo"
    }
  ]
}

多提供商同时:

  • Ollama @(#当地模型_)
  • {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}
  • LM 演播室 @ ( @ 本地服务器@ MS K1
  • Mistral-Nemo @ (128k 背景@)

4.Mistral-Nemo @128k背景支援

Mistral-Nemo 的配置, 其大为 @ 128k 上下文窗口@:}

{
  "Backends": [
    {
      "Name": "ollama-mistral-nemo",
      "Provider": "ollama",
      "ModelName": "mistral-nemo",
      "MaxTokens": 128000,
      "Enabled": true
    }
  ]
}

使用案例@:

  • 在一次请求中生成数千份详细记录
  • 具有深层关系的复杂嵌套数据结构
  • 大型批量作业 MaxItems=10000+)
  • 综合测试数据集
  • 具有广泛嵌套字段的图形QL查询

信号号示例@:

{
  "HubContexts": [
    {
      "Name": "massive-dataset-128k",
      "Description": "Massive dataset generation with 128k context",
      "BackendName": "ollama-mistral-nemo"
    }
  ]
}

5.Swagger/开放API UI

与 Swagger UI: 的交互式 API 文件

  • 交换界面UI*:* 可在 /swagger
  • OpenAPP 指定:Auto-由端点生成
  • 交互式测试: 在浏览器中直接尝试端点@ info/ plain
  • 全面说明: 所有端点的完整文档
  • 导航导航: 连接自演示页面页眉

启用于程序@.}%cs @:}

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

app.UseSwagger();
app.UseSwaggerUI();

文件翻版

新建文件文件文件

  • docs/SSE_STREAMING_MODES.md 完整的 SSE 指南

    • 详细解释所有三种模式
    • 每个模式的客户端代码示例
    • 使用个案决定总表
    • 比较图表
    • 移徙指南
    • 排除故障区域
  • LLMApi/SSE_Streaming.http SSE 模式的 HTTP 示例

    • 所有三个 SSE 模式的示例
    • 合并功能示例 @(}后端选择@,}上下文 @MS K2}错误_)}%
    • 实际使用案例 @(stock tickers@,散装出口}%,logs)
    • 客户端 JavaScript 代码示例

更新文件

  • docs/CONFIGURATION_REFERENCE.md - 添加 SSE 模式区域
  • docs/MULTIPLE_LLM_BACKENDS.md *- 以负载平衡增强
  • appsettings.Full.json - 添加 SSE 模式示例和 Mistral}-Nemo

🧪测试改进

新建测试范围@: @%

  • 22SSE模式测试 万岁,万岁
    • 批次值验证
    • 配置解析
    • 查询参数覆盖
    • 所有模式的事件格式验证
    • Case - 敏感解析

全部测试套件@: @% 1

  • 218_BARBAR_测试 GRPC测试跳过 ) *
  • 无汇编错误或警告
  • 检查了完全后向兼容性

{🔧} 配置增强

新建配置选项@: @%

{
  "MockLlmApi": {
    // SSE Streaming Modes (NEW)
    "SseMode": "LlmTokens",  // LlmTokens | CompleteObjects | ArrayItems

    // Multiple LLM Backends with Load Balancing (v1.8.0)
    "Backends": [
      {
        "Name": "backend-name",
        "Provider": "ollama",  // ollama | openai | lmstudio
        "BaseUrl": "http://localhost:11434/v1/",
        "ModelName": "llama3",
        "ApiKey": null,
        "MaxTokens": 8192,
        "Enabled": true,
        "Weight": 3,  // For load balancing
        "Priority": 10
      }
    ],

    // Legacy Single Backend (Still Supported)
    "BaseUrl": "http://localhost:11434/v1/",
    "ModelName": "llama3",

    // Auto-Chunking (v1.8.0)
    "EnableAutoChunking": true,
    "MaxInputTokens": 4096,
    "MaxOutputTokens": 2048,
    "MaxItems": 1000,

    // Streaming Configuration
    "StreamingChunkDelayMinMs": 0,
    "StreamingChunkDelayMaxMs": 0,

    // Cache Configuration
    "CacheSlidingExpirationMinutes": 15,
    "CacheAbsoluteExpirationMinutes": 60,
    "MaxCachePerKey": 5
  }
}

🌍 环境变量

带有完整文档的全环境变量支持@: @%

# SSE Mode
export MockLlmApi__SseMode="CompleteObjects"

# Backend Selection
export MockLlmApi__Backends__0__Name="ollama-llama3"
export MockLlmApi__Backends__0__Provider="ollama"
export MockLlmApi__Backends__0__BaseUrl="http://localhost:11434/v1/"
export MockLlmApi__Backends__0__ModelName="llama3"
export MockLlmApi__Backends__0__Enabled="true"
export MockLlmApi__Backends__0__Weight="3"

# SignalR Hub Contexts with Backend Selection
export MockLlmApi__HubContexts__0__Name="analytics"
export MockLlmApi__HubContexts__0__BackendName="openai-gpt4-turbo"

# Or load balancing
export MockLlmApi__HubContexts__1__BackendNames__0="ollama-llama3"
export MockLlmApi__HubContexts__1__BackendNames__1="ollama-mistral"

📦新文件

核心执行=:

  • mostlylucid.mockllmapi/Models/SseMode.cs - SSE 模式元件
  • mostlylucid.mockllmapi/Services/Providers/ILlmProvider.cs -}提供方界面
  • mostlylucid.mockllmapi/Services/Providers/OllamaProvider.cs Ollama 提供商
  • mostlylucid.mockllmapi/Services/Providers/OpenAIProvider.cs OpenAI 提供商
  • mostlylucid.mockllmapi/Services/Providers/LMStudioProvider.cs LM演播室提供商
  • mostlylucid.mockllmapi/Services/Providers/LlmProviderFactory.cs -提供厂
  • mostlylucid.mockllmapi/Services/LlmBackendSelector.cs -后端选择逻辑

测试:

  • LLMApi.Tests/SseModeTests.cs - NSK1 SSE 模式测试

文 件 @:

  • docs/SSE_STREAMING_MODES.md 完成 SSE 指南
  • LLMApi/SSE_Streaming.http “- 30+ SSE 示例”

{📝} 更新文件

核心服务=:

  • mostlylucid.mockllmapi/LLMockApiOptions.cs *-添加 SseMode 属性@, @% LlmBackends 矩阵数组
  • mostlylucid.mockllmapi/RequestHandlers/StreamingRequestHandler.cs - 添加 SSE 模式路由
  • mostlylucid.mockllmapi/Services/LlmClient.cs - 添加后端选择超载
  • mostlylucid.mockllmapi/Services/MockDataBackgroundService.cs - 添加了信号R 后端选择
  • mostlylucid.mockllmapi/Models/HubContextConfig.cs *-添加 BackendName 和 BackendNames

文 件 @:

  • README.md “-”更新到 v2.0,}全面特征列表
  • docs/CONFIGURATION_REFERENCE.md - 添加 SSE 模式和后端选择
  • docs/MULTIPLE_LLM_BACKENDS.md 以负载平衡示例增强“-”
  • appsettings.Full.json 添加了全面的例子。

Demo 应用程序@: @%

  • LLMApi/Program.cs {-} 添加的交换器配置
  • LLMApi/Pages/_Layout.cshtml - 添加了 Swagger UI 链接

🎨使用案例示例

股市进料( 完整ObjectsMS K1

GET /api/mock/stream/stocks?sseMode=CompleteObjects&shape={"ticker":"AAPL","price":150.25,"change":2.5}

批量客户出口 @(_ArrayIemts@):

GET /api/mock/stream/export-customers?sseMode=ArrayItems&shape={"customers":[{"id":"string","name":"string"}]}

AI 聊天界面 @(#LlmTokens@):

GET /api/mock/stream/chat?sseMode=LlmTokens&shape={"message":"Hello!"}

High-Troughput IOT 传感器(Load balanced}):

{
  "HubContexts": [
    {
      "Name": "iot-sensors",
      "BackendNames": ["ollama-llama3", "ollama-mistral", "lmstudio-default"]
    }
  ]
}

使用 {128} k 背景@:} 的大规模数据集

GET /api/mock/stream/bulk-data?sseMode=ArrayItems&backend=ollama-mistral-nemo

来自v1.x的移民

无代码更改要求@ ! @%

版本 @2.0}是Q100%}后退与 v1._x}:}兼容

// v1.x code - still works exactly the same
builder.Services.AddLLMockApi(builder.Configuration);
app.MapLLMockApi("/api/mock", includeStreaming: true);

// SSE streaming defaults to LlmTokens mode (original behavior)
// Legacy single backend config (BaseUrl/ModelName) still works

Opt-到新地貌 @ :

// Same setup, just update appsettings.json
{
  "MockLlmApi": {
    "SseMode": "CompleteObjects",  // Switch to realistic streaming
    "Backends": [...]  // Add multiple backends
  }
}

断开更改

(无声)

尽管主要版本被冲击到 @ 2.0, @ 有零断裂变化@: @

  • 默认 SSES 模式 LlmTokens @(_ 原始行为@)_
  • 遗产 BaseUrl/ModelName 仍然支持的配置
  • 所有现有终点都未改变
  • 所有现有考试通行证
  • 保持完全后向兼容性

改进业绩

  • 多@ - @ 后端加载平衡: 分布在多个 LLM 实例中的负载
  • 加权环圆Q-罗宾\ :基于后端能力的智能分布
  • 后端@ - @ 具体 Tok 限制优化每种型号的'能力
  • 完整对象模式@: 更少的 SSE 事件@= 管理费比马约#- by-token低

为何版本@2.0? @%

此解密代表基本转换@: @

mock API 与 LLM - 发电

  • 单 LLM 后端
  • 一个 SSE 流模式
  • 基本配置

v2.0:production -Ready Moock平台

  • 带负负平衡的多个 LLM 后端
  • 三种现实的 SSE 流模式
  • 全面后端选择
  • 生产@-比例配置 @ (128 k 背景 @)
  • 企业+- 已备文件
  • 交互式 API 文件 @(_Swagger})

“2.0”版本将LLMock API定位为能够处理不同用途案例的大规模测试要求的综合模拟平台,

完整文件

🙏 谢谢

感谢所有用户和贡献者帮助将LalMock API塑造成一个全面的模拟平台@. @你的反馈和使用案例驱动了这些改进_!}


{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我...

参见 v1.8.0}功能 @ (}%Multiple LLM 后端支援@,}自动请求 Chunking_,}强化缓存配置 @).}


以前版本

参见以下 v1.7.x,vMS K2x},v{1.5.XMSKO}及先前版本@.}的完整发布历史记录

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.