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 AI-Article API ASP.NET Core LLM LLMApi mockllmapi Nuget

LLMApi: 模块架构示例

Sunday, 02 November 2025

一. 导言导言 导言 导言 导言

我对LLMApi想要的其中一件关键的事情是 它能够尽可能轻巧地轻量 \ @(}所以只是模拟你想要的Api类型)}和非常容易获得 Intp{;} 这样你就应该能同样轻松得到一切

你可以找到 吉特Hub在这里 所有公共域等 ... *

这是来自 GitHub.的现场直播,

Nuget 元数 Nuget 元数

你可以找到 吉特Hub在这里 所有公共域等 ... *

模块结构示例

新建于 v1.2.0+: 完整模块性 @! 每一个协议@(REST, Streaming}MS K3 圖形QL,SignalRMSKO5 gRPC, OpenAPI}) 现在可以独立添加并绘制

目录目录


向后对齐 \ ( 统一方法)\ {

现有代码继续工作,没有任何改动@: @ @

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Registers ALL services (REST, Streaming, GraphQL)
builder.Services.AddLLMockApi(builder.Configuration);

// Optional: Add SignalR
builder.Services.AddLLMockSignalR(builder.Configuration);

builder.Services.AddRazorPages();

var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();

// Maps ALL endpoints (REST, Streaming, GraphQL) at /api/mock
app.MapLLMockApi("/api/mock", includeStreaming: true, includeGraphQL: true);

// Optional: Map SignalR
app.MapLLMockSignalR("/hub/mock", "/api/mock");

app.Run();

此创建@ : @%

  • /api/mock/** -+REST端点
  • /api/mock/stream/** - SSE 流端点
  • /api/mock/graphql - 图形QL 终点
  • /hub/mock @-_讯号枢纽#(_if添加@)}
  • /api/mock/contexts “-讯号管理 API @( 添加#)

模块式方法

只只保留

完全可以进行简单的REST API模拟,无需额外超载:

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY REST services
builder.Services.AddLLMockRest(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY REST endpoints
app.MapLLMockRest("/api/mock");

app.Run();

此创建@ : @%

  • /api/mock/** 仅 -REST 端点

福利:*

  • 最小记忆足迹
  • 快速启动时间
  • 仅包括常规请求Handler

仅图解QL

适合图形QL-}只允许应用程序@:

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY GraphQL services
builder.Services.AddLLMockGraphQL(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY GraphQL endpoint
app.MapLLMockGraphQL("/api/mock");

app.Run();

此创建@ : @%

  • /api/mock/graphql 仅 -图形QL端点

福利:*

  • 清洁图形QL - @ 仅设置
  • 无不必要的 REST 处理器
  • GraphQL 客户端测试完美

仅串流

适合测试 SSE 流客户端@: @

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY Streaming services
builder.Services.AddLLMockStreaming(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY Streaming endpoints
app.MapLLMockStreaming("/api/mock");

app.Run();

此创建@ : @%

  • /api/mock/stream/** - SSE 只流端点

福利:*

  • 轻量级串流@ - @ 仅设置
  • 完全用于事件源测试
  • 无REST/GraphQL 间接费用

仅信号

时间仪表板原型制作@: @%

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY SignalR services (includes core services automatically)
builder.Services.AddLLMockSignalR(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.SignalRPushIntervalMs = 5000;
});

var app = builder.Build();

app.UseRouting();

// Map ONLY SignalR endpoints
app.MapLLMockSignalR("/hub/mock", "/api/contexts");

app.Run();

此创建@ : @%

  • /hub/mock - 信号枢纽
  • /api/contexts -背景管理API

福利:*

  • 仅在时间设置@ - @ title only setting
  • 没有 HTTP 终端间接费用
  • 适合 WebSock 测试

仅gRPC

适合测试具有动态原型定义的 GRPC 客户端@: @

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register services (gRPC included in AddLLMockApi)
builder.Services.AddLLMockApi(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY gRPC endpoints
app.MapLLMockGrpcManagement("/api/grpc-protos");  // Proto file management
app.MapLLMockGrpc("/api/grpc");                   // gRPC service calls

app.Run();

此创建@ : @%

  • /api/grpc-protos -上传@/管理 @.proto 文件 @MS K3POST}, Get,Delete)
  • /api/grpc/{serviceName}/{methodName} - 启动模拟 GRPC 方法

福利:*

  • 动态原生上传而不重新编译
  • 适合GRPC客户端测试
  • LLM 产生现实的原生本源响应

用法示例 @:

# 1. Upload a proto definition
curl -X POST http://localhost:5116/api/grpc-protos \
  -H "Content-Type: text/plain" \
  --data 'syntax = "proto3"; service UserService { rpc GetUser(GetUserRequest) returns (User); }'

# 2. Call the gRPC method
curl -X POST http://localhost:5116/api/grpc/UserService/GetUser \
  -H "Content-Type: application/json" \
  -d '{"user_id": 123}'

仅限 OpenAPI

完全可以模拟现有的 OpenAPI/ @Swaggerspeces@:}

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY OpenAPI services
builder.Services.AddLLMockOpenApi(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.OpenApiSpecs = new List<OpenApiSpecConfig>
    {
        new OpenApiSpecConfig
        {
            Name = "PetStore",
            Source = "https://petstore3.swagger.io/api/v3/openapi.json",
            BasePath = "/api/petstore"
        }
    };
});

var app = builder.Build();

app.UseRouting();

// Map ONLY OpenAPI endpoints
app.MapLLMockOpenApi();                      // Loads configured specs
app.MapLLMockOpenApiManagement("/api/specs"); // Dynamic spec management

app.Run();

此创建@ : @%

  • 您在 OpenAPI spec 中定义的所有端点@ ( @ e @ MS K1}\ g.,} * /api/petstore/pet/{petId})
  • /api/specs -上傳/管理開放API畫面動態(POST}, 得到,DELETEMS K5

福利:*

  • 自动模拟整个 OpenAPI 规格
  • 无需人工绘制终点点图
  • 支持静态的 @ ( @ configendd)}和动态的@ MS K2_ puploaded @ MPK3}speces
  • 完全适合API合同测试

API 内部管理

添加上下文历史查看和修改@: @%

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register REST services
builder.Services.AddLLMockRest(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map REST endpoints
app.MapLLMockRest("/api/mock");

// Add context management API
app.MapLLMockApiContextManagement("/api/contexts");

app.Run();

此创建@ : @%

  • /api/mock/** -+REST端点
  • /api/contexts/{contextId} -View @/ 修改对话框历史

福利:*

  • 查看用于调试的 LLM 对话框历史
  • 修改上下文以引导响应
  • 要重设置状态的清晰上下文
  • 适合测试状态假设情景

混合和匹配

使用时需要的组合协议@: @%

1:REST +图QL(没有流

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register REST and GraphQL services
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map both protocols
app.MapLLMockRest("/api/mock");
app.MapLLMockGraphQL("/api/mock");

app.Run();

此创建@ : @%

  • /api/mock/** -+REST端点
  • /api/mock/graphql - 图形QL 终点
  • 无溪流端点

“2:”图解QL @+}信号机@(没有 REST_)

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register GraphQL and SignalR services
builder.Services.AddLLMockGraphQL(builder.Configuration);
builder.Services.AddLLMockSignalR(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map both protocols
app.MapLLMockGraphQL("/api/queries");
app.MapLLMockSignalR("/hub/realtime", "/api/contexts");

app.Run();

此创建@ : @%

  • /api/queries/graphql - 图形QL 终点
  • /hub/realtime - 信号枢纽
  • /api/contexts -讯号管理API
  • 没有 REST 或 SSE 端点

示例 “3:” 所有不同模式的事物

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register all services modularly
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockStreaming(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);
builder.Services.AddLLMockSignalR(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map each protocol with custom patterns
app.MapLLMockRest("/api/rest");           // /api/rest/**
app.MapLLMockStreaming("/api/stream");    // /api/stream/stream/**
app.MapLLMockGraphQL("/api/graphql");     // /api/graphql/graphql
app.MapLLMockSignalR("/hub/live", "/api/hub");

app.Run();

此创建@ : @%

  • /api/rest/** -+REST端点
  • /api/stream/stream/** -SSE流
  • /api/graphql/graphql - 图形QL 终点
  • /hub/live - 信号枢纽
  • /api/hub/contexts -讯号管理

4:REST +开放API @+上下文管理

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register REST and OpenAPI services
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockOpenApi(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map all three capabilities
app.MapLLMockRest("/api/mock");
app.MapLLMockOpenApi();
app.MapLLMockApiContextManagement("/api/contexts");

app.Run();

此创建@ : @%

  • /api/mock/** -+REST端点
  • OpenAPI spec 端点 @ ( @ 来自已配置的specs@ MS K1} @
  • /api/contexts/{contextId} 内容管理
  • 没有串流@ ,图形QL @ MS K1信号R,或 gRPC

5: gRPC + OpenAPI ( 议定书桥桥测试)

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register services for both protocols
builder.Services.AddLLMockApi(builder.Configuration);  // Includes gRPC
builder.Services.AddLLMockOpenApi(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map both protocols
app.MapLLMockGrpcManagement("/api/grpc-protos");
app.MapLLMockGrpc("/api/grpc");
app.MapLLMockOpenApi();

app.Run();

此创建@ : @%

  • /api/grpc-protos -+GRPC原型管理
  • /api/grpc/{service}/{method} GRPC的电话
  • OpenAPI 指定端点
  • 用于测试协议桥的完美操作@/}门道

例如“6: ”所有模块 “(” Full Stack 测试“MS K2”

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register everything modularly
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockStreaming(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);
builder.Services.AddLLMockSignalR(builder.Configuration);
builder.Services.AddLLMockOpenApi(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.OpenApiSpecs = new List<OpenApiSpecConfig>
    {
        new OpenApiSpecConfig
        {
            Name = "External API",
            Source = "https://api.example.com/openapi.json",
            BasePath = "/api/external"
        }
    };
});

var app = builder.Build();

app.UseRouting();

// Map everything at different paths
app.MapLLMockRest("/api/rest");
app.MapLLMockStreaming("/api/stream");
app.MapLLMockGraphQL("/api/graphql");
app.MapLLMockSignalR("/hub/realtime", "/api/hub");
app.MapLLMockOpenApi();
app.MapLLMockOpenApiManagement("/api/specs");
app.MapLLMockGrpcManagement("/api/grpc-protos");
app.MapLLMockGrpc("/api/grpc");
app.MapLLMockApiContextManagement("/api/contexts");

app.Run();

此创建@ : @%

  • /api/rest/** -+REST端点
  • /api/stream/stream/** -SSE流
  • /api/graphql/graphql - 图形QL 终点
  • /hub/realtime - 信号枢纽
  • /api/hub/contexts -讯号管理
  • /api/external/** - OpenAPI 标准端点
  • /api/specs 开放API管理
  • /api/grpc-protos -+GRPC原型管理
  • /api/grpc/{service}/{method} GRPC的电话
  • /api/contexts/{contextId} 内容管理

完美地适合:

  • 全面综合测试
  • 测试微观服务结构
  • 多关-protocol API网关
  • 与各种客户类型开发完整-stack development

多个实例

运行多个独立的模拟API, 配置不同@ : @%

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Development endpoints - high randomness
builder.Services.AddLLMockRest(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.Temperature = 1.5;
});

builder.Services.AddLLMockGraphQL(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.Temperature = 1.5;
});

var app = builder.Build();

app.UseRouting();

// Development endpoints
app.MapLLMockRest("/api/dev");
app.MapLLMockGraphQL("/api/dev");

// Stable test endpoints (would need separate config)
app.MapLLMockRest("/api/test");
app.MapLLMockGraphQL("/api/test");

app.Run();

模块化方法的惠益

1. 减少内存足印

只装入您实际使用的“ :” 处理器@ action

  • 仅REST 仅@: @ @ @ ~30%# 小于内存
  • 仅图形QL@: @ ~40%}小于内存
  • 只串流@ : @ *\ MS K1} 减少内存

2. 快速启动

注册@ = @ 快速程序启动服务更少

3. 更清晰的意图

代码明确显示您应用程序使用的协议

4. 较易测试

单独测试协议@: @%

// Test file for REST only
builder.Services.AddLLMockRest(config);
app.MapLLMockRest("/api/mock");

// Test file for GraphQL only
builder.Services.AddLLMockGraphQL(config);
app.MapLLMockGraphQL("/api/mock");

5. 无断断更改

现有代码继续工作

// This still works exactly as before
builder.Services.AddLLMockApi(configuration);
app.MapLLMockApi("/api/mock");

6. 灵活模式

在任何路径上挂载协议@: @%

app.MapLLMockRest("/rest");
app.MapLLMockGraphQL("/gql");
app.MapLLMockStreaming("/events");
app.MapLLMockSignalR("/ws", "/manage");

《移徙指南指南》

从v1.1.0到 vMS K1

无需更改@! @% 您现有的代码以 @ - @is@ MS K1} 有效 。

可选性:: 移动到模块化的受益方式

在“(”之前

builder.Services.AddLLMockApi(builder.Configuration);
app.MapLLMockApi("/api/mock", includeStreaming: true, includeGraphQL: true);

在“(v1.2.0”之后

// Only include what you need
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);

app.MapLLMockRest("/api/mock");
app.MapLLMockGraphQL("/api/mock");

这两种方法同样有效,但模块法更明确、效率更高。


摘要摘要

核心礼宾事务

“ ” 接近“ ” 添加方法“MS K2” 地图方法“ ” 使用大小写“MSC4”
统一 AddLLMockApi() MapLLMockApi() -=YTET -伊甸园字幕组=- 翻译:
休息 AddLLMockRest() MapLLMockRest() @ #简单休息,嘲弄 # #
图QL AddLLMockGraphQL() MapLLMockGraphQL() @ _ 图QL-}只使用应用程序@ {
串流 AddLLMockStreaming() MapLLMockStreaming() SSE流 仅
信号R AddLLMockSignalR() MapLLMockSignalR() @ @ real@-_时间网络软体数据 @ #
Op开放API AddLLMockOpenApi() MapLLMockOpenApi() 由 OpenAPI @/_Swagger speases@ }來自OpenAPI#MSK 1_spects_ mock}(來自 OptionAPI#MSPI% MS K1_ Swagger species < MSK2- } 來自 OmployAppi+MSK_ MSGQ_ MISC_ 来自 OpanAPI} MSk0_ mock_

附加特性 @ (_ 无添加方法 需要@ MSC1} @

使用大小写 @
gRPPC 管理 MapLLMockGrpcManagement() 上传@/管理 @.proto 文件 @MS K3
gRPPC 调用 MapLLMockGrpc() @ _Invoke 模拟 GRPC 方法@ _#
OpenAPIP 管理 MapLLMockOpenApiManagement() 动态装入 OpenAPI spets
内容管理 MapLLMockApiContextManagement() View @/ 修改LLM对话历史@

注::

  • g/RPPC服务包括: AddLLMockApi() 分开绘制
  • OpenAPI 管理允许在运行时进行动态套装
  • 与保持对话状态的任何协议进行背景管理
  • 所有特征可以混合,并视需要加以配合

选择最适合您需要的方法@! @

logo

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