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.3 kB

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