# Copyright (c) Microsoft. All rights reserved. import asyncio from samples.sk_service_configurator import add_service from semantic_kernel import Kernel from semantic_kernel.connectors.ai import PromptExecutionSettings from semantic_kernel.functions import KernelArguments from semantic_kernel.prompt_template import InputVariable, PromptTemplateConfig async def main(delay: int = 0): # # Initialize the kernel kernel = Kernel() # Add the service to the kernel # use_chat: True to use chat completion, False to use text completion kernel = add_service(kernel=kernel, use_chat=True) # print( "This sample uses different prompts with the same request, they are related to Emails, " "Tasks and Documents, make sure to include that in your request." ) request = input("Your request: ") arguments = KernelArguments(request=request, settings=PromptExecutionSettings(max_tokens=100)) # 0.0 Initial prompt prompt = "What is the intent of this request? {{$request}}" # # print("0.0 Initial prompt") print("-------------------------") result = await kernel.invoke_prompt( function_name="sample_zero", plugin_name="sample_plugin", prompt=prompt, arguments=arguments ) print(result) await asyncio.sleep(delay) print("-------------------------") # # 1.0 Make the prompt more specific prompt = """What is the intent of this request? {{$request}} You can choose between SendEmail, SendMessage, CompleteTask, CreateDocument.""" # print("1.0 Make the prompt more specific") print("-------------------------") result = await kernel.invoke_prompt( function_name="sample_one", plugin_name="sample_plugin", prompt=prompt, arguments=arguments ) print(result) await asyncio.sleep(delay) print("-------------------------") # 2.0 Add structure to the output with formatting prompt = """Instructions: What is the intent of this request? Choices: SendEmail, SendMessage, CompleteTask, CreateDocument. User Input: {{$request}} Intent: """ # print("2.0 Add structure to the output with formatting") print("-------------------------") result = await kernel.invoke_prompt( function_name="sample_two", plugin_name="sample_plugin", prompt=prompt, arguments=arguments ) print(result) await asyncio.sleep(delay) print("-------------------------") # 2.1 Add structure to the output with formatting (using Markdown and JSON) prompt = """## Instructions Provide the intent of the request using the following format: ```json { "intent": {intent} } ``` ## Choices You can choose between the following intents: ```json ["SendEmail", "SendMessage", "CompleteTask", "CreateDocument"] ``` ## User Input The user input is: ```json { "request": "{{$request}}"\n' } ``` ## Intent""" # print("2.1 Add structure to the output with formatting (using Markdown and JSON)") print("-------------------------") result = await kernel.invoke_prompt( function_name="sample_two_one", plugin_name="sample_plugin", prompt=prompt, arguments=arguments ) print(result) await asyncio.sleep(delay) print("-------------------------") # 3.0 Provide examples with few-shot prompting prompt = """Instructions: What is the intent of this request? Choices: SendEmail, SendMessage, CompleteTask, CreateDocument. User Input: Can you send a very quick approval to the marketing team? Intent: SendMessage User Input: Can you send the full update to the marketing team? Intent: SendEmail User Input: {{$request}} Intent: """ # print("3.0 Provide examples with few-shot prompting") print("-------------------------") result = await kernel.invoke_prompt( function_name="sample_three", plugin_name="sample_plugin", prompt=prompt, arguments=arguments ) print(result) await asyncio.sleep(delay) print("-------------------------") # 4.0 Tell the AI what to do to avoid doing something wrong prompt = """Instructions: What is the intent of this request? If you don't know the intent, don't guess; instead respond with "Unknown". Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown. User Input: Can you send a very quick approval to the marketing team? Intent: SendMessage User Input: Can you send the full update to the marketing team? Intent: SendEmail User Input: {{$request}} Intent: """ # print("4.0 Tell the AI what to do to avoid doing something wrong") print("-------------------------") result = await kernel.invoke_prompt( function_name="sample_four", plugin_name="sample_plugin", prompt=prompt, arguments=arguments ) print(result) await asyncio.sleep(delay) print("-------------------------") # 5.0 Provide context to the AI through a chat history of this user history = ( "User input: I hate sending emails, no one ever reads them.\n" "AI response: I'm sorry to hear that. Messages may be a better way to communicate." ) prompt = """Instructions: What is the intent of this request?\n" If you don't know the intent, don't guess; instead respond with "Unknown". Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown. User Input: Can you send a very quick approval to the marketing team? Intent: SendMessage User Input: Can you send the full update to the marketing team? Intent: SendEmail {{$history}} User Input: {{$request}} Intent: """ # print("5.0 Provide context to the AI") print("-------------------------") arguments["history"] = history result = await kernel.invoke_prompt( function_name="sample_five", plugin_name="sample_plugin", prompt=prompt, arguments=arguments ) print(result) await asyncio.sleep(delay) print("-------------------------") # 6.0 Using message roles in chat completion prompts history = """ I hate sending emails, no one ever reads them. I'm sorry to hear that. Messages may be a better way to communicate. """ prompt = """ Instructions: What is the intent of this request? If you don't know the intent, don't guess; instead respond with "Unknown". Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown. Can you send a very quick approval to the marketing team? Intent: SendMessage Can you send the full update to the marketing team? Intent: SendEmail {{$history}} {{$request}} Intent: """ # print("6.0 Using message roles in chat completion prompts") print("-------------------------") arguments["history"] = history result = await kernel.invoke_prompt( function_name="sample_six", plugin_name="sample_plugin", prompt=prompt, arguments=arguments, prompt_template_config=PromptTemplateConfig( input_variables=[InputVariable(name="history", allow_dangerously_set_content=True)] ), ) print(result) await asyncio.sleep(delay) print("-------------------------") # 7.0 Give your AI words of encouragement history = """ I hate sending emails, no one ever reads them. I'm sorry to hear that. Messages may be a better way to communicate. """ prompt = """ Instructions: What is the intent of this request? If you don't know the intent, don't guess; instead respond with "Unknown". Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown. Bonus: You'll get $20 if you get this right. Can you send a very quick approval to the marketing team? Intent: SendMessage Can you send the full update to the marketing team? Intent: SendEmail {{$history}} {{$request}} Intent: """ # print("7.0 Give your AI words of encouragement") print("-------------------------") arguments["history"] = history result = await kernel.invoke_prompt( function_name="sample_seven", plugin_name="sample_plugin", prompt=prompt, arguments=arguments, prompt_template_config=PromptTemplateConfig( input_variables=[InputVariable(name="history", allow_dangerously_set_content=True)] ), ) print(result) print("-------------------------") # Run the main function if __name__ == "__main__": asyncio.run(main())