# 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())