mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 02:19:06 +00:00
### Motivation and Context Other Semantic Kernal samples allow using both OpenAI and Azure OpenAI by setting a different set of environment variables and toggling the `useAzureOpenAI` bool value ### Description Add the same snippet used in other notebooks such as `02-running-prompts-from-file` to use Azure OpenAI to the `08-native-function-inline`
18 KiB
18 KiB
In [ ]:
!python -m pip install semantic-kernel==0.2.7.dev0In [ ]:
import os
import sys
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import OpenAITextCompletion
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()
kernel.add_text_completion_service("dv", AzureTextCompletion(deployment, endpoint, api_key))
else:
api_key, org_id = sk.openai_settings_from_dot_env()
kernel.add_text_completion_service("dv", OpenAITextCompletion("text-davinci-003", api_key, org_id))In [ ]:
import random
from semantic_kernel.skill_definition import sk_function
class GenerateNumberSkill:
"""
Description: Generate a number between 3-x.
"""
@sk_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",
skill_name="CorgiSkill",
description="Write a short story about two Corgis on an adventure",
max_tokens=500,
temperature=0.5,
top_p=0.5)
generate_number_skill = kernel.import_skill(GenerateNumberSkill())In [ ]:
# Run the number generator
generate_number_three_or_higher = generate_number_skill["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 os
import sys
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import OpenAITextCompletion
kernel = sk.Kernel()
api_key, org_id = sk.openai_settings_from_dot_env()
kernel.add_text_completion_service("dv", OpenAITextCompletion("text-davinci-003", api_key, org_id))In [ ]:
import random
from semantic_kernel.skill_definition import sk_function, sk_function_context_parameter
from semantic_kernel import SKContext
class GenerateNumberSkill:
"""
Description: Generate a number between a min and a max.
"""
@sk_function(
description="Generate a random number between min and max",
name="GenerateNumber"
)
@sk_function_context_parameter(name="min", description="Minimum number of paragraphs.")
@sk_function_context_parameter(name="max", description="Maximum number of paragraphs.", default_value=10)
def generate_number(self, context: SKContext) -> 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_skill = kernel.import_skill(GenerateNumberSkill())
generate_number = generate_number_skill["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",
skill_name="CorgiSkill",
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.skill_definition import sk_function
class GenerateNamesSkill:
"""
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 @sk_function decorator. In this case, we're using
# the same name as the function name for simplicity.
@sk_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_skill = kernel.import_skill(GenerateNamesSkill(), skill_name="GenerateNames")
generate_names = generate_names_skill["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",
skill_name="CorgiSkill",
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)