You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

DeveloperLead.cs 2.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. // DeveloperLead.cs
  3. using DevTeam.Shared;
  4. using Microsoft.AutoGen.Abstractions;
  5. using Microsoft.AutoGen.Agents;
  6. using Microsoft.SemanticKernel;
  7. using Microsoft.SemanticKernel.Connectors.OpenAI;
  8. using Microsoft.SemanticKernel.Memory;
  9. namespace DevTeam.Agents;
  10. [TopicSubscription("devteam")]
  11. public class DeveloperLead(IAgentRuntime context, Kernel kernel, ISemanticTextMemory memory, [FromKeyedServices("EventTypes")] EventTypes typeRegistry, ILogger<DeveloperLead> logger)
  12. : SKAiAgent<DeveloperLeadState>(context, memory, kernel, typeRegistry), ILeadDevelopers,
  13. IHandle<DevPlanRequested>,
  14. IHandle<DevPlanChainClosed>
  15. {
  16. public async Task Handle(DevPlanRequested item)
  17. {
  18. var plan = await CreatePlan(item.Ask);
  19. var evt = new DevPlanGenerated
  20. {
  21. Org = item.Org,
  22. Repo = item.Repo,
  23. IssueNumber = item.IssueNumber,
  24. Plan = plan
  25. };
  26. await PublishMessageAsync(evt);
  27. }
  28. public async Task Handle(DevPlanChainClosed item)
  29. {
  30. // TODO: Get plan from state
  31. var lastPlan = ""; // _state.State.History.Last().Message
  32. var evt = new DevPlanCreated
  33. {
  34. Plan = lastPlan
  35. };
  36. await PublishMessageAsync(evt);
  37. }
  38. public async Task<string> CreatePlan(string ask)
  39. {
  40. try
  41. {
  42. var context = new KernelArguments { ["input"] = AppendChatHistory(ask) };
  43. var instruction = "Consider the following architectural guidelines:!waf!";
  44. var enhancedContext = await AddKnowledge(instruction, "waf", context);
  45. var settings = new OpenAIPromptExecutionSettings
  46. {
  47. ResponseFormat = "json_object",
  48. MaxTokens = 4096,
  49. Temperature = 0.8,
  50. TopP = 1
  51. };
  52. return await CallFunction(DevLeadSkills.Plan, enhancedContext, settings);
  53. }
  54. catch (Exception ex)
  55. {
  56. logger.LogError(ex, "Error creating development plan");
  57. return "";
  58. }
  59. }
  60. }
  61. public interface ILeadDevelopers
  62. {
  63. public Task<string> CreatePlan(string ask);
  64. }