Files

1 line
8.3 KiB
JSON

{"repo": "chqjourney/flows", "files": {"WorkflowDemo/Program.cs": {"efe5c7dd713234893c6032e6862b3e988fdc43a6": {"t": 1785745800.4168985, "n": 3936, "h": "67146c73aff47ba7", "c": "using System.ClientModel;\nusing Microsoft.Agents.AI;\nusing Microsoft.Extensions.AI;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing OpenAI;\nusing OpenAI.Chat;\nusing WorkflowDemo.Agents;\nusing WorkflowDemo.Services;\nusing WorkflowDemo.Tools;\n\nvar builder = Host.CreateApplicationBuilder(args);\n\n// Ensure config files in the project root are picked up even when running from output dir.\nbuilder.Configuration.Sources.Clear();\nbuilder.Configuration\n .SetBasePath(Directory.GetCurrentDirectory())\n .AddJsonFile(\"appsettings.json\", optional: false, reloadOnChange: true)\n .AddJsonFile($\"appsettings.{builder.Environment.EnvironmentName}.json\", optional: true, reloadOnChange: true)\n .AddEnvironmentVariables();\n\nbuilder.Services.Configure<AiOptions>(builder.Configuration.GetSection(\"AI\"));\nbuilder.Services.Configure<StandardsOptions>(builder.Configuration.GetSection(\"Standards\"));\nbuilder.Services.Configure<CacheOptions>(builder.Configuration.GetSection(\"Cache\"));\nbuilder.Services.Configure<WorkflowOptions>(builder.Configuration.GetSection(\"Workflow\"));\n\nvar aiConfig = builder.Configuration.GetSection(\"AI\").Get<AiOptions>() ?? new AiOptions();\nvar apiKey = Environment.GetEnvironmentVariable(\"DEEPSEEK_API_KEY\") ?? aiConfig.ApiKey;\n\nif (string.IsNullOrWhiteSpace(apiKey))\n{\n Console.WriteLine(\"Error: DEEPSEEK_API_KEY environment variable is not set.\");\n Console.WriteLine(\"Set it before running, e.g.: export DEEPSEEK_API_KEY=your-key\");\n return 1;\n}\n\nvar openAIClient = new OpenAIClient(\n new ApiKeyCredential(apiKey),\n new OpenAIClientOptions { Endpoint = new Uri(aiConfig.Endpoint) });\nvar chatClient = openAIClient.GetChatClient(aiConfig.ModelId).AsIChatClient();\nbuilder.Services.AddSingleton(chatClient);\n\nbuilder.Services.AddSingleton<IStandardLibraryStore, StandardLibraryStore>();\nbuilder.Services.AddSingleton<IAnswerCache, AnswerCache>();\nbuilder.Services.AddSingleton<StandardLibraryTools>();\nbuilder.Services.AddSingleton<CacheTools>();\nbuilder.Services.AddSingleton<AgentFactory>();\nbuilder.Services.AddSingleton<WorkflowOrchestrator>(sp =>\n{\n var factory = sp.GetRequiredService<AgentFactory>();\n var cache = sp.GetRequiredService<IAnswerCache>();\n var logger = sp.GetRequiredService<ILogger<WorkflowOrchestrator>>();\n var workflowOptions = sp.GetRequiredService<Microsoft.Extensions.Options.IOptions<WorkflowOptions>>().Value;\n return new WorkflowOrchestrator(factory, cache, logger, workflowOptions.MaxReviewIterations);\n});\n\nvar app = builder.Build();\n\nvar orchestrator = app.Services.GetRequiredService<WorkflowOrchestrator>();\nvar workflowOptions = app.Services.GetRequiredService<Microsoft.Extensions.Options.IOptions<WorkflowOptions>>().Value;\n\nstring question;\nif (args.Length > 0)\n{\n question = string.Join(\" \", args);\n}\nelse\n{\n Console.Write(\"请输入检测行业技术问题: \");\n question = Console.ReadLine() ?? string.Empty;\n}\n\nif (string.IsNullOrWhiteSpace(question))\n{\n Console.WriteLine(\"问题不能为空。\");\n return 2;\n}\n\nvar document = await orchestrator.RunAsync(question);\n\nDirectory.CreateDirectory(workflowOptions.OutputDirectory);\nvar fileName = $\"{DateTime.Now:yyyyMMdd-HHmmss}.md\";\nvar outputPath = Path.Combine(workflowOptions.OutputDirectory, fileName);\nawait File.WriteAllTextAsync(outputPath, document);\n\nConsole.WriteLine($\"\\n文档已生成: {outputPath}\");\nreturn 0;\n\npublic sealed class AiOptions\n{\n public string Provider { get; set; } = \"OpenAI\";\n public string Endpoint { get; set; } = \"https://api.deepseek.com\";\n public string ModelId { get; set; } = \"deepseek-v4-flash\";\n public string ApiKey { get; set; } = string.Empty;\n public int MaxIterations { get; set; } = 3;\n}\n\npublic sealed class WorkflowOptions\n{\n public string OutputDirectory { get; set; } = \"output\";\n public int MaxReviewIterations { get; set; } = 2;\n}\n"}, "aa47d07420336045e197d97297a8262b1177e4bc": {"t": 1785756649.1491077, "n": 3936, "h": "67146c73aff47ba7", "c": "using System.ClientModel;\nusing Microsoft.Agents.AI;\nusing Microsoft.Extensions.AI;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing OpenAI;\nusing OpenAI.Chat;\nusing WorkflowDemo.Agents;\nusing WorkflowDemo.Services;\nusing WorkflowDemo.Tools;\n\nvar builder = Host.CreateApplicationBuilder(args);\n\n// Ensure config files in the project root are picked up even when running from output dir.\nbuilder.Configuration.Sources.Clear();\nbuilder.Configuration\n .SetBasePath(Directory.GetCurrentDirectory())\n .AddJsonFile(\"appsettings.json\", optional: false, reloadOnChange: true)\n .AddJsonFile($\"appsettings.{builder.Environment.EnvironmentName}.json\", optional: true, reloadOnChange: true)\n .AddEnvironmentVariables();\n\nbuilder.Services.Configure<AiOptions>(builder.Configuration.GetSection(\"AI\"));\nbuilder.Services.Configure<StandardsOptions>(builder.Configuration.GetSection(\"Standards\"));\nbuilder.Services.Configure<CacheOptions>(builder.Configuration.GetSection(\"Cache\"));\nbuilder.Services.Configure<WorkflowOptions>(builder.Configuration.GetSection(\"Workflow\"));\n\nvar aiConfig = builder.Configuration.GetSection(\"AI\").Get<AiOptions>() ?? new AiOptions();\nvar apiKey = Environment.GetEnvironmentVariable(\"DEEPSEEK_API_KEY\") ?? aiConfig.ApiKey;\n\nif (string.IsNullOrWhiteSpace(apiKey))\n{\n Console.WriteLine(\"Error: DEEPSEEK_API_KEY environment variable is not set.\");\n Console.WriteLine(\"Set it before running, e.g.: export DEEPSEEK_API_KEY=your-key\");\n return 1;\n}\n\nvar openAIClient = new OpenAIClient(\n new ApiKeyCredential(apiKey),\n new OpenAIClientOptions { Endpoint = new Uri(aiConfig.Endpoint) });\nvar chatClient = openAIClient.GetChatClient(aiConfig.ModelId).AsIChatClient();\nbuilder.Services.AddSingleton(chatClient);\n\nbuilder.Services.AddSingleton<IStandardLibraryStore, StandardLibraryStore>();\nbuilder.Services.AddSingleton<IAnswerCache, AnswerCache>();\nbuilder.Services.AddSingleton<StandardLibraryTools>();\nbuilder.Services.AddSingleton<CacheTools>();\nbuilder.Services.AddSingleton<AgentFactory>();\nbuilder.Services.AddSingleton<WorkflowOrchestrator>(sp =>\n{\n var factory = sp.GetRequiredService<AgentFactory>();\n var cache = sp.GetRequiredService<IAnswerCache>();\n var logger = sp.GetRequiredService<ILogger<WorkflowOrchestrator>>();\n var workflowOptions = sp.GetRequiredService<Microsoft.Extensions.Options.IOptions<WorkflowOptions>>().Value;\n return new WorkflowOrchestrator(factory, cache, logger, workflowOptions.MaxReviewIterations);\n});\n\nvar app = builder.Build();\n\nvar orchestrator = app.Services.GetRequiredService<WorkflowOrchestrator>();\nvar workflowOptions = app.Services.GetRequiredService<Microsoft.Extensions.Options.IOptions<WorkflowOptions>>().Value;\n\nstring question;\nif (args.Length > 0)\n{\n question = string.Join(\" \", args);\n}\nelse\n{\n Console.Write(\"请输入检测行业技术问题: \");\n question = Console.ReadLine() ?? string.Empty;\n}\n\nif (string.IsNullOrWhiteSpace(question))\n{\n Console.WriteLine(\"问题不能为空。\");\n return 2;\n}\n\nvar document = await orchestrator.RunAsync(question);\n\nDirectory.CreateDirectory(workflowOptions.OutputDirectory);\nvar fileName = $\"{DateTime.Now:yyyyMMdd-HHmmss}.md\";\nvar outputPath = Path.Combine(workflowOptions.OutputDirectory, fileName);\nawait File.WriteAllTextAsync(outputPath, document);\n\nConsole.WriteLine($\"\\n文档已生成: {outputPath}\");\nreturn 0;\n\npublic sealed class AiOptions\n{\n public string Provider { get; set; } = \"OpenAI\";\n public string Endpoint { get; set; } = \"https://api.deepseek.com\";\n public string ModelId { get; set; } = \"deepseek-v4-flash\";\n public string ApiKey { get; set; } = string.Empty;\n public int MaxIterations { get; set; } = 3;\n}\n\npublic sealed class WorkflowOptions\n{\n public string OutputDirectory { get; set; } = \"output\";\n public int MaxReviewIterations { get; set; } = 2;\n}\n"}}}}