mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
.NET Workflows - WIP Declarative action update (#1761)
* WIP * Fixed build errors (#1638) Comment and nullable type alignment * Sync to SDK update * Checkpoint * Checkpoint: Tests passing * Checkpoint: EndWorkflow * Add trace * .NET: Azure.AI.Agents Package Split + Initial Extensions (#1657) * Move packages * Update nuget.config * Address Xmldoc * Remove format from branches checks * Address Xmldocs * Add more details to the implementation * Moving Agent logic to ChatClient * Adding Name and Id overrides to AzureAIAgent * Updating extensions * Add GetAiAgent extensions * Adding support for version as name can conflict 409 using the Agents API with same name * Addressing more updates to the extensions * More improvements * Remove debugging code from sample * Address copilot feedback * Apply suggestions from co-pilot code review * Checkpoint * Update Directory.Packages.props Fix package version rollback: Azure.AI.Agents.Persistent (beta-6 => beta-7) * Add project reference * .NET: Add comprehensive unit tests for Microsoft.Agents.AI.AzureAIAgents extension methods (#1786) * Initial plan * Add comprehensive unit test project for Microsoft.Agents.AI.AzureAIAgents Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> * Add README documenting test project and package dependency requirements Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> * Fix documentation URL to use learn.microsoft.com Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> * Bump back AAAP 1.2.0-beta.7 * Address AI generated UT's * Remove UT Readme * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * .NET: Change model to be required just for prompt agent definition specific extensions (#1812) * Remove unneeded model from extensions * Add noop justification * Update Package Nameing: V1 -> AzureAI.Persistent / V2 -> AzureAI (#1829) * Checkpoint for merge * No build errors * .NET: Update Extensions for Strict Agent Definitions + Improvements (#1892) * Update Package Nameing: V1 -> AzureAI.Persistent / V2 -> AzureAI * Update agents and extensions to comply with strict agent definitions * More static updates * Address UT, and ResponseTool support * Improving reusability extensions * Addressing ResponseTools Unit Tests and extension setup * Adapted workaround on breaking AAA with OpenAI 2.6.0 * Small updates * Remove strictness when retrieving agents, improved XmlDocs * Improve sample comments * Update dotnet/tests/Microsoft.Agents.AI.AzureAI.UnitTests/AgentsClientExtensionsTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Address PR comments * Address UT failing * Address Copilot feedback * Address Copilot feedback * Address comment typo * Address PR feedback * Address typo * Add missing Extensions with ChatClientAgentOptions * Address comments --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Updated package version (#1897) * Version update (#1901) * Checkpoint * Updated package version (#1906) * Checkpoint * Checkpoint * Checkpoint * Align with azure ai agent * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/MCPToolApproval/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/DeepResearch/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactored external input * Update dotnet/samples/GettingStarted/Workflows/Declarative/MCPToolApproval/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Agent tools patch * Demos validated * Checkpoint * Hygiene * Checkpoint - Samples * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Checkpoint * Checkpoint - Deep Research * Update baseline * Update * Typo * Checkpoint * Typos * Sample cleanup * Update dotnet/src/Microsoft.Agents.AI.Workflows.Declarative/AzureAgentProvider.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/src/Microsoft.Agents.AI.AzureAI/AgentsClientExtensions.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/FunctionTools/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/ToolApproval/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/GettingStarted/Workflows/Declarative/DeepResearch/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Typo * Typo * Fix input loop * Sample - Function Calling / External Input * Typo * Finessed * Checkpoint * Fix feed * Checkpoint - so close * Ding dong! * "there" *** * Fixup comments * Fix sample * Code analysis * Header * Typo (variableName) * Remove dead code * Skip test (agent api ratchet) * Comment * Update dotnet/samples/GettingStarted/Workflows/Declarative/StudentTeacher/Program.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Typo --------- Co-authored-by: Roger Barreto <19890735+rogerbarreto@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#
|
||||
# This workflow demonstrates a single agent interaction based on user input.
|
||||
# This workflow demonstrates how to use the Question action
|
||||
# to request user input and confirm it matches the original input.
|
||||
#
|
||||
# Any Foundry Agent may be used to provide the response.
|
||||
# See: ./setup/QuestionAgent.yaml
|
||||
# Note: This workflow doesn't make use of any agents.
|
||||
#
|
||||
kind: Workflow
|
||||
trigger:
|
||||
@@ -2,33 +2,18 @@
|
||||
# This workflow coordinates multiple agents in order to address complex user requests
|
||||
# according to the "Magentic" orchestration pattern introduced by AutoGen.
|
||||
#
|
||||
# For this workflow, several agents used, each with a prompt specific to their role:
|
||||
# For this workflow, several agents used, each with specific roles.
|
||||
#
|
||||
# 1. Analyst Agent: Able to analyze the current task.
|
||||
# Enable "Bing Grounding Tool" in the agent settings.
|
||||
# See: ./setup/AnalystAgent.yaml
|
||||
#
|
||||
# 2. Manager Agent: Able to create plans and delegate tasks to other agents.
|
||||
# See: ./setup/ManagerAgent.yaml
|
||||
#
|
||||
# 3. Research Agent:
|
||||
# Enable "Bing Grounding" in the agent settings.
|
||||
# See: ./setup/WebAgent.yaml
|
||||
# The following agents are responsible for overseeing and coordinating the workflow:
|
||||
# - Research Agent: Analyze the current task and correlate relevant facts.
|
||||
# - Planner Agent: Analyze the current task and devise an overall plan.
|
||||
# - Manager Agent: Evaluates status and delegate tasks to other agents.
|
||||
# - Summary Agent: Evaluates status and delegate tasks to other agents.
|
||||
#
|
||||
# With instructions:
|
||||
#
|
||||
# Only provide requested information in a way that is throughfully organized and formatted.
|
||||
# Never include any analysis or code.
|
||||
# Never generate a file.
|
||||
# Avoid repeating yourself.
|
||||
#
|
||||
# 4. Coder Agent:
|
||||
# Enable "Code Interpreter" in the agent settings.
|
||||
# See: ./setup/CoderAgent.yaml
|
||||
#
|
||||
# 5. Weather Agent: Able to retrieve factual information from the web.
|
||||
# Enable "Open API" in the agent settings using the wttr.json schema.
|
||||
# See: ./setup/WeatherAgent.yaml
|
||||
# The following agents have capabilities that are utilized to address the input task:
|
||||
# - Knowledge Agent: Performs generic web searches.
|
||||
# - Coder Agent: Able to write and execute code.
|
||||
# - Weather Agent: Provides weather information.
|
||||
#
|
||||
kind: Workflow
|
||||
trigger:
|
||||
@@ -45,18 +30,15 @@ trigger:
|
||||
=[
|
||||
{
|
||||
name: "WeatherAgent",
|
||||
description: "Able to retrieve weather information",
|
||||
agentid: Env.FOUNDRY_AGENT_RESEARCHWEATHER
|
||||
description: "Able to retrieve weather information"
|
||||
},
|
||||
{
|
||||
name: "CoderAgent",
|
||||
description: "Able to write and execute Python code",
|
||||
agentid: Env.FOUNDRY_AGENT_RESEARCHCODER
|
||||
description: "Able to write and execute Python code"
|
||||
},
|
||||
{
|
||||
name: "WebAgent",
|
||||
description: "Able to perform generic websearches",
|
||||
agentid: Env.FOUNDRY_AGENT_RESEARCHWEB
|
||||
name: "KnowledgeAgent",
|
||||
description: "Able to perform generic websearches"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -84,38 +66,22 @@ trigger:
|
||||
|
||||
- kind: CreateConversation
|
||||
id: conversation_1a2b3c
|
||||
conversationId: Local.InternalConversationId
|
||||
conversationId: Local.StatusConversationId
|
||||
|
||||
- kind: CreateConversation
|
||||
id: conversation_1x2y3z
|
||||
conversationId: Local.TaskConversationId
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_UDoMUw
|
||||
displayName: Get Facts
|
||||
conversationId: =Local.InternalConversationId
|
||||
conversationId: =Local.StatusConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_RESEARCHANALYST
|
||||
name: ResearchAgent
|
||||
output:
|
||||
autoSend: false
|
||||
messages: Local.TaskFacts
|
||||
input:
|
||||
messages: =UserMessage(Local.InputTask)
|
||||
additionalInstructions: |-
|
||||
In order to help begin addressing the user request, please answer the following pre-survey to the best of your ability.
|
||||
Keep in mind that you are Ken Jennings-level with trivia, and Mensa-level with puzzles, so there should be a deep well to draw from.
|
||||
|
||||
Here is the pre-survey:
|
||||
|
||||
1. Please list any specific facts or figures that are GIVEN in the request itself. It is possible that there are none.
|
||||
2. Please list any facts that may need to be looked up, and WHERE SPECIFICALLY they might be found. In some cases, authoritative sources are mentioned in the request itself.
|
||||
3. Please list any facts that may need to be derived (e.g., via logical deduction, simulation, or computation)
|
||||
4. Please list any facts that are recalled from memory, hunches, well-reasoned guesses, etc.
|
||||
|
||||
When answering this survey, keep in mind that 'facts' will typically be specific names, dates, statistics, etc. Your answer must only use the headings:
|
||||
|
||||
1. GIVEN OR VERIFIED FACTS
|
||||
2. FACTS TO LOOK UP
|
||||
3. FACTS TO DERIVE
|
||||
4. EDUCATED GUESSES
|
||||
|
||||
DO NOT include any other headings or sections in your response. DO NOT list next steps or plans until asked to do so.
|
||||
|
||||
- kind: SendActivity
|
||||
id: sendActivity_yFsbRz
|
||||
@@ -124,52 +90,42 @@ trigger:
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_DsBaJU
|
||||
displayName: Create a Plan
|
||||
conversationId: =Local.InternalConversationId
|
||||
conversationId: =Local.StatusConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_RESEARCHMANAGER
|
||||
name: PlannerAgent
|
||||
inputs:
|
||||
arguments:
|
||||
team: =Local.TeamDescription
|
||||
output:
|
||||
autoSend: false
|
||||
messages: Local.Plan
|
||||
input:
|
||||
messages: =UserMessage(Local.InputTask)
|
||||
additionalInstructions: |-
|
||||
Your only job is to devise an efficient plan that identifies (by name) how a team member may contribute to addressing the user request.
|
||||
|
||||
Only select the following team which is listed as "- [Name]: [Description]"
|
||||
|
||||
{Local.TeamDescription}
|
||||
|
||||
The plan must be a bullet point list must be in the form "- [AgentName]: [Specific action or task for that agent to perform]"
|
||||
|
||||
Remember, there is no requirement to involve the entire team -- only select team member's whose particular expertise is required for this task.
|
||||
|
||||
- kind: SetVariable
|
||||
- kind: SetTextVariable
|
||||
id: setVariable_Kk2LDL
|
||||
displayName: Define instructions
|
||||
variable: Local.TaskInstructions
|
||||
value: |-
|
||||
="# TASK
|
||||
# TASK
|
||||
Address the following user request:
|
||||
|
||||
" & Local.InputTask & "
|
||||
{Local.InputTask}
|
||||
|
||||
|
||||
# TEAM
|
||||
Use the following team to answer this request:
|
||||
|
||||
" & Local.TeamDescription & "
|
||||
{Local.TeamDescription}
|
||||
|
||||
|
||||
# FACTS
|
||||
Consider this initial fact sheet:
|
||||
|
||||
" & Trim(Last(Local.TaskFacts).Text) & "
|
||||
{Trim(Last(Local.TaskFacts).Text)}
|
||||
|
||||
|
||||
# PLAN
|
||||
Here is the plan to follow as best as possible:
|
||||
|
||||
" & Last(Local.Plan).Text
|
||||
{Last(Local.Plan).Text}
|
||||
|
||||
- kind: SendActivity
|
||||
id: sendActivity_bwNZiM
|
||||
@@ -178,131 +134,41 @@ trigger:
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_o3BQkf
|
||||
displayName: Progress Ledger Prompt
|
||||
conversationId: =Local.InternalConversationId
|
||||
conversationId: =Local.StatusConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_RESEARCHMANAGER
|
||||
output:
|
||||
autoSend: false
|
||||
messages: Local.ProgressLedgerUpdate
|
||||
name: ManagerAgent
|
||||
input:
|
||||
messages: =UserMessage(Local.AgentResponseText)
|
||||
additionalInstructions: |-
|
||||
Recall we are working on the following request:
|
||||
|
||||
{Local.InputTask}
|
||||
|
||||
And we have assembled the following team:
|
||||
|
||||
{Local.TeamDescription}
|
||||
|
||||
To make progress on the request, please answer the following questions, including necessary reasoning:
|
||||
|
||||
- Is the request fully satisfied? (True if complete, or False if the original request has yet to be SUCCESSFULLY and FULLY addressed)
|
||||
- Are we in a loop where we are repeating the same requests and / or getting the same responses from an agent multiple times? Loops can span multiple turns, and can include repeated actions like scrolling up or down more than a handful of times.
|
||||
- Are we making forward progress? (True if just starting, or recent messages are adding value. False if recent messages show evidence of being stuck in a loop or if there is evidence of significant barriers to success such as the inability to read from a required file)
|
||||
- Who should speak next? (select from: {Concat(Local.AvailableAgents, name, ",")})
|
||||
- What instruction or question would you give this team member? (Phrase as if speaking directly to them, and include any specific information they may need)
|
||||
|
||||
Please output an answer in pure JSON format according to the following schema. The JSON object must be parsable as-is. DO NOT OUTPUT ANYTHING OTHER THAN JSON, AND DO NOT DEVIATE FROM THIS SCHEMA:
|
||||
|
||||
{{
|
||||
"is_request_satisfied": {{
|
||||
"reason": string,
|
||||
"answer": boolean
|
||||
}},
|
||||
"is_in_loop": {{
|
||||
"reason": string,
|
||||
"answer": boolean
|
||||
}},
|
||||
"is_progress_being_made": {{
|
||||
"reason": string,
|
||||
"answer": boolean
|
||||
}},
|
||||
"next_speaker": {{
|
||||
"reason": string,
|
||||
"answer": string (select from: {Concat(Local.AvailableAgents, name, ",")})
|
||||
}},
|
||||
"instruction_or_question": {{
|
||||
"reason": string,
|
||||
"answer": string
|
||||
}}
|
||||
}}
|
||||
|
||||
- kind: ParseValue
|
||||
id: parse_rNZtlV
|
||||
displayName: Parse ledger response
|
||||
variable: Local.TypedProgressLedger
|
||||
value: =Last(Local.ProgressLedgerUpdate).Text
|
||||
valueType:
|
||||
kind: Record
|
||||
properties:
|
||||
instruction_or_question:
|
||||
type:
|
||||
kind: Record
|
||||
properties:
|
||||
answer: String
|
||||
reason: String
|
||||
|
||||
is_in_loop:
|
||||
type:
|
||||
kind: Record
|
||||
properties:
|
||||
answer: Boolean
|
||||
reason: String
|
||||
|
||||
is_progress_being_made:
|
||||
type:
|
||||
kind: Record
|
||||
properties:
|
||||
answer: Boolean
|
||||
reason: String
|
||||
|
||||
is_request_satisfied:
|
||||
type:
|
||||
kind: Record
|
||||
properties:
|
||||
answer: Boolean
|
||||
reason: String
|
||||
|
||||
next_speaker:
|
||||
type:
|
||||
kind: Record
|
||||
properties:
|
||||
answer: String
|
||||
reason: String
|
||||
output:
|
||||
responseObject: Local.ProgressLedger
|
||||
|
||||
- kind: ConditionGroup
|
||||
id: conditionGroup_mVIecC
|
||||
conditions:
|
||||
- id: conditionItem_fj432c
|
||||
condition: =Local.TypedProgressLedger.is_request_satisfied.answer
|
||||
condition: =Local.ProgressLedger.is_request_satisfied.answer
|
||||
displayName: If Done
|
||||
actions:
|
||||
|
||||
- kind: SendActivity
|
||||
id: sendActivity_kdl3mC
|
||||
activity: Completed! {Local.TypedProgressLedger.is_request_satisfied.reason}
|
||||
activity: Completed! {Local.ProgressLedger.is_request_satisfied.reason}
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_Ke3l1d
|
||||
displayName: Generate Response
|
||||
conversationId: =System.ConversationId
|
||||
conversationId: =Local.TaskConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_RESEARCHMANAGER
|
||||
name: SummaryAgent
|
||||
output:
|
||||
autoSend: true
|
||||
messages: Local.FinalResponse
|
||||
input:
|
||||
messages: =Local.SeedTask
|
||||
additionalInstructions: |-
|
||||
We have completed the task.
|
||||
Based only on the conversation and without adding any new information, synthesize the result of the conversation as a complete response to the user task.
|
||||
The user will only every see this last response and not the entire conversation, so please ensure it is complete and self-contained.
|
||||
|
||||
- kind: EndConversation
|
||||
id: end_SVoNSV
|
||||
|
||||
- id: conditionItem_yiqund
|
||||
condition: =Local.TypedProgressLedger.is_in_loop.answer || Not(Local.TypedProgressLedger.is_progress_being_made.answer)
|
||||
condition: =Local.ProgressLedger.is_in_loop.answer || Not(Local.ProgressLedger.is_progress_being_made.answer)
|
||||
displayName: If Stalling
|
||||
actions:
|
||||
|
||||
@@ -312,26 +178,25 @@ trigger:
|
||||
variable: Local.StallCount
|
||||
value: =Local.StallCount + 1
|
||||
|
||||
|
||||
- kind: ConditionGroup
|
||||
id: conditionGroup_vBTQd3
|
||||
conditions:
|
||||
|
||||
- id: conditionItem_fpaNL9
|
||||
condition: =Local.TypedProgressLedger.is_in_loop.answer
|
||||
condition: =Local.ProgressLedger.is_in_loop.answer
|
||||
displayName: Is Loop
|
||||
actions:
|
||||
- kind: SendActivity
|
||||
id: sendActivity_fpaNL9
|
||||
activity: {Local.TypedProgressLedger.is_in_loop.reason}
|
||||
activity: {Local.ProgressLedger.is_in_loop.reason}
|
||||
|
||||
- id: conditionItem_NnqvXh
|
||||
condition: =Not(Local.TypedProgressLedger.is_progress_being_made.answer)
|
||||
condition: =Not(Local.ProgressLedger.is_progress_being_made.answer)
|
||||
displayName: Is No Progress
|
||||
actions:
|
||||
- kind: SendActivity
|
||||
id: sendActivity_NnqvXh
|
||||
activity: {Local.TypedProgressLedger.is_progress_being_made.reason}
|
||||
activity: {Local.ProgressLedger.is_progress_being_made.reason}
|
||||
|
||||
|
||||
- kind: ConditionGroup
|
||||
@@ -366,28 +231,23 @@ trigger:
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_wFJ123
|
||||
displayName: Get New Facts Prompt
|
||||
conversationId: =Local.InternalConversationId
|
||||
conversationId: =Local.StatusConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_RESEARCHANALYST
|
||||
name: ResearchAgent
|
||||
output:
|
||||
autoSend: false
|
||||
messages: Local.TaskFacts
|
||||
input:
|
||||
messages: |-
|
||||
=UserMessage(
|
||||
"As a reminder, we are working to solve the following task:
|
||||
"It's clear we aren't making as much progress as we would like, but we may have learned something new.
|
||||
Please rewrite the following fact sheet, updating it to include anything new we have learned that may be helpful.
|
||||
Example edits can include (but are not limited to) adding new guesses, moving educated guesses to verified facts if appropriate, etc.
|
||||
Updates may be made to any section of the fact sheet, and more than one section of the fact sheet can be edited.
|
||||
This is an especially good time to update educated guesses, so please at least add or update one educated guess or hunch, and explain your reasoning.
|
||||
|
||||
" & Local.InputTask)
|
||||
additionalInstructions: |-
|
||||
It's clear we aren't making as much progress as we would like, but we may have learned something new.
|
||||
Please rewrite the following fact sheet, updating it to include anything new we have learned that may be helpful.
|
||||
Example edits can include (but are not limited to) adding new guesses, moving educated guesses to verified facts if appropriate, etc.
|
||||
Updates may be made to any section of the fact sheet, and more than one section of the fact sheet can be edited.
|
||||
This is an especially good time to update educated guesses, so please at least add or update one educated guess or hunch, and explain your reasoning.
|
||||
Here is the old fact sheet:
|
||||
|
||||
Here is the old fact sheet:
|
||||
|
||||
{Local.TaskFacts}
|
||||
{Local.TaskFacts}"
|
||||
|
||||
- kind: SendActivity
|
||||
id: sendActivity_dsBaJU
|
||||
@@ -396,48 +256,48 @@ trigger:
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_uEJ456
|
||||
displayName: Create new Plan Prompt
|
||||
conversationId: =Local.InternalConversationId
|
||||
conversationId: =Local.StatusConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_RESEARCHMANAGER
|
||||
name: PlannerAgent
|
||||
output:
|
||||
autoSend: false
|
||||
messages: Local.Plan
|
||||
input:
|
||||
additionalInstructions: |-
|
||||
Please briefly explain what went wrong on this last run (the root cause of the failure),
|
||||
and then come up with a new plan that takes steps and/or includes hints to overcome prior challenges and especially avoids repeating the same mistakes.
|
||||
As before, the new plan should be concise, be expressed in bullet-point form, and consider the following team composition
|
||||
(do not involve any other outside people since we cannot contact anyone else):
|
||||
messages: |-
|
||||
=UserMessage(
|
||||
"Please briefly explain what went wrong on this last run (the root cause of the failure),
|
||||
and then come up with a new plan that takes steps and/or includes hints to overcome prior challenges and especially avoids repeating the same mistakes.
|
||||
As before, the new plan should be concise, be expressed in bullet-point form, and consider the following team composition
|
||||
(do not involve any other outside people since we cannot contact anyone else):
|
||||
|
||||
{Local.TeamDescription}
|
||||
{Local.TeamDescription}")
|
||||
|
||||
- kind: SetVariable
|
||||
- kind: SetTextVariable
|
||||
id: setVariable_jW7tmM
|
||||
displayName: Set Plan as Context
|
||||
variable: Local.TaskInstructions
|
||||
value: |-
|
||||
="# TASK
|
||||
# TASK
|
||||
Address the following user request:
|
||||
|
||||
" & Local.InputTask & "
|
||||
{Local.InputTask}
|
||||
|
||||
|
||||
# TEAM
|
||||
Use the following team to answer this request:
|
||||
|
||||
" & Local.TeamDescription & "
|
||||
{Local.TeamDescription}
|
||||
|
||||
|
||||
# FACTS
|
||||
Consider this initial fact sheet:
|
||||
|
||||
" & Local.TaskFacts.Text & "
|
||||
{Local.TaskFacts.Text}
|
||||
|
||||
|
||||
# PLAN
|
||||
Here is the plan to follow as best as possible:
|
||||
|
||||
" & Local.Plan.Text
|
||||
|
||||
{Local.Plan.Text}
|
||||
|
||||
- kind: SetVariable
|
||||
id: setVariable_6J2snP
|
||||
@@ -459,19 +319,14 @@ trigger:
|
||||
- kind: SendActivity
|
||||
id: sendActivity_L7ooQO
|
||||
activity: |-
|
||||
({Local.TypedProgressLedger.next_speaker.reason})
|
||||
({Local.ProgressLedger.next_speaker.reason})
|
||||
|
||||
{Local.TypedProgressLedger.next_speaker.answer} - {Local.TypedProgressLedger.instruction_or_question.answer}
|
||||
|
||||
- kind: SetVariable
|
||||
id: setVariable_L7ooQO
|
||||
variable: Local.StallCount
|
||||
value: 0
|
||||
{Local.ProgressLedger.next_speaker.answer} - {Local.ProgressLedger.instruction_or_question.answer}
|
||||
|
||||
- kind: SetVariable
|
||||
id: setVariable_nxN1mE
|
||||
variable: Local.NextSpeaker
|
||||
value: =Search(Local.AvailableAgents, Local.TypedProgressLedger.next_speaker.answer, name)
|
||||
value: =Search(Local.AvailableAgents, Local.ProgressLedger.next_speaker.answer, name)
|
||||
|
||||
- kind: ConditionGroup
|
||||
id: conditionGroup_QFPiF5
|
||||
@@ -480,19 +335,23 @@ trigger:
|
||||
condition: =CountRows(Local.NextSpeaker) = 1
|
||||
displayName: If next Agent tool Exists
|
||||
actions:
|
||||
|
||||
- kind: SetVariable
|
||||
id: setVariable_L7ooQO
|
||||
variable: Local.StallCount
|
||||
value: 0
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_orsBf06
|
||||
displayName: Progress Ledger Prompt
|
||||
conversationId: =System.ConversationId
|
||||
conversationId: =Local.TaskConversationId
|
||||
agent:
|
||||
name: =First(Local.NextSpeaker).agentid
|
||||
name: =First(Local.NextSpeaker).name
|
||||
output:
|
||||
autoSend: true
|
||||
messages: Local.AgentResponse
|
||||
input:
|
||||
messages: =Local.SeedTask
|
||||
additionalInstructions: |-
|
||||
{Local.TypedProgressLedger.instruction_or_question.answer}
|
||||
messages: =UserMessage(Local.ProgressLedger.instruction_or_question.answer)
|
||||
|
||||
- kind: SetVariable
|
||||
id: setVariable_XzNrdM
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
# Example input:
|
||||
# An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours.
|
||||
#
|
||||
# Any Foundry Agent may be used to provide the response.
|
||||
# See: ./setup/QuestionAgent.yaml
|
||||
#
|
||||
kind: Workflow
|
||||
trigger:
|
||||
|
||||
@@ -18,31 +15,16 @@ trigger:
|
||||
id: invoke_analyst
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_ANSWER
|
||||
input:
|
||||
additionalInstructions: |-
|
||||
You are a marketing analyst. Given a product description, identify:
|
||||
- Key features
|
||||
- Target audience
|
||||
- Unique selling points
|
||||
name: AnalystAgent
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: invoke_writer
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_ANSWER
|
||||
input:
|
||||
additionalInstructions: |-
|
||||
You are a marketing copywriter. Given a block of text describing features, audience, and USPs,
|
||||
compose a compelling marketing copy (like a newsletter section) that highlights these points.
|
||||
Output should be short (around 150 words), output just the copy as a single text block.
|
||||
name: WriterAgent
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: invoke_editor
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_ANSWER
|
||||
input:
|
||||
additionalInstructions: |-
|
||||
You are an editor. Given the draft copy, correct grammar, improve clarity, ensure consistent tone,
|
||||
give format and make it polished. Output the final improved copy as a single text block.
|
||||
name: EditorAgent
|
||||
|
||||
@@ -2,27 +2,8 @@
|
||||
# This workflow demonstrates conversation between two agents: a student and a teacher.
|
||||
# The student attempts to solve the input problem and the teacher provides guidance.
|
||||
#
|
||||
# For this workflow, two agents are used, each with a prompt specific to their role.
|
||||
#
|
||||
# Student:
|
||||
# See: ./setup/StudentAgent.yaml
|
||||
#
|
||||
# With instructions:
|
||||
#
|
||||
# Your job is help a math teacher practice teaching by making intentional mistakes.
|
||||
# You Attempt to solve the given math problem, but with intentional mistakes so the teacher can help.
|
||||
# Always incorporate the teacher's advice to fix your next response.
|
||||
# You have the math-skills of a 6th grader.
|
||||
|
||||
# Teacher:
|
||||
# See: ./setup/TeacherAgent.yaml
|
||||
#
|
||||
# With instructions:
|
||||
#
|
||||
# Review and coach the student's approach to solving the given math problem.
|
||||
# Don't repeat the solution or try and solve it.
|
||||
# If the student has demonstrated comprehension and responded to all of your feedback,
|
||||
# give the student your congratulations by using the word "congratulations".
|
||||
# Example input:
|
||||
# How would you compute the value of PI?
|
||||
#
|
||||
kind: Workflow
|
||||
trigger:
|
||||
@@ -35,13 +16,13 @@ trigger:
|
||||
id: question_student
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_STUDENT
|
||||
name: StudentAgent
|
||||
|
||||
- kind: InvokeAzureAgent
|
||||
id: question_teacher
|
||||
conversationId: =System.ConversationId
|
||||
agent:
|
||||
name: =Env.FOUNDRY_AGENT_TEACHER
|
||||
name: TeacherAgent
|
||||
output:
|
||||
messages: Local.TeacherResponse
|
||||
|
||||
|
||||
@@ -1,28 +1,17 @@
|
||||
# Declarative Workflows
|
||||
|
||||
This folder contains sample workflow definitions than be ran using the
|
||||
[Declarative Workflow](../dotnet/samples/GettingStarted/Workflows/Declarative/ExecuteWorkflow) demo.
|
||||
A _Declarative Workflow_ is defined as a single YAML file and
|
||||
may be executed locally no different from any regular `Workflow` that is defined by code.
|
||||
|
||||
Each workflow is defined in a single YAML file and contains
|
||||
comments with additional information specific to that workflow.
|
||||
|
||||
A _Declarative Workflow_ may be executed locally no different from any `Workflow` defined by code.
|
||||
The difference is that the workflow definition is loaded from a YAML file instead of being defined in code.
|
||||
The difference is that the workflow definition is loaded from a YAML file instead of being defined in code:
|
||||
|
||||
```c#
|
||||
Workflow<string> workflow = DeclarativeWorkflowBuilder.Build<string>("HelloWorld.yaml", options);
|
||||
Workflow workflow = DeclarativeWorkflowBuilder.Build<string>("HelloWorld.yaml", options);
|
||||
```
|
||||
|
||||
Workflows may also be hosted in your _Azure Foundry Project_.
|
||||
These example workflows may be executed by the workflow
|
||||
[Samples](../dotnet/samples/GettingStarted/Workflows/Declarative)
|
||||
that are present in this repository.
|
||||
|
||||
> _Python_ support in the works!
|
||||
|
||||
#### Agents
|
||||
|
||||
The sample workflows rely on agents defined in your Azure Foundry Project.
|
||||
|
||||
To create agents, run the [`Create.ps1`](./setup) script.
|
||||
This will create the agents used in the sample workflows in your Azure Foundry Project and format a script you can copy and use to configure your environment.
|
||||
|
||||
> Note: `Create.ps1` relies upon the `FOUNDRY_PROJECT_ENDPOINT`, `FOUNDRY_MODEL_DEPLOYMENT_NAME`, and `FOUNDRY_CONNECTION_GROUNDING_TOOL` settings.
|
||||
See [README.md](../dotnet/samples/GettingStarted/Workflows/Declarative/README.md) from the demo for configuration details.
|
||||
> See the [README.md](../dotnet/samples/GettingStarted/Workflows/Declarative/README.md)
|
||||
associated with the samples for configuration details.
|
||||
|
||||
@@ -1,405 +0,0 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
[Aa][Rr][Mm]64[Ee][Cc]/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
# but not Directory.Build.rsp, as it configures directory-level build defaults
|
||||
!Directory.Build.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
*.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# AWS SAM Build and Temporary Artifacts folder
|
||||
.aws-sam
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
||||
@@ -1,10 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: ResearchAnalyst
|
||||
description: Demo agent for DeepResearch workflow
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
tools:
|
||||
- type: bing_grounding
|
||||
options:
|
||||
tool_connections:
|
||||
- ${FOUNDRY_CONNECTION_GROUNDING_TOOL}
|
||||
@@ -1,7 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: ResearchCoder
|
||||
description: Demo agent for DeepResearch workflow
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
tools:
|
||||
- type: code_interpreter
|
||||
@@ -1,3 +0,0 @@
|
||||
pushd ./CreateAgents
|
||||
dotnet run
|
||||
popd
|
||||
@@ -1,20 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<UserSecretsId>5ee045b0-aea3-4f08-8d31-32d1a6f8fed0</UserSecretsId>
|
||||
<NoWarn>SKEXP0110</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.SemanticKernel.Agents.AzureAI" Version="1.64.0-preview" />
|
||||
<PackageReference Include="Microsoft.SemanticKernel.Agents.Yaml" Version="1.64.0-beta" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,15 +0,0 @@
|
||||
<Solution>
|
||||
<Folder Name="/Agents/">
|
||||
<File Path="../AnalystAgent.yaml" />
|
||||
<File Path="../CoderAgent.yaml" />
|
||||
<File Path="../Create.ps1" />
|
||||
<File Path="../ManagerAgent.yaml" />
|
||||
<File Path="../QuestionAgent.yaml" />
|
||||
<File Path="../README.md" />
|
||||
<File Path="../StudentAgent.yaml" />
|
||||
<File Path="../TeacherAgent.yaml" />
|
||||
<File Path="../WeatherAgent.yaml" />
|
||||
<File Path="../WebAgent.yaml" />
|
||||
</Folder>
|
||||
<Project Path="CreateAgents.csproj" />
|
||||
</Solution>
|
||||
@@ -1,68 +0,0 @@
|
||||
using Azure.AI.Agents.Persistent;
|
||||
using Azure.AI.Projects;
|
||||
using Azure.Identity;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.SemanticKernel;
|
||||
using Microsoft.SemanticKernel.Agents;
|
||||
using Microsoft.SemanticKernel.Agents.AzureAI;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
// Define FOUNDRY_PROJECT_ENDPOINT as a user-secret or environment variable that
|
||||
// points to your Foundry project endpoint.
|
||||
|
||||
IConfigurationRoot config =
|
||||
new ConfigurationBuilder()
|
||||
.AddUserSecrets(Assembly.GetExecutingAssembly())
|
||||
.AddEnvironmentVariables()
|
||||
.Build();
|
||||
|
||||
string projectEndpoint = config["FOUNDRY_PROJECT_ENDPOINT"] ?? throw new InvalidOperationException("Undefined configuration: FOUNDRY_PROJECT_ENDPOINT");
|
||||
Console.WriteLine($"{Environment.NewLine}Foundry: {projectEndpoint}");
|
||||
|
||||
StringBuilder scriptBuilder = new();
|
||||
StringBuilder secretBuilder = new();
|
||||
string[] files = args.Length > 0 ? args : Directory.GetFiles(@"..\", "*.yaml");
|
||||
foreach (string file in files)
|
||||
{
|
||||
string agentText = await File.ReadAllTextAsync(file);
|
||||
|
||||
PersistentAgentsClient clientAgents = new(projectEndpoint, new AzureCliCredential());
|
||||
|
||||
AIProjectClient clientProject = new(new Uri(projectEndpoint), new AzureCliCredential());
|
||||
|
||||
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
|
||||
kernelBuilder.Services.AddSingleton(clientAgents);
|
||||
kernelBuilder.Services.AddSingleton(clientProject);
|
||||
Kernel kernel = kernelBuilder.Build();
|
||||
|
||||
AzureAIAgentFactory factory = new();
|
||||
Agent? agent = await factory.CreateAgentFromYamlAsync(agentText, new AgentCreationOptions() { Kernel = kernel }, config);
|
||||
if (agent is null)
|
||||
{
|
||||
Console.WriteLine("Unexpected failure creating agent...");
|
||||
continue;
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(Path.GetFileName(file));
|
||||
Console.WriteLine($" Id: {agent?.Id ?? "???"}");
|
||||
Console.WriteLine($" Name: {agent?.Name ?? agent?.Id}");
|
||||
Console.WriteLine($" Note: {agent?.Description}");
|
||||
|
||||
scriptBuilder.AppendLine($"$env:FOUNDRY_AGENT_{agent?.Name?.ToUpperInvariant()} = '{agent?.Id}'");
|
||||
secretBuilder.AppendLine($"dotnet user-secrets set FOUNDRY_AGENT_{agent?.Name?.ToUpperInvariant()} {agent?.Id}");
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("To set these environment variables in your shell, run:");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(scriptBuilder);
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("To define user secrets, run:");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(secretBuilder);
|
||||
Console.WriteLine();
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||
</packageSources>
|
||||
<packageSourceMapping>
|
||||
<packageSource key="nuget.org">
|
||||
<package pattern="*" />
|
||||
</packageSource>
|
||||
</packageSourceMapping>
|
||||
</configuration>
|
||||
@@ -1,5 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: ResearchManager
|
||||
description: Demo agent for DeepResearch workflow
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
@@ -1,10 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: Answer
|
||||
description: Demo agent for Question workflow
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
tools:
|
||||
- type: bing_grounding
|
||||
options:
|
||||
tool_connections:
|
||||
- ${FOUNDRY_CONNECTION_GROUNDING_TOOL}
|
||||
@@ -1,14 +0,0 @@
|
||||
# Agent Definitions
|
||||
|
||||
The sample workflows rely on agents defined in your Azure Foundry Project.
|
||||
|
||||
These agent definitions are based on _Semantic Kernel_'s _Declarative Agent_ feature:
|
||||
|
||||
- [Semantic Kernel Agents](https://github.com/microsoft/semantic-kernel/tree/main/dotnet/src/Agents)
|
||||
- [Declarative Agent Extensions](https://github.com/microsoft/semantic-kernel/tree/main/dotnet/src/Agents/Yaml)
|
||||
- [Sample](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/samples/GettingStartedWithAgents/AzureAIAgent/Step08_AzureAIAgent_Declarative.cs)
|
||||
|
||||
To create agents, run the [`Create.ps1`](./Create.ps1) script.
|
||||
This will create the agents for the sample workflows in your Azure Foundry Project and format a script you can copy and use to configure your environment.
|
||||
|
||||
> Note: `Create.ps1` relies upon the `FOUNDRY_PROJECT_ENDPOINT` setting. See [README.md](../../dotnet/samples/GettingStarted/Workflows/Declarative/README.md) from the demo for configuration details.
|
||||
@@ -1,10 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: Student
|
||||
description: Student agent for MathChat workflow
|
||||
instructions: |-
|
||||
Your job is help a math teacher practice teaching by making intentional mistakes.
|
||||
You Attempt to solve the given math problem, but with intentional mistakes so the teacher can help.
|
||||
Always incorporate the teacher's advice to fix your next response.
|
||||
You have the math-skills of a 6th grader.
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
@@ -1,10 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: Teacher
|
||||
description: Teacher agent for MathChat workflow
|
||||
instructions: |-
|
||||
Review and coach the student's approach to solving the given math problem.
|
||||
Don't repeat the solution or try and solve it.
|
||||
If the student has demonstrated comprehension and responded to all of your feedback,
|
||||
give the student your congraluations by using the word "congratulations".
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
@@ -1,62 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: ResearchWeather
|
||||
description: Demo agent for DeepResearch workflow
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
tools:
|
||||
- type: openapi
|
||||
id: GetCurrentWeather
|
||||
description: Retrieves current weather data for a location based on wttr.in.
|
||||
options:
|
||||
specification: |
|
||||
{
|
||||
"openapi": "3.1.0",
|
||||
"info": {
|
||||
"title": "Get weather data",
|
||||
"description": "Retrieves current weather data for a location based on wttr.in.",
|
||||
"version": "v1.0.0"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://wttr.in"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/{location}": {
|
||||
"get": {
|
||||
"description": "Get weather information for a specific location",
|
||||
"operationId": "GetCurrentWeather",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "location",
|
||||
"in": "path",
|
||||
"description": "City or location to retrieve the weather for",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful response",
|
||||
"content": {
|
||||
"text/plain": {
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Location not found"
|
||||
}
|
||||
},
|
||||
"deprecated": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
type: foundry_agent
|
||||
name: ResearchWeb
|
||||
description: Demo agent for DeepResearch workflow
|
||||
instructions: |-
|
||||
Only provide requested information in a way that is throughfully organized and formatted.
|
||||
Never include any analysis or code.
|
||||
Never generate a file.
|
||||
Avoid repeating yourself.
|
||||
model:
|
||||
id: ${FOUNDRY_MODEL_DEPLOYMENT_NAME}
|
||||
tools:
|
||||
- type: bing_grounding
|
||||
options:
|
||||
tool_connections:
|
||||
- ${FOUNDRY_CONNECTION_GROUNDING_TOOL}
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
"openapi": "3.1.0",
|
||||
"info": {
|
||||
"title": "Get weather data",
|
||||
"description": "Retrieves current weather data for a location based on wttr.in.",
|
||||
"version": "v1.0.0"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://wttr.in"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/{location}": {
|
||||
"get": {
|
||||
"description": "Get weather information for a specific location",
|
||||
"operationId": "GetCurrentWeather",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "location",
|
||||
"in": "path",
|
||||
"description": "City or location to retrieve the weather for",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful response",
|
||||
"content": {
|
||||
"text/plain": {
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Location not found"
|
||||
}
|
||||
},
|
||||
"deprecated": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"schemas": {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user