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
LLMApi: 使用本地LLMs自动模拟 ASPMS K1NET 核心最小API中的API
Sunday, 02 November 2025
一. 导言导言 导言 导言 导言
我经常的痴迷之一是 样本数据@. @ it'}这是开发系统中一个常常令人烦恼的方面。 在开发这个系统时,你需要的数据来适当测试 fucnationality, 而同时开发出能让你创建所述数据的系统=.} 加上我目前对“'AAI 协助”的热爱, “' 编码随机想法” 它导致一个小 LLM 功能化测试数据生成器以及一个带有中间软件的核素包被复制出来, 该软件可以使用 API}: 产生模拟的API反应 。
你可以找到 吉特Hub在这里 所有公共域等 ... *
概念概念概念的概念概念
至于很多“"AAI 辅助”的编码想法,卢西论坛“,”是一个滑稽的自爆功能失调 以LLM为基础的论坛实验“)”和LMS在生成样本数据方面非常不错, 如果 我可以用它们模拟任何 API.
所需资源所需资源所需资源所需资源 所需经费所需资源所需资源
- 在ASP+.NET Core App.}中实施应该简单些。
- 数据应该相当现实 .
- 数据应该是随机的
- 它可以接受Json JSON 'shapeezMS K1}告诉LLM反应应该如何
- 它可以使用本地开放源码LMS
- 应该可以自由使用 Niget 控制器
这是我想出的“. ” (I') 会添加更多功能的思考细节, 随着我增加更多的功能 “.” (ITQ') 真正整洁的 @,}真的有效 而且比 IZ' d 害怕.}(然而)$@; 我有一个 A+4000 {16_GB,}你可以选择更小的边缘模型 但是质量会大不相同
未来添加的内容可能包括缓存, 以防您想要更快的 perf. @
这里“ '” 是软件包的 readme @ MS K1} 自动附加@ ).}
多数情况下, . @ mockllmapi
它能做什么 : 使用LLM*.提供现实的模拟API回应的核心模拟平台
为什么你要用它? 在任何工程中添加智能模拟端点, 只要有 code\ 2 common\ —\ no database@ MS K2 没有硬编码固定装置@ MPK3} 不维护 @ .
伴侶套件@: @% 多数情况下,.=mockllmapi=.测试 - 测试具有流利 HttpClient 整合功能的公用设施
如何读取此正版
选择您的路径@:
什么' 新建 @- TL;DR
最近 : 自动 JSON 结构在端点调用时的一致性 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我... 安全改进=,AOT/}通过消除序列依赖性支持 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我... 完整内容类型支持 @ - 窗体\ MS K1}文件上传@ , 全面测试 @ MPK3 测试 @ ) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我... API 整合的插件工具@, @ pre-}Configfied REST APIS_,}自动内存到期 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我... 使用多种执行战略的完成率
Click for detailed v2.5.0 feature breakdown
版本@2.5.0}详细信息
焦点“:安全改进和AOT/支持,通过消除序列依赖性“.完全后退与 vMS K3兼容”
-=YTET -伊甸园字幕组=- 翻译: - 移除了所有反射@-}基于序列的依附性 *:
- 已消除
System.Text.Json反映的使用情况 - 在整个代码库内人工建造JSON
- 与“.NET”和“修补”完全兼容
- 没有运行时间类型解析问题
- 小二进制大小和启动业绩改善
2. 强化安全 全面安全改善 :
- 删除了所有可能披露类型信息的所有反映@ - @% 基础序列化
- 消除潜在类型被排除的推断脆弱性
- 以明确类型的限制处理更安全 JSON
- 以序列为基准的开采活动减少攻击地面
-
- 更好地防止下气化攻击
3.性能优化 改进运行时间性能=:
- 加快JSON建筑工程,无反射间接费用
- 减少内存分配
- 更好的缓存地点
- 简化应用程序的启动时间缩短
- 低记忆记忆足迹
-=YTET -伊甸园字幕组=- 翻译: @ -_ 充分支持@ MS K1\NET @ I10} 预览构建@ MPK3#
- 整个手册JSON施工,以避免反省 -
- 测试了所有功能, 并正在使用 @ . NET & MS K1 预览构建
- 现有功能无断开更改
5.测试改进 - 强化测试覆盖面 :
- AOT/三联假设情景的额外测试
- 以安全为重点的单位测试
- 业绩基准衡量测试
- 所有新测试的100%通过率
Click for detailed v2.3.0 feature breakdown
版本@2.3.0}详细信息
焦点@ : 所有 HTTP 通用请求格式的完整内容类型支持@. 完全后退与 v2.2.0.
1. 形式机构支持 *- 充分支持 application/x-www-form-urlencoded 用于测试 HTML 格式和传统网络应用程序的匹配性@.}
2.文件上传支持 *- 充分支持 multipart/form-data 包括文件上传@. @ memory @-}安全流 (8_KB 缓冲),}元数据提取 (filename{,}大小 @MS K6}内容类型=%),}混合形式字段和文件.}内容被丢弃以避免内存 bloat}.}
3. 任意路径长度 支持通过 & M-支持深路径嵌套 {**path} account -所有路由@.测试的“9-}深路和复杂查询字符串” @.在路径深度上没有实际限制 {(ASP.NET核心默认值=).}
4.全面试验套房 -{228} 测试(37}新)}覆盖所有功能的 MS K4 表格机构剖析 <(12 测试>), JSON 处理 @(25 检验_), 完整 HTTP工作流程集成测试@.#100% 通过速率 _, 零回归=.
-=YTET -伊甸园字幕组=- 翻译: @-_JSON 手动制作 JSonson 在整个过程中避免反射@-}基于序列的序列问题 *.}所有功能都经过测试
Click for detailed v2.2.0 feature breakdown
版本@2.2.0}详细信息
焦点: 用于 API 整合的插件工具 @,前-Configed REST APISMS K3和智能上下文内存@. 完全后退,与 vó2.1.0.
1. 插件工具 @&行动系统 - 呼叫外部 AST API 或链式模拟端点以创建现实的工作流程和决定树. MCPMS K2相容架构,为 LLM-驱动的工具选择} @. 完整的 docs * @ →*
2.pre-集成 APIs @ -_ 定义完整的 API 配置, 一旦@ MS K1 调用 name . 形状或 OpenAPIspec 引用@ MPK3 共享的上下文管理@ I, 工具集成=. 见 appsettings.Full.json 完整的示例@. @%
3.动态内存管理 “-”上下文在“15”分钟不活动后失效。“(”可配置的 @5-1440 minutes@).”没有内存泄漏;“MS K5”自动清理;“MPK6”智能接驳
智能共享数据提取 - 自动从任何嵌套级别的答复中提取所有字段@. Nested 对象 @, 数组跟踪\ , 第一个项数据\ MS K4 自定义域@—all 自动追踪\ MPK6}
目录目录
核心概念
- 特征概览 - 这个系统能做什么
- 快速启动 @- @ 获取运行在 @ 5 @ 分钟@ minutes
- 建筑结构架构 # M- 如何一切相配#
- 非- 目标 @ &边界 -这是什么?
协议 {&} 特性
高级 & M& @% 建筑
建筑结构概览
共享基础设施@. 所有功能都有着相同的一代 , 上下文 MS K1 和控件系統— 允许您在 REST}, GraphQL, SSEMSKO5 信号RMS K6 OpenAPIMSsk7 以及 gRPCMSOK8 之间持续的行为 *
graph LR
Client[Client] -->|HTTP Request| API[LLMApi<br/>Minimal API]
API -->|Chat Completion| Ollama[Ollama API<br/>localhost:11434]
Ollama -->|Inference| Model[llm-model Model]
Model -->|Response| Ollama
Ollama -->|JSON/Stream| API
API -->|JSON/SSE| Client
API -.->|uses| Helper[AutoApiHelper]
style API fill:#4CAF50
style Helper fill:#2196F3
style Model fill:#FF9800
密钥元件@: @%
- 单一LLLM客户: 所有协议都使用相同的LLM结合抗御力政策
- 共享内存: API 在 REST, GraphQL, 信号RMS K3 和 OpenAPI 上的工作背景
- 常见地物:率限制@, caching}, 错误模拟=, 和符号管理适用于所有
- 模块设计: 使用任何组合@—}只添加您需要的东西
见见 详细结构图 请求下方的流程和形状控件@. @%
特点
此软件包提供 6个独立特征 - 使用任何组合 您需要的 @se 模块示例 协议的设置@- @ action
-=YTET -伊甸园字幕组=- 翻译:
- 超简单:
AddLLMockApi()+MapLLMockApi("/api/mock")=即时模拟API - 形状控制: 指定精确的 JSON 结构, 通过标题@,查询 palm,或请求机构
- 所有 HTTP 方法“: 支持获得“ ,” POSTQ,“ PUT,” DELETE MSSK4" PATCH
- 通配符路由: 您所选择的终点工程下的任何路径
- 完整内容类型支持 (NEW在 v2.3.0):
- 杰森 (
application/json标准JSON请求机构 - 组成机构 (
application/x-www-form-urlencoded) {- HTML 表格提交方式 - 文件上传 (
multipart/form-data) - 带有元数据提取的上传文件 - 记忆@-_#安全@:_File 内容流传并倾弃 #(}只保留元数据@)
- 杰森 (
- 任意路径长度& : @ deep path 嵌入已完全支持的深路 {(} @
/api/mock/v1/api/products/electronics/computers/laptops/gaming/...)
2. 图QL API 模拟
- 本地图图QL 支持邮电至
/api/mock/graphql带有标准图形QL查询 - 查询@- @Driven 形状: 图形QL 查询本身定义了响应结构
- *变数 & 操作@ : 充分支持变量@ MS K1 操作名称 @ MPK2 和碎片
- 正确错误处理: 返回图解QL-}格式错误
data和errors字段
3.伺服器-事件(SSEMS K3串流
- 渐进流:SSE支持进步的JSON一代
- 实时更新:串流数据代号@-by @-}致客户端
- 独立工程: 不需要 AIPI 设置
- 完整的 SSESE指南 | 连续串流
4.讯号Real-时流
- Web 套件串式@ : 持续真实@ MS K1 时空通过信号模拟数据
- 多重上下文: 同步运行多个独立的数据流
- 生命周期管理以管理API动态方式停止环境
- 独立工程: 不需要 AIPI 设置
- 信号R演示指南
@ 5. @ OpenAPI @ I/ @ Swagger Mock 一代人
- 自动端点生成: 指向任何 OpenAPI/Swagger spec @(URL 或文件}{)}
- 所有行动模拟@ :} 每個路徑與方法都變成活端點
- Schema MSMK0 驱动数据:LLM 生成符合您的方案的真实数据
- 多个特性: 同时装入并挂载多个 API specs
- 独立工程: 不需要 AIPI 设置
- OpenAPPI 特征指南
6.+GRPC服务模拟 在 v1.7.0)+NEW
- Proto 文件上传: 上传 @.proto 文件以生成 gRPC 服务模拟
- 双议定书支持:JSON 在 HTTP 上测试@,二进制方案用于生产 @-级模拟
- 动态序列化: 运行时 protobuf 编码, 没有代码生成
- LLM-}授权数据: 符合您原始信息定义的现实响应
- 独立工程: 不需要 AIPI 设置
- gRPPC 支持指南
常见地物
- 可配置:+Appings @.json 或内嵌配置
- 高可变数据@ :_ 每一个请求 MS K1 n更新都产生完全不同的现实数据
- NuGet 软件包*:* 容易增加现有项目
- 自动切换@ ( @ shape memory @ MS K1“:”自动记起第一反应中的 JSON 结构@,}确保所有后续请求在相同端点的“-”上都有一个一致的计划。 见“自动形状指南”
- AIPI 背景*: 保持相关请求的一致性* 《完整指南》
- 模拟错误: 全面错误测试,使用 @4}%xx#/5}状态代号@,}自定义消息{,}和多种配置方法
- 测试公用事业 伴侣套件
mostlylucid.mockllmapi.Testing在测试中简单集成 HttpClient 见测试科
非- 目标 @ &边界
这是什么? :
- 现实模拟数据生成的开发和原型设计工具
- 适合前端开发@, API 设计 @,}演示_ ,}和测试
- Zero- 硬编码固定装置和数据库的维护替代
这算不算什么?
- 非生产数据来源 “-” 生成的数据是现实的,但合成数据。
- 不取代合同测试 - 使用此开发@; 分别验证真实的API
- 不是因为未经验证的生产流量 @-_% 用户输入直接到 LLM 提示@ (prompt pinching possible\ MS K2}
- 没有数据库或持久性存储 除了任择的 API 语境@)
- 不能取代真正的后端逻辑 “- ”业务规则“,”验证“MS K2”和工作流程仍然简化。
何时使用@ : @
- 在后端备好之前开发前端
- 创造现实的演示,不提供生产数据
- 使用不同数据假设情况测试UI组件
- 设计APIP设计和试验反应形状
- .NET学习LLM综合模式
当不使用它时 @ : @ @
- 在为实际用户提供服务的生产环境中
- 测试认证@/授权逻辑 @(}安全计划忽略#)
- 何时数据必须符合严格的业务规则或验证
- 用于负载测试实际后端性能
- 当需要跨测试运行的可复制数据时
特征文件文档
用于提供结构图的详细指南@,使用案例}{,和操作细节}:
docker 部署指南 “-” 完整嵌入设置和部署
- 快速启动 Docker 作曲@ + @ Ollama
- Endó- @to-}端端示例,使用 llm@-}模式
- 配置方法 @(env vals, 音量映射@,}{.ENv file_)}
- GPU 支持@ , @ mounity\ MS K1} 后端设置
- 生产考虑和排除故障
后端 API 引用 完整的管理端点文件
- OpenAPI 管理端点
- AIP 背景管理
- gRPPC 原型管理
- 信号中枢
- 完整请求@/}回应示例
多 LLM 后端指南 - 多提供商支持
- 同步连接 Ollama,OpenAIMS K1和LM Studio
- Per- 请求通过信头@ /query params 选择后端
- 与遗留配置完全后向兼容
- 提供方+-}具体实例和最佳做法
AIPE 背景情况指南 新 1
- 要求一致的多{-}#step工作流程时共享内存
- E- 商业流量 @,}股本滴答~,游戏状态示例
- 调控和智能缺勤
- 美人鱼建筑图
比例限制QZ&Batching 指南 "M-"新版的《MSSK1》
- N- 支持生成多个响应变体的完成支持
- Per-+endpoint 统计跟踪移动平均数
- 3个批量战略 @(Actrial,}平行:,串行=)
- 性能测试详细计时信头
- 适合测试后撤战略和超时假设情景
可插件工具 @ &+Z 动作指南 "M-"新版的《MSSK1》
- MCP-\可扩展工具集成的兼容结构
- HTTP 调用具有认证的外部API的工具
- 用于创建决策树和工作流程的模拟工具
- 使用环境变量支持替换模板
- 具有安全限度和结果缓存的连锁工具
- 阶段 @1 @ @ ( @ explicite\ ),} 阶段2 @ (LLLM @ I-# 驱动), 阶段□3 @ @ _(Advanced@)_路线图
gRPPC 支持指南 "M-"新版的《MSSK1》
- GRPC 自动模拟服务的 proto 文件@ .
- HTTP 和二进制Protobuf 上的双向支持@:JSON
- LLM- 能够产生切合实际的反应
- 完整执行细节和测试战略
-
- 从 URLs @ ,}文件@,或内嵌 JSON 装入动态 pec 加载
- 带有路径参数的自动端点生成
- 请求书“/”与宠物商店API的响应示例
- 用于实时@-}时间更新的信号集成
-
- REST+- @ only @ , @ 图解QL-@ only\ MS K3_ 信号R}%-# 只设置
- 记忆优化战略
- 混合和匹配协议
-
- Reale- time 数据流设置
- 背景生命周期管理
- 客户连接实例
-
- 完整版本历史
- 正在断开更改@ ( @ nonone 自 v1.0!)
- 移徙指南
测试摘要 "M-"新版的《MSSK1》
- 全面测试覆盖文件
- 228 详细分类的测试
- 业绩计量和审定
- 所有测试类别说明
执行情况概述 "M-"新版的《MSSK1》
- 表格正文和文件上传实施细节
- 人工JSON为“.NET”制造 JSON
- Memory -安全文件处理架构
- 完整代码修改和理由
快速启动
安装装置
主套件@ : @% 1
dotnet add package mostlylucid.mockllmapi
测试公用设施@( @Optional_):
dotnet add package mostlylucid.mockllmapi.Testing
提供测试中易操作 HttpClient 配置的流性 API@. 见测试科 详细描述@. @%
使用 docker 快速启动@ ( @ recommendation @ MS K1
最快的启动方式 @ - @ no *.NET 或 Ollama 安装需要@!}
# Clone the repository
git clone https://github.com/scottgal/LLMApi.git
cd LLMApi
# Start everything with Docker Compose (includes Ollama + llm-model)
docker compose up -d
# Wait for model download (first run only, ~4.7GB)
docker compose logs -f ollama
# Test the API
curl "http://localhost:5116/api/mock/users?shape={\"id\":0,\"name\":\"\",\"email\":\"\"}"
万岁,万岁 API 正在运行 http://localhost:5116 使用 Ollama 后端@. @
见 完整嵌入指南 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}不,不!
- 配置选项 @ ( @ env vals@ MS K1} 音量映射 *)
- 使用不同的模型 @(_gemma3:4}(b), mirtral}-nemoMS K4
- GPU 支持
- 生产部署
- 排除故障
本地开发=)
如果不使用 Docker @ : @%
- 安安装 -=YTET -伊甸园字幕组=- 翻译: 或以后
- 安安装 奥拉马 并拉一个模型:
ollama pull ministral-3:3b
选择 LLM 模型
此软件包是 开发并测试 ministral-3:3b “(3B参数”“),”为所有功能的极快性能提供优异效果 ”“.然而,”它与任何Ollama-兼容模型“MS K5}合作。
建议的模式
| @ | 型号@ | 大小 @# | 速度 @MS K3 质素 @% | 上下文 @ | 最适合 @MSC6 | |
|---|---|---|---|---|---|---|
| 缩略语@-3:3_b ( 默认 MS K1 | NSK3 B @ | V.Fast _ | 精美的@ | ~256K □ | JSON!FastMS K1准确},巨型环境 | |
| 宝石=3:4*b | + @4+B# | QFast # | +好~ | +@4+K+ | +替代更低的<-{端机>_ | } |
| 马拉马 3 @ | 8B | 中度 @MS K3非常好 @ | MSSK5K#一般使用@,生产_ | |||
| -Nemo @ | @ 12_B# | _ 慢速 @MS K3} 出色的@ | } (128QK) * | * 高品质@,大型数据集 | ||
| 毫升 :7b @ | @ @MS K1_B# | }中度 | @非常棒 @ | 8QK# | *替代万客邮箱的 | |
| {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我 @ | @ 3.8_B# | QFast # | }好的 | } @MS K4QK @ | Q快速原型@ | @ |
| 小型 | K+2QK+USK6+ULTRA资源 @-# | _ |
发展完美无缺
JSON 一代的解码器是杀人凶手 -+RT-_PAST},}高度精确 ,{大背景:}
ollama pull ministral-3:3b
{
"MockLlmApi": {
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"MaxInputTokens": 8192
}
}
为何如此伟大?
- 在任何硬件上非常快 {(3-4}GBRAM)%
- 最佳 JSON 类生成精度
- 256QQK 上下文窗口 @( handles 复合嵌套结构@)
- 专门为代码/结构化数据培训
- CI/CD管道和开发的完美
- 与一般模型相比的最小幻觉
PRODUCTION:MistralMS K1Nemo -最佳质量 MSSK3大规模背景
用于生产“-”类似测试,使用复杂的 schemas @:
ollama pull mistral-nemo
{
"MockLlmApi": {
"ModelName": "mistral-nemo",
"Temperature": 1.2,
"MaxInputTokens": 8000
}
}
为何如此伟大?
- 最高质量的现实数据生成
- 128K 上下文窗口 (要求 Ollama 配置)
- 最适于复杂的嵌套结构和大型数据集
- 生成数据中更具创造性的差异
- 注注注注注释注注说明附注注注,注注 注注的注 注 注 注注说明注注附注注 注的注注 注注说注注的附注注说明,注 注,注说明的注说明说明注 注说明注说明 注注 注附注注的注释注 注 注 注注释注说明注释注的说明注,说明注的 注 注说明说明说明 注 注的说明说明,说明说明的附注 注注附注说明注附注的注附注 注 注注释说明注注释的注注释 注注注释注释注,的注, 注注,注释注附注附注注注释说明的说明 注说明 注的注释 注 注附注说明说明注释说明说明附注 注说明的注释注释注释说明 注注释注释 注说明注释注释的说明注释 注注释 注的附注注释注注释,注注释附注注附注注释的 注注脚注注注@: 需要更多的資源@(12-16GBRAM)
模式@- @ 具体配置
对于小树,-3:3_b @(}推荐@-默认=):}
{
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"MaxContextWindow": 262144 // 256K context window
}
对于宝石 3:4b或马拉马 ]3:
{
"ModelName": "llm-model", // or "mistral:7b"
"Temperature": 1.2,
"MaxContextWindow": 8192 // Set to model's context window size
}
生产质量=):
{
"ModelName": "mistral-nemo",
"Temperature": 1.2,
"MaxContextWindow": 32768, // Or 128000 if configured in Ollama
"TimeoutSeconds": 120 // Longer timeout for large contexts
}
注:: Mistral-Nemo 需要 Ollama 上下文配置 用于 & M128 @QK 上下文@ .}
在哪里找到 MaxContextWindow @ :
# Check model info
ollama show {model-name}
# Look for "context_length" or "num_ctx" parameter
# Example output: "context_length": 8192
小型模型的“(”和“3,”
{
"ModelName": "tinyllama",
"Temperature": 0.7 // Lower temperature for stability
}
为什么温度问题? :
- 大号模型 @ (7_B+)# 能够处理高温 *(1.0-1.5)}同时保持有效的 JSON
- 小型模型 @(<4_B)}@ 需要低温=%(0.6-0.8) 避免=#:
- 无效的 JSonson 语法@ ( @ missing expos *,} 括号 @ MS K2
- 以省略号“("...")”快速响应
- HALLC化字段名称或结构
- 低温 @ = 更可预测的输出@ MS K1 更少种类
- 高温@= 更有创意的输出 @, 更多种类 @MS K2}#但对于小型模型来说风险更大 200)})
安装装置
# RECOMMENDED for development (fastest, most accurate JSON)
ollama pull ministral-3:3b
# Alternative options
ollama pull gemma3:4b # Good for low-end machines
ollama pull llama3 # General purpose, good balance
ollama pull mistral-nemo # Highest quality (requires more RAM)
# Alternative options
ollama pull mistral:7b
ollama pull phi3
重要限制
- 小型模型 (
tinyllama,phi3@)工作,但也许#:- 生成更简便的@ / @# 无不同数据
- 与复杂的图形QL查询斗争
- 需要更多的尝试
- 在简单查询和答复规模小的情况下,工作最有效
- 所有模型 能够与 @: @%
- 非常复杂的“/” 深嵌入的图形QL 查询 深层的(>5 深度的MSC1
- 每个对象的许多字段 “(>10”字段“)”
- 大型阵列请求 - 可靠性限制 < @2-5 > 项目
- 如果看到错误 @("//"):@%
- 低温至0.8或以下
- 简化您的图形QL 查询@ ( @ fewer 字段@ MPK1} 减去嵌套@ I)
- 增加
MaxRetryAttempts@ 5 @ 或更多
基本用法
程序#._cs}:
using mostlylucid.mockllmapi;
var builder = WebApplication.CreateBuilder(args);
// Add LLMock API services (all protocols: REST, GraphQL, SSE)
builder.Services.AddLLMockApi(builder.Configuration);
var app = builder.Build();
// Map mock endpoints at /api/mock (includes REST, GraphQL, SSE)
app.MapLLMockApi("/api/mock");
app.Run();
apperings .json:
{
"mostlylucid.mockllmapi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2
}
}
现在所有的要求 /api/mock/** 返回智能模拟数据@. @%
自动切换@ ( @ shape memory @ MS K1
在对同一端点的请求中自动保持一致的 JSON 结构@. @%
它会做什么
自动形状从第一个响应到一个端点时记住 JSON 结构, 并自动将其应用到同一端点@(}该端点的所有后续请求中, IDs @).}这确保了:
- 多次呼叫的一致应对方案
- 发展过程中没有计划漂流
- 可预期的用于测试的API行为
快速示例
# First request - generates free-form response
GET /api/mock/users/123
Response: {"id": 123, "name": "Alice", "email": "[email protected]", "role": "admin"}
# Second request - automatically uses same structure
GET /api/mock/users/456
Response: {"id": 456, "name": "Bob", "email": "[email protected]", "role": "user"}
# All subsequent requests use the same schema!
GET /api/mock/users/789
Response: {"id": 789, "name": "Carol", "email": "[email protected]", "role": "manager"}
配置配置
默认启用 内 appsettings.json:
{
"MockLlmApi": {
"EnableAutoShape": true, // Default: true
"ShapeExpirationMinutes": 15 // Default: 15
}
}
Per- 请求控制
禁用特定请求@: @%
GET /api/mock/users/special?autoshape=false
恢复坏形状@: @
# If first response was incomplete, renew it:
GET /api/mock/users/1?renewshape=true
# New response replaces old shape template
路径正常化
所有这些请求都具有相同的形状 @ ( @ orgalized to /api/mock/users/{id}):
GET /api/mock/users/123 # Numeric ID
GET /api/mock/users/abc-456 # Alphanumeric ID
GET /api/mock/users/550e8400-e29b... # UUID
密钥特征
- 默认启用的“✅” - 工作出盒子
- 🔄 元件更新 - 修补坏形状
?renewshape=true - @ ⏱_ 自动@ MS K1_ 扩展 “- 形状在无活动后过期”“( configibable @)”
- 聪明的正常化 - 同一端点共享形状的不同标识
- “🚫 明确覆盖” @ - 通过查询提供清晰的形状@ MS K1 header @ MPK2_ body 跳过自动形状
- ✨无处不在工作 - REST, 溪流 MS K2 和图形QL 终点
何时使用
完美地适合:
- 需要一致的模拟数据结构的前端开发
- 需要进行可预见办法的整合测试
- 数据结构应该在请求之间更改的演示文示@ ' @ t
- 具有不断演变但一致形状的API原型
不需要时间@: @
- 使用清晰的形状@ ( @ 它们占上风 # ) @ *
- 每种反应都需要最大程度的多样化
- 测试机制进化假设情景
排除故障
未应用元件@ ? @
- 检查支票
EnableAutoShape: true配置中 - ưμ㼯A
- 检查过期时间 @ ( @ 默认@ MS K1 @ minutes @ )
需要改变形状@? @
GET /api/mock/users/1?renewshape=true
程序清除所有形状@ : @%
// Inject AutoShapeManager
autoShapeManager.ClearAllShapes();
完整文档 <,}见 CLAUDE.md 自动Shape科.
测试范围 @: @39 测试覆盖所有自动形状功能@✅
配置选项
📘 完整配置引用@: 见见 配置参考指南 用于所有选项 @📄#完整实例_:} 见见 apperings .Full.json 组合键 - 演示 每个 配置选项
校对:Soup
{
"mostlylucid.mockllmapi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"TimeoutSeconds": 30,
"EnableVerboseLogging": false,
"CustomPromptTemplate": null,
// Token Management (NEW in v1.5.0)
"MaxInputTokens": 8192, // Ministral has 256K context
// Resilience Policies (enabled by default)
"EnableRetryPolicy": true,
"MaxRetryAttempts": 3,
"RetryBaseDelaySeconds": 1.0,
"EnableCircuitBreaker": true,
"CircuitBreakerFailureThreshold": 5,
"CircuitBreakerDurationSeconds": 30
}
}
型号@- @ 具体 Tok 限制*:* 见 LLMApi/appsettings.json 用于不同模型的配置示例 @ (Llama {3,} TinyLlama} MS K2 Mistral, 等}.). 每种模式都有不同的上下文窗口大小@-调整 MaxInputTokens 因此,.
AIPI 背景*:* 关于使用背景保持各请求之间一致性的详细信息*,见 AIPE 背景情况指南.
复原力政策
新建于 v1.2.0: 保护您的应用不受LLM服务故障影响
软件包包含两种由默认设定的抗御模式@: @%
重试
- 自动重试失败的 LLM 请求, 且有指数延迟@ (1 @ss,} @ MS K2 @sç,} @ @ I4_s#...)}
- 包括防止雷雷群问题急躁
- 处理连接错误 @ , @ 超时@ MS K1 @ 和非 - @ 成功状态代码
- 默认@ : @ @ MS K1 @ 尝试使用 @ MPK2 @ 第二次基准延迟
电路断开器
- 连续失败防止串联失败后打开
- 在允许测试请求之前,在设定的时间长度内保持开放
- 三个州+:关闭@(rmal_),打开 @(reject}%),半-开放(测试#)
- 默认@ :} 在 @ MS K1} 连续失败后打开 <% k2 继续开放 < 30\ 秒 >
設定@: @% 1
{
"mostlylucid.mockllmapi": {
// Enable/disable retry policy
"EnableRetryPolicy": true,
"MaxRetryAttempts": 3,
"RetryBaseDelaySeconds": 1.0, // Actual delays: 1s, 2s, 4s (exponential)
// Enable/disable circuit breaker
"EnableCircuitBreaker": true,
"CircuitBreakerFailureThreshold": 5, // Open after 5 consecutive failures
"CircuitBreakerDurationSeconds": 30 // Stay open for 30 seconds
}
}
正在对齐@: @
抗御力政策记录所有尝试的重试和断路器变化状态
[Warning] LLM request failed (attempt 2/4). Retrying in 2000ms. Error: Connection refused
[Error] Circuit breaker OPENED after 5 consecutive failures. All LLM requests will be rejected for 30 seconds
[Information] Circuit breaker CLOSED. LLM requests will be attempted normally
调整时@ : @%
- 慢速LLM? 增加
MaxRetryAttempts或RetryBaseDelaySeconds - 侵略性恢复=? 减少
CircuitBreakerDurationSeconds - 许多瞬时错误@ ? @% 增加
CircuitBreakerFailureThreshold - 禁用本地测试@? @% 两者兼设
EnableRetryPolicy和EnableCircuitBreaker至false
《通过法典》
builder.Services.Addmostlylucid.mockllmapi(options =>
{
options.BaseUrl = "http://localhost:11434/v1/";
options.ModelName = "mixtral";
options.Temperature = 1.5;
options.TimeoutSeconds = 60;
});
自定义端点模式
// Default: /api/mock/** and /api/mock/stream/**
app.Mapmostlylucid.mockllmapi("/api/mock");
// Custom pattern
app.Mapmostlylucid.mockllmapi("/demo");
// Creates: /demo/** and /demo/stream/**
// Without streaming
app.Mapmostlylucid.mockllmapi("/api/mock", includeStreaming: false);
使用率示例
基本请求
curl http://localhost:5000/api/mock/users?limit=5
返回由 LLM. 生成的现实用户数据
表格请求@(NEW in v2.3.0)
HTML 表格提交@: @%
curl -X POST http://localhost:5000/api/mock/users/register \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=john_doe&[email protected]&age=30"
将表单数据自动转换为 JSON, 并传递给LLM, 以便产生切合实际的响应生成@.
具有多个值的窗体@: @%
curl -X POST http://localhost:5000/api/mock/posts \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "title=My Post&tags=tech&tags=programming&tags=llm"
将相同字段名称的多个值自动转换为数组@. @%
文件上传请求在 v\ 2.3.0) 中 @ (NEW
单个文件上传@ : @%
curl -X POST http://localhost:5000/api/mock/photos/upload \
-F "title=My Photo" \
-F "description=Beautiful sunset" \
-F "[email protected]"
带有窗体数据的多个文件@: @%
curl -X POST http://localhost:5000/api/mock/documents/bulk \
-F "title=Multiple uploads" \
-F "[email protected]" \
-F "[email protected]"
文件上传如何工作@ : @
- 文件内容是 通过 {8}KB 缓冲流 和 倾销 @(#% 没有存储在记忆中@)}
- 只保留元数据@ : @ filename @ MS K1} 内容类型 @ MPK2 @ size @ , 字节读取
- LLLM 接收文件元数据并生成适当响应
- 大型文件的内存@- @ safe
实例响应@:
{
"message": "Files uploaded successfully",
"uploads": [
{
"fieldName": "image",
"fileName": "photo.jpg",
"contentType": "image/jpeg",
"size": 524288,
"processed": true
}
]
}
在 v2.3.0) 中的深度路径内嵌@ (NEW @
复杂嵌套路径@: @%
curl "http://localhost:5000/api/mock/v1/api/products/electronics/computers/laptops/gaming/high-end/2024/details?brand=Dell&model=XPS15"
LLM 将所有路径段和查询参数整合为现实的响应生成元件@.在路径深度上没有实际限制 @.
在 v1.5.0) 中以 API 为背景 @ (NEW
使用环境来保持多个相关请求的一致性@: @%
# Step 1: Create a user
curl "http://localhost:5000/api/mock/users?context=checkout-flow"
# Step 2: Create order for that user (LLM references user from context)
curl "http://localhost:5000/api/mock/orders?context=checkout-flow"
# Step 3: Add payment (LLM references both user and order)
curl "http://localhost:5000/api/mock/payments?context=checkout-flow"
在同一背景下,每项请求都看到先前的要求:确保一致的ID@, @most_,和数据关系=.}适合多端的 MSSK4}#-_step工作流程 < !}见 AIPE 背景情况指南 用于完整示例@. @%
带有形状控制
curl -X POST http://localhost:5000/api/mock/orders \
-H "X-Response-Shape: {\"orderId\":\"string\",\"total\":0.0,\"items\":[{\"sku\":\"string\",\"qty\":0}]}" \
-H "Content-Type: application/json" \
-d '{"customerId":"cus_123"}'
LLM 生成与您精确的形状规格匹配的数据@.
串流@( @SSE @-}服务器 @MS K2事件=)}
SSE 流出是 AST API 的一部分 @ - @ 只是在绘制端点@ MS K1 时使它能够进行 。
// SSE streaming is automatically available at /api/mock/stream/**
app.MapLLMockApi("/api/mock", includeStreaming: true);
用法@: @%
curl -N http://localhost:5000/api/mock/stream/products?category=electronics \
-H "Accept: text/event-stream"
返回服务器@- @sent 事件作为 JSON 生成的标记@ -_by @ MS K2}token:}
data: {"chunk":"{","done":false}
data: {"chunk":"\"id\"","done":false}
data: {"chunk":":","done":false}
data: {"chunk":"123","done":false}
...
data: {"content":"{\"id\":123,\"name\":\"Product\"}","done":true,"schema":"{...}"}
JavaScript 示例@: @%
const eventSource = new EventSource('/api/mock/stream/users?limit=5');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.done) {
console.log('Complete:', data.content);
eventSource.close();
} else {
console.log('Chunk:', data.chunk);
}
};
带有形状控件@: @%
curl -N "http://localhost:5000/api/mock/stream/orders?shape=%7B%22id%22%3A0%2C%22items%22%3A%5B%5D%7D"
串流端点支持所有与常规端点@:相同的特性
- 形状控件 @ (query param@ MS K1 header @ MPK2 或body_ )
- JSON Schema支助
- 自定义提示
- 所有 HTTP 方法 @ (GET,POST}, PUT,DELETEMS K4PATCHMPK5
图图QL API
新建于 v1.2.0: 本地图形QL 支持, 使用查询@ - @ 驱动模拟数据生成@ MPK1
LLMock API 包括已建的 @-in GraphQL 端点支持@. 不同于 REST 端點, 您指定了单独的形状\ ,GreatQL查询自然定义了他们期待的准确结构 {-} 查询是形状_.
使用图形QL快速启动
当您映射 LLMock API: 时, 图解QL 端点将自动可用 。
app.MapLLMockApi("/api/mock", includeGraphQL: true); // GraphQL enabled by default
创建图形QL端点 /api/mock/graphql.
基本用法
简单查询@: @%
curl -X POST http://localhost:5000/api/mock/graphql \
-H "Content-Type: application/json" \
-d '{"query": "{ users { id name email role } }"}'
回应::
{
"data": {
"users": [
{ "id": 1, "name": "Alice Johnson", "email": "[email protected]", "role": "admin" },
{ "id": 2, "name": "Bob Smith", "email": "[email protected]", "role": "user" }
]
}
}
随变量
curl -X POST http://localhost:5000/api/mock/graphql \
-H "Content-Type: application/json" \
-d '{
"query": "query GetUser($userId: ID!) { user(id: $userId) { id name email } }",
"variables": { "userId": "12345" },
"operationName": "GetUser"
}'
内嵌查询
图形QL'+%s 用嵌套数据闪烁电源@:_ @
{
company {
name
employees {
id
firstName
lastName
department {
name
location
}
projects {
id
title
status
milestones {
title
dueDate
completed
}
}
}
}
}
LLM 生成符合您精确查询结构的切合实际的数据 *\ - 包括所有嵌套关系}.\ {
JavaScript 客户端示例
async function fetchGraphQL(query, variables = {}) {
const response = await fetch('/api/mock/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query, variables })
});
const result = await response.json();
if (result.errors) {
console.error('GraphQL errors:', result.errors);
}
return result.data;
}
// Usage
const data = await fetchGraphQL(`
query GetProducts($category: String) {
products(category: $category) {
id
name
price
inStock
reviews {
rating
comment
}
}
}
`, { category: 'electronics' });
错误处理
图解QL 错误以标准格式返回@: @%
{
"data": null,
"errors": [
{
"message": "Invalid GraphQL request format",
"extensions": {
"code": "INTERNAL_SERVER_ERROR"
}
}
]
}
如何运作
- 解析请求: 解析圖表QL 查詢@,}變數{,} 與操作名稱
- 构建提示: 将查询结构发送到LLM, 并附有生成匹配数据的指示
- 生成数据:LLM 创建符合查询字段的现实数据
- 总结回应\ : 返回数据以图解QL 格式@:
{ "data": {...} }
关键优点
- 无形状指定: 图形QL 查询定义结构
- 安全类型:查询明确请求字段名称
- 连接关系:对复合的自然支持,嵌套的数据结构
- 标准格式: 與任何圖形QL 客戶端庫一起工作
- 现实数据:LLM为每个字段生成符合具体情况的数据
测试图图QL
包括的用途 LLMApi.http 包含 @ 5} 已就绪@ MS K1 @to @ MPK2_ 使用图解QL 示例@ OMK3
- 简单用户查询
- 有变量查询
- 带有数组的嵌套字段
- E- 商业产品目录
- 复杂的组织数据
见 LLMApi.http 中的图形QL 示例 完整工作示例@.
图图QL配置
标数限制和示范选择
图解QL 响应可能随着深嵌入查询而变大@. 以防止 JSon 脱轨错误 @, 配置 GraphQLMaxTokens 选项@: @%
{
"MockLlmApi": {
"GraphQLMaxTokens": 300 // Recommended: 200-300 for reliability
}
}
调巧限制指南@: @%
| 模擬 | 推荐的 Max Tokens @ | 注MS K3 | |
|---|---|---|---|
| {\fn方正准圆简体\fs12\1cHC9ECC4}模范 速度和复杂程度的最佳平衡 | |||
| 毫升 :7b *M | 300-500 Handles 嵌套结构井然有序 * | ||
| {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我 @ | @ @ 200-300 @ @ * | } 保持简单查询@ | @ |
| 小型 仅使用浅质查询@ | @ |
为什么更低是更好 :
- 迅速优先处理事项 正确度超过长度
- 下限迫使LLM生成更简单,的完整JSON
- 高限风险漏网反应 @(invalid JSON)
- 如果您从 LLM " 中看到“"” Invalid JSON, 错误@, 缩小图形QLmaxTokens
用于复杂内嵌查询@: @%
- 使用更大的模型 @ (llm@ MS K1_ model @ MPK2 mistral}:7b)
- 将图形QLmaxTokens 增加到 @ 500-1000 @%
- 保留小数组大小@ (2}项目以默认为最大值 @ MS K1
- 监测短时警告的日志
复杂查询的示例配置 @:
{
"MockLlmApi": {
"ModelName": "llm-model", // Larger model
"GraphQLMaxTokens": 800, // Higher limit for nested data
"Temperature": 1.2
}
}
时间数据流
LLMock API 包括为连续的 @, real\ -}时间模拟数据生成而提供的可选信号支持@.}这对“:”来说是完美的
- 需要实时更新的仪表板原型
- 测试实时 - @ time UI 组件
- 含有不断变化的数据的演示
- WebSocket@/ @SignalR 集成测试
以信号R快速启动
信号R 独立工作@- @ 您不需要 AST API 端点来使用 SignalR 串流@ . @ t
1. 最小信号R- 仅设置@:
using mostlylucid.mockllmapi;
var builder = WebApplication.CreateBuilder(args);
// Add SignalR services (no REST API needed!)
builder.Services.AddLLMockSignalR(builder.Configuration);
var app = builder.Build();
app.UseRouting();
// Map SignalR hub and management endpoints
app.MapLLMockSignalR("/hub/mock", "/api/mock");
app.Run();
加入API,
如果您也想要 REST API 端点@,}添加这些线条 @:
// Add core LLMock API services (optional)
builder.Services.AddLLMockApi(builder.Configuration);
// Map REST API endpoints (optional)
app.MapLLMockApi("/api/mock", includeStreaming: true);
@ 2._ 配置在 Appings@ MS K1json_ :}
{
"MockLlmApi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"SignalRPushIntervalMs": 5000,
"HubContexts": [
{
"Name": "weather",
"Description": "Weather data with temperature, condition, humidity, and wind speed"
},
{
"Name": "stocks",
"Description": "Stock market data with symbol, current price, change percentage, and trading volume"
}
]
}
}
从客户端连接@: @% 1
// Using @microsoft/signalr
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hub/mock")
.withAutomaticReconnect()
.build();
// Subscribe to a context
connection.on("DataUpdate", (message) => {
console.log(`${message.context}:`, message.data);
// message.data contains generated JSON matching the shape
// message.timestamp is unix timestamp in ms
});
await connection.start();
await connection.invoke("SubscribeToContext", "weather");
枢纽上下文配置
每个中心环境模拟完整的 API 请求,并不断生成数据@:
{
"Name": "orders", // Context name (SignalR group identifier)
"Description": "Order data..." // Plain English description (LLM generates JSON from this)
// Optional:
// "IsActive": true, // Start in active/stopped state (default: true)
// "Shape": "{...}", // Explicit JSON shape or JSON Schema
// "IsJsonSchema": false // Auto-detected if not specified
}
使用普通英文描述
让 LLM 自动生成合适的 JSON 结构@ : @
{
"Name": "sensors",
"Description": "IoT sensor data with device ID, temperature, humidity, battery level, and last reading timestamp"
}
LLM 从您的描述中自动生成一个合适的 JSON 方案@ - @ 不需要手动形状@ MPK1
动态环境创造
使用管理 API: 创建和管理运行时的信号R 背景
创建上下文
POST /api/mock/contexts
Content-Type: application/json
{
"name": "crypto",
"description": "Cryptocurrency prices with symbol, USD price, 24h change percentage, and market cap"
}
回应::
{
"message": "Context 'crypto' registered successfully",
"context": {
"name": "crypto",
"description": "Cryptocurrency prices...",
"method": "GET",
"path": "/crypto",
"shape": "{...generated JSON schema...}",
"isJsonSchema": true
}
}
列出所有上下文
GET /api/mock/contexts
回应::
{
"contexts": [
{
"name": "weather",
"description": "Realistic weather data with temperature, conditions, humidity, and wind speed for a single location",
"method": "GET",
"path": "/weather/current",
"shape": "{...}"
},
{
"name": "crypto",
"description": "Cryptocurrency prices...",
"shape": "{...}"
}
],
"count": 2
}
注意@ : @ 在 Appings MS K1} 中配置的列表端点环境与运行时任何动态创建的背景合并, 即使这些背景尚未被动态注册@ MPK3} 也包含来自应用程序的描述 。
获取具体上下文
GET /api/mock/contexts/weather
回应::
{
"name": "weather",
"method": "GET",
"path": "/weather/current",
"shape": "{\"temperature\":0,\"condition\":\"string\"}",
"isJsonSchema": false
}
删除上下文
DELETE /api/mock/contexts/crypto
回应::
{
"message": "Context 'crypto' deleted successfully"
}
开始上下文 @ ( @ 恢复数据生成@ MS K1
POST /api/mock/contexts/crypto/start
回应::
{
"message": "Context 'crypto' started successfully"
}
启动为已停止的上下文生成数据而不影响连接客户端@. @%
停止上下文 @ ( @ pause data Digestation@ MS K1
POST /api/mock/contexts/crypto/stop
回应::
{
"message": "Context 'crypto' stopped successfully"
}
停止生成新数据, 但保留已注册的上下文@ . @ 客户端仍然连接, 但在重新开始前没有收到更新@ MPK1} n
完整客户端示例
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@microsoft/[email protected]/dist/browser/signalr.min.js"></script>
</head>
<body>
<h1>Live Weather Data</h1>
<div id="weather-data"></div>
<script>
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hub/mock")
.withAutomaticReconnect()
.build();
connection.on("DataUpdate", (message) => {
if (message.context === "weather") {
const weatherDiv = document.getElementById("weather-data");
weatherDiv.innerHTML = `
<h2>Current Weather</h2>
<p>Temperature: ${message.data.temperature}°F</p>
<p>Condition: ${message.data.condition}</p>
<p>Humidity: ${message.data.humidity}%</p>
<p>Updated: ${new Date(message.timestamp).toLocaleTimeString()}</p>
`;
}
});
connection.start()
.then(() => {
console.log("Connected to SignalR hub");
return connection.invoke("SubscribeToContext", "weather");
})
.then(() => {
console.log("Subscribed to weather context");
})
.catch(err => console.error(err));
</script>
</body>
</html>
从 UI 创建动态背景
async function createDynamicContext() {
// Create the context
const response = await fetch("/api/mock/contexts", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
name: "stocks",
description: "Stock market data with ticker symbol, current price, daily change percentage, and trading volume"
})
});
const result = await response.json();
console.log("Context created:", result.context);
// Subscribe to receive data
await connection.invoke("SubscribeToContext", "stocks");
console.log("Now receiving live stock data!");
}
信号中枢方法
缩略 MockLlmHub 支持以下方法
订阅Tocontext(string 上下文@)
- 要求客户按特定环境接收数据更新
- 客户会收到
DataUpdate带有生成数据的事件 - 新建于 v1.1.0: 自动递增上下文@' @%s 连接计数
取消订阅从 Context (\ 字符串上下文@ MS K1\ {
- 从上下文中取消客户端订阅
- 客户将不再收到这方面的最新情况
- 新建于 v1.1.0: 自动减少上下文@' @%s 连接计数
客户收到的事件@:
数据更新 “-”包含生成的模拟数据
{
context: "weather", // Context name
method: "GET", // Simulated HTTP method
path: "/weather/current", // Simulated path
timestamp: 1699564820000, // Unix timestamp (ms)
data: { // Generated JSON matching the shape
temperature: 72,
condition: "Sunny",
humidity: 45,
windSpeed: 8
}
}
附订 -确认订阅
{
context: "weather",
message: "Subscribed to weather"
}
未订阅 -}确认未订阅
{
context: "weather",
message: "Unsubscribed from weather"
}
配置选项
{
"MockLlmApi": {
"SignalRPushIntervalMs": 5000, // Interval between data pushes (ms)
"HubContexts": [...] // Array of pre-configured contexts
}
}
JSON Schema支助
中心环境支持简单的 JSON 形状和完整的 JSonson Schema:}
简单形状@ : @
{
"Name": "users",
"Shape": "{\"id\":0,\"name\":\"string\",\"email\":\"string\"}"
}
杰森·斯赫马 :
{
"Name": "products",
"Shape": "{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"number\"},\"name\":{\"type\":\"string\"},\"price\":{\"type\":\"number\"}},\"required\":[\"id\",\"name\",\"price\"]}",
"IsJsonSchema": true
}
系统自动发现 JSON Schema, 通过查找 $schema, type,或 properties 字段@. @%
建筑结构架构
graph TD
Client[SignalR Client] -->|Subscribe| Hub[MockLlmHub]
Hub -->|Join Group| Group[SignalR Group]
BG[Background Service] -->|Generate Data| LLM[Ollama LLM]
LLM -->|JSON Response| BG
BG -->|Push Data| Group
Group -->|DataUpdate Event| Client
API[Management API] -->|CRUD| Manager[DynamicHubContextManager]
Manager -->|Register/Unregister| BG
构件#:
- 莫克Lllm Hub: 信号中心处理客户连接和订阅
- MockData 背景服务: 托管服务持续生成数据
- 动态 HubContext 管理器:Tread-安全管理器用于运行时间背景登记
- HECContextConfig 计算机服务器 每一个数据上下文的配置模型
使用案例
1. 刀板原型
// Subscribe to multiple data sources
await connection.invoke("SubscribeToContext", "sales");
await connection.invoke("SubscribeToContext", "traffic");
await connection.invoke("SubscribeToContext", "alerts");
// Now receiving live updates for all three!
2.IoT模拟
{
"Name": "sensors",
"Description": "IoT temperature sensors with device ID, current temperature, battery percentage, and signal strength",
"Path": "/iot/sensors"
}
3.财务数据
{
"Name": "trading",
"Description": "Real-time stock trades with timestamp, symbol, price, volume, and buyer/seller IDs",
"Path": "/trading/live"
}
4. 博彩首板
{
"Name": "leaderboard",
"Description": "Gaming leaderboard with player name, score, rank, level, and country",
"Path": "/game/leaderboard"
}
背景生命周期管理
新建于 v1.1.0: 对信号R上下文的全寿命周期控制, 实时@ - @ timestative status track *\ !
每种上下文都有以下属性:
- 感性{:上下文是否產生了數據 (_default} : true}MPK3
- 连接数目前连接的客户端数量 @(_auto-}跟踪@)}
上下文可以在两个状态中显示@: @%
- 活动中: 背景服务 每次生成新数据
SignalRPushIntervalMs@(_default@:} @ 5秒 @ MPK3# - 已停止: 上下文仍然已注册@,客户端保持连接 @,}但是没有生成新数据
密钥功能@: @% 1
- 启动/ @ stop 环境而不断开客户端
- 实时连接计数跟踪
- 显示活动状态的状态徽章@/ @% checked state
- 重复背景预防
- 用户界面中自动显示 Appings @.}json 的上下文
SignalR: 响应缓存 新建于 v1.1.0: 智能缓存减少LLM负载并改进一致性@!
- 批次预填@ :_ generates @ I5-10} 即时回覆@ MS K2} @ configifyable 通过
MaxCachePerKey) - @ -_Context 队列@: 每一个上下文都有自己的缓存 pre@- 生成的响应
- 重新填充背景: 自动重新填充缓存, 当它跌落到 < MS K1\ 容量以下时 。
- 智能日程安排: 尽量减少LLM电话,同时保持数据更新
这大大降低了高- 频率环境的LLM负载@,}特别是多个客户端的LM=. *}
工作流量:
# Create a context
POST /api/mock/contexts
{ "name": "metrics", "description": "Server metrics" }
# Stop data generation (clients remain connected)
POST /api/mock/contexts/metrics/stop
# Resume data generation
POST /api/mock/contexts/metrics/start
# Remove context entirely
DELETE /api/mock/contexts/metrics
OpenAPI /Swagger 模型生成
新功能@ : @ 从 OpenAPI/Swagger 规格@!点自动生成模拟端点到任何 OpentAPI {3.0/}_%Swagger\ 2.0spec @(URL 或文件MS K5,图书馆将为所有定义的操作创建模拟端點=.}
用 OpenAPI 快速启动
dotnet add package mostlylucid.mockllmapi
程序#._cs}:
using mostlylucid.mockllmapi;
var builder = WebApplication.CreateBuilder(args);
// Add OpenAPI mock services
builder.Services.AddLLMockOpenApi(builder.Configuration);
var app = builder.Build();
app.UseRouting();
// Map OpenAPI-based mock endpoints
app.MapLLMockOpenApi();
app.Run();
apperings .json:
{
"MockLlmApi": {
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "ministral-3:3b",
"Temperature": 1.2,
"OpenApiSpecs": [
{
"Name": "petstore",
"Source": "https://petstore3.swagger.io/api/v3/openapi.json",
"BasePath": "/petstore",
"EnableStreaming": false
},
{
"Name": "myapi",
"Source": "./specs/my-api.yaml",
"BasePath": "/api/v1"
}
]
}
}
您的 OpenAPI 光谱中的所有端点现在都可用智能 LLM @ -_ power makes@.}提供。
如何运作
- 标注加载: 装入来自 URL 或本地文件的 OpenAPI speces *\ MS K1 JSON 或 YAML *
- Schema 转换: 将 OpenAPI 方案转换为 JSON 形状模板
- 终点绘图: 自动将所有操作映射为 ASP.NET 核心端点
- LLM 产生:使用LLM生成符合模型的切合实际模拟数据。
- 路径图参数: 处理路径参数类似
/users/{id}自动自动
配置选项
每个 OpenAPI 样板支持这些配置选项@: @%
| Q 属性 @ | Q 类型@ | Q 描述 * | } |
|---|---|---|---|
Name |
字符串 @ | }% 1}% 2required@ MS K3_ | |
Source |
}字符串 @ | } URL 或者 OpenAPI spec 的文件路径@(})}\ MS K4 | |
BasePath |
字符串 @ | 覆盖基准路径@(default @MS K3使用spec's servers[0].url) |
|
EnableStreaming |
_Bool @ | %Add /stream SSE 串流的后缀 @ ( @ default@ MS K1_ 假的 @ MPK2} @ I |
|
IncludeTags |
字符串[@ ] @ @ I | } 只产生这些标记的端点@ MS K2 @ | |
ExcludeTags |
字符串[以这些标记跳过端点 @ | @ | |
IncludePaths |
字符串[] @ MS K1 仅生成这些路径@(}支持这样的通配符 /users/*) |
||
ExcludePaths |
字符串[@] @ @ | @ 跳过这些路径 @ I(# 支持通配符@ MS K3 @ @ * | } |
高级配置示例
由标签“ :” 过滤
{
"Name": "petstore",
"Source": "https://petstore3.swagger.io/api/v3/openapi.json",
"IncludeTags": ["pet", "store"]
}
由路径过滤@: @%
{
"Name": "api",
"Source": "./specs/api.yaml",
"IncludePaths": ["/users/*", "/products/*"],
"ExcludePaths": ["/admin/*"]
}
启用串流@ : @ {
{
"Name": "api",
"Source": "./specs/api.yaml",
"BasePath": "/api",
"EnableStreaming": true
}
OpenAPI 模拟试验
根据此 OpenAPI spec 配置 < :\ } @ action
{
"Name": "petstore",
"Source": "./specs/petstore.json",
"BasePath": "/petstore"
}
以及一个定义 GET /pet/{petId} 返回 Pet 对象@, 您可以测试 @:
# Get a pet by ID
curl http://localhost:5116/petstore/pet/123
# Response (generated by LLM based on Pet schema):
{
"id": 123,
"name": "Fluffy",
"category": {
"id": 1,
"name": "Cats"
},
"photoUrls": ["https://example.com/fluffy.jpg"],
"tags": [
{"id": 1, "name": "cute"},
{"id": 2, "name": "playful"}
],
"status": "available"
}
模块使用
OpenAPI 模拟工作独立于 REST/GraphQLMS K1SignalR:
// Just OpenAPI mocks
builder.Services.AddLLMockOpenApi(builder.Configuration);
app.MapLLMockOpenApi();
// Or combine with other features
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockOpenApi(builder.Configuration);
app.MapLLMockRest("/api/mock");
app.MapLLMockOpenApi();
支持的相框格式
- OpenAPI @ 3.0 @% (JSON或YAMLO)
- OpenAPI @ 3.1 @% (JSON或YAMLO)
- 斯瓦格 2.0 (JSON或YAMLO)
密钥特征
- 自动端点生成: 所有路径和操作都变成假端点
- Schema - 驱动器: 来自 OpenAPI 响应方案的反应形状
- 路径图参数: 处理器
/users/{id},/posts/{postId}/comments/{commentId}# ,#等等 @.# - 多个特性: 同时装入并挂载多个 API specs
- 智能过滤: 包含 MS K1 @ exclate 操作, 按标签或路径进行
- 串流支持: 用于任何终点的 SSE 流
- LLM- 发声: 生成符合实际的\ , 适合每个方案的不同数据
使用案例
- API=-第一开发@ :_ 在後端介面準備好之前, 开始根据 ppec 进行編碼@ info
- 前端原型正在建设 API 时开发 UID
- 集成测试: 测试客户代码, 没有实际 API 依赖性
- 演示环境: 显示应用程序, 无法访问生产 API
- 合同测试: 校验客户端正确处理所有方案变换
- 装入测试: 生成规模化的现实测试数据
限制
- 目前只支持响应方案@ ( @ 请求校验未强制进行\ )
- 安全计划被忽略@( @ no re验证要求@ )\
- 仅支持响应的应用程序%#/}json 内容类型
- 路径参数值未对照 schema 限制校验
OpenAPP 管理测试
包括 management.http 文件包含所有管理端点的综合性示例@ : @%
规格管理:
- 从 URL\ (Petestore@,}( GitHub API_,}等) 装入 prepe
- 从本地文件装入参数
- 原 JSON/YAML 的负载规格
- 列出所有已装入的规格
- 用端点来检查细节
- 从源代码重新装入 pecrea {(} refrest
- 删除参数
端点测试:
- 获得带有路径参数的测试端点
- 测试 POST/PUTMPK1DELETE 端点
- 带有查询参数的测试端点
- 测试序列多端点
高级工作流程:
- 同时同时加载多个参数
- 比较 OpenAPI 模型与常规模拟
- 批次业务
- 处理示例出错
来自管理层的示例@. @http:
### Load Petstore API
POST http://localhost:5116/api/openapi/specs
Content-Type: application/json
{
"name": "petstore",
"source": "https://petstore3.swagger.io/api/v3/openapi.json",
"basePath": "/petstore"
}
### Test an endpoint
POST http://localhost:5116/api/openapi/test
Content-Type: application/json
{
"specName": "petstore",
"path": "/pet/123",
"method": "GET"
}
见完整 管理@. @http 用于 & 20+ @ pready @ -_to @ MS K2@ use example @ MPK3} 文件的“ MSk0% 准备” 文件
演示应用
该软件包包括完整的演示应用程序,带有交互式界面,具有全背景管理功能 =:
Windows 桌面客户端@( @% 1LLMockApiClient/“) — WPF应用”“(In Development )”
发展状况: Windows 桌面客户端目前正在积极开发@. 虽然许多功能是功能性的 @, 某些功能可能不完整或可更改@MS K3 为测试和开发目的使用.
用于与 LLMock API: 互动的完整 WPF 桌面应用程序
功能@: @%
- 仪表板:Real-时间连接状态和系统监测
- 信号Real=-}时间: 创建环境并订阅实时数据流
- SSE 流体: 三种流模式 @(_tokens@,}天体 @MS K3 阵列项 @MSC4
- OpenAPI 管理器@ :_ t从 URL MS K1}JSON, 测试端点的装入值
- gRPC 服务: 上传 @.proto 文件@,}测试 gRPC 方法
- 使用 APP 游戏MPK0交互式HTTP操场测试
- 後端支援: 配置并切换多个后端
- 交通监测器: Live HTTP 请求 */回应记录
- 黑暗/亮主题: 以平稳过渡的方式在主题间切换
文 件 @: LLM 鼠食用精密读取器
完美地适合: 桌面测试工作流程 @,视觉API探索@,开发和调试
Web -基于的演示
信号显示@ ( @/) @ MS K1 real-时间数据流与管理 UI
新建于 v1.1.0: 强化的 3-clunn 版面布局,配有全环境寿命周期管理@!
功能@: @%
- 创建上下文面板: 输入简单的英语描述, 系统产生适当的 JSON 方案
- 活动环境面板:
- 状态徽章所有背景的实时列表 @ ( @ action@ MS K1_ stopped)}
- 启动时自动显示 Appings@ . @ json 上的背景
- 每个上下文的实时连接计数@ label
- ưμ㼯A
- 有关更改的自动-refresh
- 实况数据面板@: real-}时间更新来自订阅背景 {(}每秒<5 秒)}
- JSON 语法强调@ :_ 美丽的黑暗@ MS K1} 主题显示, 带有颜色@ I- 编码元素Name
- 密钥 @ (@ red),}字符串 @ ( @ green @ MPK3_ 数字 @ I( @ oprange+), @ booleans @ MASK6# cyan), @ neasure *()}
- clean , 可读格式, 有正确的时间戳显示
- 没有外部依赖性@ - @ 轻量级已建 *-}in 突出亮度
Quick\ -\ 启动示例@ MS K1 @ -_ 点击按钮, 用于 pre-\configuld situations@ MS K3}
- IOT 传感器“:”温度传感器带有设备 ID,}读数 @,}电池百分比
- 股票市场:Real-时间价格与 cleerMS K2price}价格{,改变百分比},音量
- E- 商业命令: 使用 ID @, 客户@,}项目阵列 *,}状态=, 总计
- 服务器计量数: 使用主机名@ MS K1 CPU}, memory, 磁盘 @,连接的监测数据
- 赌博主导板:玩家状态, 名称为@,计分 @, 排名=, 等级=%,国家
完美地适合: Dashboards @,现场监测@ , IoT 模拟@ I, real @ MS K3时间 feedQ,原型
SSE 流动演示@( @%/Streaming进步的杰森一代
新建于 v1.1.0: Quick- 启动用于即时流的示例按钮@ !
功能@: @%
- 配置 HTTP 方法@,路径 @ ,和可选 JSON 形状
- 注意 JSON 正在生成的标牌@- @ by @ - @ token 在真实时间 @-}
- 活统计=:块计数@,}持续时间_,数据大小
- 连接状况指标
Quick\ -\ 启动示例@ MS K1 @ -_ 点击按钮, 用于 {4} 串流假想@ MS K2
- 用户列表: 使用 ID @, name_, 电子邮件的用户对象
- 产品目录“:”产品库存,包括SKU, 名称“, 价格$@, 存货状况”。
- 顺序细节:Nessed订单,配有客户信息和项目阵列
- 气象数据@:当前温度条件下的 ,湿度}#,风速
完美地适合: 观测 LLM 生成元件@,调试形状 @,理解流动行为=,测试 SSE
OpenAPI 管理器 Demo @ (/OpenApi) MS K1 动态电闪烁加载 *&测试
新功能@ : @ 互动的 OpenAPI 规格管理与实时@- @time 更新@ !
功能@: @%
- 动态装入镜框*% 1\ :} 来自 URL 或者直接在浏览器中粘贴原始 JSON@/ @% YAML
- 实时更新: 信号R- 所有动作的实时通知@ info: whatsthis
- 端点发现: 自动从常规中提取所有操作
- Inç-Browser 测试@ : 测试任何端点, 请点击 { ,} 见 LLM- 生成的模拟数据
- 生命周期管理@ :_ load MS K1} 重新装入,} 删除设置而不重新启动服务器
- 美丽的UI: 彩色 MSQ1 coded HTTP 方法@, 语法- 突顯的 JSON 回應
- 状态状况: 现场指示显示信号连接状态
- 综合帮助: 内嵌文档和示例 URL
Quick\ -\ 启动示例@ MS K1
- 从 URL 装入宠物目录 API
- 粘贴自定义 OpenAPI JSON
- 查看参数中的所有端点
- 直接在页面中测试端点
- 见LLM产生的现实模拟数据
完美地适合: API prototyping , 前端开发@,合同测试 @,spec 验证_,演示
运行演示文稿@ : @
cd LLMApi
dotnet run
导航到:
http://localhost:5116-SignalR real-时间数据流与管理 UIhttp://localhost:5116/Streaming-=SSE 进步一代http://localhost:5116/OpenApi- OpenAPI 带有动态装入功能的 POPE 管理器
所有演示都包含 @ : @
- 综合内线文件
- 交互式快速快捷@ - @ chart example
- 整合代码片段
- 时间状况指标
- 全面环境整个生命周期控制
高级特征
Schema回声(Shape)出口
您可以选用中间器件回响 JSON 形状@/schema 用于生成模拟响应 @.}
設定@: @% 1
- 选项@ :} 包含ShapeInsponse @ MS K1 @ bool @ MPK2 默认假@ I)
- 添加查询参数包括 Schema @=@ true @ (_ or @MS K4}
- 仅当提供形状和大小@≤}{4000~chars=)}时,才发出信头*:X-Response-Schema _(}
- SSE 最后的事件在启用时包含一个 schema 字段
例如 @:
- 启用全球 & ( @ appants@ MS K1_ json @ ):}
{
"mostlylucid.mockllmapi": {
"IncludeShapeInResponse": true
}
}
- 启用每个请求@ ( @ overrides config_ ):}
curl "http://localhost:5000/api/mock/users?shape=%7B%22id%22%3A0%2C%22name%22%3A%22string%22%7D&includeSchema=true"
回应包括标题@: @#
X-Response-Schema: {"id":0,"name":"string"}
- Schema 字段
...
data: {"content":"{full json}","done":true,"schema":{"id":0,"name":"string"}}
注::
- 如果没有提供形状, 则不添加页眉
- 非常大的形状 @ (> @ I4000chars)没有添加到信头中以避免运输问题@,,但正常响应继续
使用案例@:
- 客户端@- @%side typeScript 类型生成
- API文件和计划验证
- 调试形状分析
- 运行时间验证
自定义提示模板
以您的@ : @ 覆盖默认提示
{
"mostlylucid.mockllmapi": {
"CustomPromptTemplate": "Generate mock data for {method} {path}. Body: {body}. Use seed: {randomSeed}"
}
}
可用的占位符@: @%
{method}-+HTTP方法 @(+GET+,+POST+,+等#.)@{path}- 全请求路径, 有查询字符串{body}- 请求机构{randomSeed}“-”生成随机种子“(GUID}){timestamp}-Unix 时间戳{shape}- 形状规格 @(if provided)
模拟错误
用全面的错误模拟能力测试您的客户端@ '}%s 处理错误时出错@ .} @ action
配置错误的四种方式 ( 优先秩序 MS K1
- 查询参数 ( 最高位 MS K1
重要:查询参数值 URL=-encoded.空格 %20, & 成为 %26, : 成为 %3A# ,#等等 @.#
# Properly encoded (spaces as %20)
curl "http://localhost:5000/api/mock/users?error=404&errorMessage=Not%20found&errorDetails=User%20does%20not%20exist"
# More complex example with special characters
# Decoded: "Invalid input: email & phone required"
curl "http://localhost:5000/api/mock/users?error=400&errorMessage=Invalid%20input%3A%20email%20%26%20phone%20required"
- HTTP 页眉:
curl -H "X-Error-Code: 401" \
-H "X-Error-Message: Unauthorized" \
-H "X-Error-Details: Token expired" \
http://localhost:5000/api/mock/users
- 形状 JSON (使用
$error属性@): @%
# Simple: just status code
curl "http://localhost:5000/api/mock/users?shape=%7B%22%24error%22%3A404%7D"
# Complex: with message and details
curl "http://localhost:5000/api/mock/users?shape=%7B%22%24error%22%3A%7B%22code%22%3A422%2C%22message%22%3A%22Validation%20failed%22%2C%22details%22%3A%22Email%20invalid%22%7D%7D"
- 请求机构 (使用
error属性@): @%
curl -X POST http://localhost:5000/api/mock/users \
-H "Content-Type: application/json" \
-d '{
"error": {
"code": 409,
"message": "Conflict",
"details": "User already exists"
}
}'
错误反应格式@ : @
常规/ @ stream 端点@ :
{
"error": {
"code": 404,
"message": "Not Found",
"details": "Optional additional context"
}
}
图中QL 终点@: @%
{
"data": null,
"errors": [
{
"message": "Not Found",
"extensions": {
"code": 404,
"details": "Optional additional context"
}
}
]
}
信号R 模拟错误@: @%
用于测试真实@ - @ 时间错误处理@ MPK1} 配置在 SignalR 语境中的设置错误
{
"HubContexts": [
{
"Name": "errors",
"Description": "Error simulation stream",
"ErrorConfig": {
"Code": 500,
"Message": "Server error",
"Details": "Database connection lost"
}
}
]
}
或动态通过管理 API:
curl -X POST http://localhost:5000/api/management/contexts \
-H "Content-Type: application/json" \
-d '{
"name": "errors",
"description": "Test errors",
"error": 503,
"errorMessage": "Service unavailable",
"errorDetails": "Maintenance in progress"
}'
支持的 HTTP 状态代码@:
软件包包括通用 HTTP 状态代码的默认信息@:
- 4xx客户端错误: @400 (#Bad请求}), @MS K4_无授权的), @403 @MSKO8 @Forbidden), @ @ @MSC10}没有找到),{405♫(_Methodo 不允许), MS K16Q(}要求超时=),{\409 –(冲突~),}422(无法处理的实体),□429(多份請求
- 5%xx 服务器错误: MS K1 I( 内部服务器错误 ), MPK4 未执行),
自定义信件和细节推翻默认值@. @%
使用案例@:
- 测试客户端重试逻辑和指数回落
- 在 UI 中校验错误信件显示
- 测试认证@/}授权流
- 模拟限制费率假设情景
- 实际优效退化模式
- 测试错误记录和监测
见见 LLMApi/LLMApi.http 用于所有错误模拟方法的综合示例@. @%
多个实例
挂载多个模拟API, 配置不同@ : @
// Development data with high randomness
builder.Services.Addmostlylucid.mockllmapi("Dev", options =>
{
options.Temperature = 1.5;
options.ModelName = "llm-model";
});
// Stable test data
builder.Services.Addmostlylucid.mockllmapi("Test", options =>
{
options.Temperature = 0.3;
options.ModelName = "llm-model";
});
app.Mapmostlylucid.mockllmapi("/api/dev");
app.Mapmostlylucid.mockllmapi("/api/test");
形状指定
控制反应结构的三种方式
- 页眉 (_推荐}):
X-Response-Shape: {"field":"type"} - 查询参数:
?shape=%7B%22field%22%3A%22type%22%7D-=YTET -伊甸园字幕组=- 翻译: - 机构字段:
{"shape": {...}, "actualData": ...}
通过形状缓抓多个响应
您可以在形状对象中添加一个特殊字段@:} @ "$cache":N.
- 缓存密钥来自 HTTP 方法@+路径 @ (}包括查询{)_ _+} 洗涤的形状 使用 system(Hashing XXHash}64.})}
- 从 LLM 到 N 的响应预发自 < lLM > , 并存储在 < -\ @ memory {(} 由 MaxCachePerKey 在 options\ MS K2 默认@5).} 中
- 之后的“-”和“;”请求由耗竭的队列@MSK1满足,但用尽后将自动预发新批次的N=%.}
- 流端点没有缓存@. @%
实例示例例子
信头形状@: @% 1 -=YTET -伊甸园字幕组=- 翻译:[{"sku}":"sstring ♪","QQQty":0}]}♪
物体形状@: @% { @"#shape@":} {# "$卡其 NSK1 MS K2 @"@invoiceId_":} @ "string%",# " 客户 MS K1 @"}":}{"#Sstring 200}",}♫"name":}}}"%sstring}MSC10} ~},}{ -=YTET -伊甸园字幕组=- 翻译: [ { @" @sku":}("{string",}) ("QQQTY":} *0,}♪"#price@":} <0.0# @"#总和#":0.0# } }
查询参数@( @URL-_encoded}): 2%2C%22使用者 MS K6A %5B%7B
配置配置
- MaxCachePerKey @(int, 默认@5): 上限为“"$cache{"}每个按鍵要求的号码=%.}
注通注注注小小小大小小音小小的小小小备小小牙小小注释小小书小小注注。注注 注注注
- @ "$ @ cache@ MS K1} 在发送到 LLM. 之前, 从形状中删除提示@ title
- 如果忽略了“"$çácache"}”或“{0, 请求行为与 @ (_no caching@ MS K4}{Warmup).}之前一样
- 将缓存变量保存在 @ - memory 中, 用于应用程序使用寿命@ MS K1} 重新启动可清除缓存@ OMK2
测试
测试通用软件包@(NEW!)
多数情况下,.=mockllmapi=.测试 @-_Nuget company Nuget 软件包使得使用模拟API的测试更加容易 #!#
dotnet add package mostlylucid.mockllmapi.Testing
快速示例@: @%
using mostlylucid.mockllmapi.Testing;
// Create a configured HttpClient for testing
var client = HttpClientExtensions.CreateMockLlmClient(
baseAddress: "http://localhost:5116",
pathPattern: "/users",
configure: endpoint => endpoint
.WithShape(new { id = 0, name = "", email = "" })
.WithCache(5)
.WithError(404) // Simulate errors easily
);
// Use in your tests
var response = await client.GetAsync("/users");
var users = await response.Content.ReadFromJsonAsync<User[]>();
密钥功能@: @% 1
- APIPQ: 简单配置
WithShape(),WithError(),WithCache()# ,#等等 @.# - HttpPClient 整合:无缝工作与
HttpClient和IHttpClientFactory - 多端点Q: 配置不同路径的不同行为
- 模拟错误: 不同状态代码的测试错误处理
- 串流支持: 测试 SSE 流端点
- 依赖性注射: 内建- 支持打字和命名客户
配置示例@:
// Multiple endpoints with different configurations
var client = HttpClientExtensions.CreateMockLlmClient(
"http://localhost:5116",
configure: handler => handler
.ForEndpoint("/users", config => config
.WithShape(new { id = 0, name = "", email = "" })
.WithCache(10))
.ForEndpoint("/posts", config => config
.WithShape(new { id = 0, title = "", content = "" })
.WithStreaming()
.WithSseMode("CompleteObjects"))
.ForEndpoint("/error", config => config
.WithError(500, "Internal server error"))
);
// Dependency Injection support
services.AddMockLlmHttpClient<IUserApiClient>(
baseApiPath: "/api/mock",
configure: handler => handler
.ForEndpoint("/users", config => config.WithShape(...))
);
它如何运作 :
缩略 MockLlmHttpHandler 是 a DelegatingHandler 截取 HTTP 请求并自动通过查询参数和信头应用您的配置,然后转发给模拟 API.+ 这意味着您可以使用真实 HttpClient 声明@. @%
见 README 测试软件包 完整文档和示例
HTTP 文件测试
包括的用途 LLMApi.http 使用:}文件@ MSKO}
- 视觉演播室 @ /_ 骑士 HTTP 用戶端
- VS 代码 REST 客户端扩展
- 任何 HTTP 客户端
单位测试
该项目包括综合单位测试 :
# Run all tests
dotnet test
# Run with detailed output
dotnet test --verbosity detailed
测试范围 @(228测试@, @ @MS K2通过率 @):
- 身体阅读 (prety,JSON 内容}, 窗体: MS K3}文件上传@)
- 窗体正体分析 (single value @,}多重值@, 特殊字符 @MS K3
- 多部分表格数据 (}文件元数据{,}混合字段和文件})}
- JSON 逃跑 (QQQ,反斜,新线MS K3标签{,uncode,emoji)
- 内容提取 (OpenAI 格式 @,复合嵌套 JSON,错误处理@)
- JSON手工建造 (Form data @,数列@,嵌巢结构_)
- 形状提取 (query palm, header}, 体形字段 MS K3 位阶)
- 即时一代 (irdomness, 形状包含@,}串流模式 @)
- 请求大楼 @ ( @ temature@ MS K1 @ model @ MPK2 @ message_ )
- 边缘病例 @( @invalid JSON,}缺少数据 ,#特殊字符@)}
- 集成测试 (full HTTP 工作流程@, form proposations @, file 上传 *,}深路@MS K4
新建于 v2.3.0:
- 表格 BodyHandling 测试@. @cs - 12 体形剖析和JSON构造测试
- JsonHandling 测试 .cs JSON逃脱的JSON测试 , 提取,和边缘病例
- 融合测试 .cs hTTP端点全面测试集成测试框架
见见 {\pos(191,242)}翻译: 完整测试文档和覆盖范围
建筑结构架构
见见 建筑结构概览 高端的-系统图和部件说明*.
详细请求流程
sequenceDiagram
participant C as Client
participant A as LLMApi
participant H as AutoApiHelper
participant O as Ollama
participant M as llm-model
C->>A: GET/POST/PUT/DELETE /api/auto/**
A->>H: Extract context (method, path, body, shape)
H->>H: Generate random seed + timestamp
H->>H: Build prompt with randomness
H-->>A: Prompt + temperature=1.2
A->>O: POST /v1/chat/completions
O->>M: Run inference
M-->>O: Generated JSON
O-->>A: Response
A-->>C: JSON Response
形状控制流程
flowchart TD
Start[Request Arrives] --> CheckQuery{Shape in<br/>Query Param?}
CheckQuery -->|Yes| UseQuery[Use Query Shape]
CheckQuery -->|No| CheckHeader{Shape in<br/>Header?}
CheckHeader -->|Yes| UseHeader[Use Header Shape]
CheckHeader -->|No| CheckBody{Shape in<br/>Body Field?}
CheckBody -->|Yes| UseBody[Use Body Shape]
CheckBody -->|No| NoShape[No Shape Constraint]
UseQuery --> BuildPrompt[Build Prompt]
UseHeader --> BuildPrompt
UseBody --> BuildPrompt
NoShape --> BuildPrompt
BuildPrompt --> AddRandom[Add Random Seed<br/>+ Timestamp]
AddRandom --> SendLLM[Send to LLM]
style UseQuery fill:#4CAF50
style UseHeader fill:#4CAF50
style UseBody fill:#4CAF50
style NoShape fill:#FFC107
项目+:
mostlylucid.mockllmapi:Nuget 软件包库LLMApi: 演示申请LLMApi.Tests: x单位测试套房 @(228测试 @MS K2#%100%通过率@)
为什么使用 mostlucid@. @mockllmapi% ?#
- 快速原型: 前端开发, 不等待后端
- 完成 HTTP 支持: JSON, 窗体*,}文件上传 *-}所有内容类型都包含
- 一致的工作流程: API 环境在多{-} chep procession 中保持现实的关系
- 演示: 显示现实的数据流, 没有硬编码的固定装置
- 测试: 生成边缘病例的多种测试数据 - 或符合上下文的数据
- 记忆@-_#安全:}文件上传 流和倾卸 *-}用 @100}MB=+}文件测试
- API 设计“: 实验,在实施前有反应形状
- 学习学习学习“:” 将LLM纳入“.”NET最低API的例子
- 零保养:}没有数据库,}无状态{,} 没有可维护的模拟数据文件
- 灵活:使用任何组合的 REST, GraphQL,SSE @,信号R},或 OpenAPI 光谱
- 产量*-: MS K1 测试, _100% 通过率,综合文件
构建 NuGet 软件包
cd mostlylucid.mockllmapi
dotnet pack -c Release
软件包将会在 bin/Release/mostlylucid.mockllmapi.{version}.nupkg
捐款
这是一个示范项目, 演示LLM-power 模拟APIsMS K1}请随意叉路和自定义!
驾照许可证
这是免费和无源的软件 发布到公共域@.}看 自由 详细信息或访问 org/unlicense @.@org 中.