mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 02:19:06 +00:00
### Motivation and Context The .NET SDK uses the `Kernel` prefix instead of `SK` for the context, function, model, etc. classes. This PR aligns the Python package with that policy. Fixes #4561 ### Contribution Checklist - [X] The code builds clean without any errors or warnings - [X] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [X] All unit tests pass, and I have added new tests where possible - [X] I didn't break anyone 😄
19 KiB
19 KiB
In [ ]:
!python -m pip install semantic-kernel==0.4.6.dev0In [ ]:
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import (
AzureChatCompletion,
OpenAIChatCompletion,
)
kernel = sk.Kernel()
useAzureOpenAI = False
# Configure AI service used by the kernel
if useAzureOpenAI:
deployment, api_key, endpoint = sk.azure_openai_settings_from_dot_env()
azure_chat_service = AzureChatCompletion(
deployment_name="turbo", endpoint=endpoint, api_key=api_key
) # set the deployment name to the value of your chat model
kernel.add_chat_service("chat_completion", azure_chat_service)
else:
api_key, org_id = sk.openai_settings_from_dot_env()
oai_chat_service = OpenAIChatCompletion(ai_model_id="gpt-3.5-turbo", api_key=api_key, org_id=org_id)
kernel.add_chat_service("chat-gpt", oai_chat_service)In [ ]:
import random
from semantic_kernel.plugin_definition import kernel_function
class GenerateNumberPlugin:
"""
Description: Generate a number between 3-x.
"""
@kernel_function(
description="Generate a random number between 3-x",
name="GenerateNumberThreeOrHigher",
)
def generate_number_three_or_higher(self, input: str) -> str:
"""
Generate a number between 3-<input>
Example:
"8" => rand(3,8)
Args:
input -- The upper limit for the random number generation
Returns:
int value
"""
try:
return str(random.randint(3, int(input)))
except ValueError as e:
print(f"Invalid input {input}")
raise eIn [ ]:
sk_prompt = """
Write a short story about two Corgis on an adventure.
The story must be:
- G rated
- Have a positive message
- No sexism, racism or other bias/bigotry
- Be exactly {{$input}} paragraphs long
"""
corgi_story = kernel.create_semantic_function(
prompt_template=sk_prompt,
function_name="CorgiStory",
plugin_name="CorgiPlugin",
description="Write a short story about two Corgis on an adventure",
max_tokens=500,
temperature=0.5,
top_p=0.5,
)
generate_number_plugin = kernel.import_plugin(GenerateNumberPlugin())In [ ]:
# Run the number generator
generate_number_three_or_higher = generate_number_plugin["GenerateNumberThreeOrHigher"]
number_result = generate_number_three_or_higher(6)
print(number_result)In [ ]:
story = await corgi_story.invoke_async(input=number_result.result)In [ ]:
print("Generating a corgi story exactly {} paragraphs long: ".format(number_result.result))
print("=====================================================")
print(story)In [ ]:
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import (
AzureChatCompletion,
OpenAIChatCompletion,
)
kernel = sk.Kernel()
useAzureOpenAI = False
# Configure AI service used by the kernel
if useAzureOpenAI:
deployment, api_key, endpoint = sk.azure_openai_settings_from_dot_env()
azure_chat_service = AzureChatCompletion(
deployment_name="turbo", endpoint=endpoint, api_key=api_key
) # set the deployment name to the value of your chat model
kernel.add_chat_service("chat_completion", azure_chat_service)
else:
api_key, org_id = sk.openai_settings_from_dot_env()
oai_chat_service = OpenAIChatCompletion(ai_model_id="gpt-3.5-turbo", api_key=api_key, org_id=org_id)
kernel.add_chat_service("chat-gpt", oai_chat_service)In [ ]:
import random
from semantic_kernel.plugin_definition import kernel_function, kernel_function_context_parameter
from semantic_kernel import KernelContext
class GenerateNumberPlugin:
"""
Description: Generate a number between a min and a max.
"""
@kernel_function(
description="Generate a random number between min and max",
name="GenerateNumber",
)
@kernel_function_context_parameter(name="min", description="Minimum number of paragraphs.")
@kernel_function_context_parameter(name="max", description="Maximum number of paragraphs.", default_value="10")
def generate_number(self, context: KernelContext) -> str:
"""
Generate a number between min-max
Example:
min="4" max="10" => rand(4,8)
Args:
min -- The lower limit for the random number generation
max -- The upper limit for the random number generation
Returns:
int value
"""
try:
return str(random.randint(int(context["min"]), int(context["max"])))
except ValueError as e:
print(f"Invalid input {context['min']} {context['max']}")
raise eIn [ ]:
generate_number_plugin = kernel.import_plugin(GenerateNumberPlugin())
generate_number = generate_number_plugin["GenerateNumber"]In [ ]:
sk_prompt = """
Write a short story about two Corgis on an adventure.
The story must be:
- G rated
- Have a positive message
- No sexism, racism or other bias/bigotry
- Be exactly {{$paragraph_count}} paragraphs long
- Be written in this language: {{$language}}
"""
corgi_story = kernel.create_semantic_function(
prompt_template=sk_prompt,
function_name="CorgiStory",
plugin_name="CorgiPlugin",
description="Write a short story about two Corgis on an adventure",
max_tokens=500,
temperature=0.5,
top_p=0.5,
)In [ ]:
context_variables = sk.ContextVariables(variables={"min": "1", "max": "5", "language": "Spanish"})In [ ]:
context_variables["paragraph_count"] = generate_number.invoke(variables=context_variables).resultIn [ ]:
# Pass the output to the semantic story function
story = await corgi_story.invoke_async(variables=context_variables)In [ ]:
print(
"Generating a corgi story exactly {} paragraphs long in {} language: ".format(
context_variables["paragraph_count"], context_variables["language"]
)
)
print("=====================================================")
print(story)In [ ]:
import random
from semantic_kernel.plugin_definition import kernel_function
class GenerateNamesPlugin:
"""
Description: Generate character names.
"""
# The default function name will be the name of the function itself, however you can override this
# by setting the name=<name override> in the @kernel_function decorator. In this case, we're using
# the same name as the function name for simplicity.
@kernel_function(description="Generate character names", name="generate_names")
def generate_names(self) -> str:
"""
Generate two names.
Returns:
str
"""
names = {"Hoagie", "Hamilton", "Bacon", "Pizza", "Boots", "Shorts", "Tuna"}
first_name = random.choice(list(names))
names.remove(first_name)
second_name = random.choice(list(names))
return f"{first_name}, {second_name}"In [ ]:
generate_names_plugin = kernel.import_plugin(GenerateNamesPlugin(), plugin_name="GenerateNames")
generate_names = generate_names_plugin["generate_names"]In [ ]:
sk_prompt = """
Write a short story about two Corgis on an adventure.
The story must be:
- G rated
- Have a positive message
- No sexism, racism or other bias/bigotry
- Be exactly {{$paragraph_count}} paragraphs long
- Be written in this language: {{$language}}
- The two names of the corgis are {{GenerateNames.generate_names}}
"""In [ ]:
corgi_story = kernel.create_semantic_function(
prompt_template=sk_prompt,
function_name="CorgiStory",
plugin_name="CorgiPlugin",
description="Write a short story about two Corgis on an adventure",
max_tokens=500,
temperature=0.5,
top_p=0.5,
)In [ ]:
context_variables = sk.ContextVariables(variables={"min": "1", "max": "5", "language": "Spanish"})
context_variables["paragraph_count"] = generate_number.invoke(variables=context_variables).resultIn [ ]:
# Pass the output to the semantic story function
story = await corgi_story.invoke_async(variables=context_variables)In [ ]:
print(
"Generating a corgi story exactly {} paragraphs long in {} language: ".format(
context_variables["paragraph_count"], context_variables["language"]
)
)
print("=====================================================")
print(story)