Updates the requirements on [pymilvus](https://github.com/milvus-io/pymilvus) to permit the latest version. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/milvus-io/pymilvus/releases">pymilvus's releases</a>.</em></p> <blockquote> <h2>PyMilvus v2.6.0 Release Notes</h2> <h2>New Features</h2> <ol> <li>Add APIs in MilvusClient</li> </ol> <ul> <li>enhance: add describe and alter database in MilvusClient by <a href="https://github.com/smellthemoon"><code>@smellthemoon</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2433">milvus-io/pymilvus#2433</a></li> <li>enhance: support milvus-client iterator by <a href="https://github.com/MrPresent-Han"><code>@MrPresent-Han</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2461">milvus-io/pymilvus#2461</a></li> <li>enhance: Enable resource group api in milvus client by <a href="https://github.com/weiliu1031"><code>@weiliu1031</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2513">milvus-io/pymilvus#2513</a></li> <li>enhance: add release_collection, drop_index, create_partition, drop_partition, load_partition and release_partition by <a href="https://github.com/brcarry"><code>@brcarry</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2525">milvus-io/pymilvus#2525</a></li> <li>enhance: enable describe_replica api in milvus client by <a href="https://github.com/weiliu1031"><code>@weiliu1031</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2541">milvus-io/pymilvus#2541</a></li> <li>enhance: support recalls for milvus_client by <a href="https://github.com/chasingegg"><code>@chasingegg</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2552">milvus-io/pymilvus#2552</a></li> <li>enhance: add use_database by <a href="https://github.com/czs007"><code>@czs007</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2491">milvus-io/pymilvus#2491</a></li> </ul> <ol start="2"> <li>Add AsyncMilvusClient</li> </ol> <ul> <li>[FEAT] Asyncio support by <a href="https://github.com/brcarry"><code>@brcarry</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2411">milvus-io/pymilvus#2411</a></li> <li>Add async DDL funcs & DDL examples by <a href="https://github.com/Shawnzheng011019"><code>@Shawnzheng011019</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2852">milvus-io/pymilvus#2852</a></li> </ul> <ol start="3"> <li>Other features</li> </ol> <ul> <li>enhance: support Int8Vector by <a href="https://github.com/cydrain"><code>@cydrain</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2611">milvus-io/pymilvus#2611</a></li> <li>feat: support recalls field in SearchResult by <a href="https://github.com/chasingegg"><code>@chasingegg</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2390">milvus-io/pymilvus#2390</a></li> <li>enhance: Support Python3.13 and upgrade grpcio range by <a href="https://github.com/XuanYang-cn"><code>@XuanYang-cn</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2684">milvus-io/pymilvus#2684</a></li> <li>enhance: support run analyzer return detail token by <a href="https://github.com/aoiasd"><code>@aoiasd</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2679">milvus-io/pymilvus#2679</a></li> <li>enhance: Add force_drop parameter to drop_role method for role deletion by <a href="https://github.com/SimFG"><code>@SimFG</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2705">milvus-io/pymilvus#2705</a></li> <li>enhance: add property func for AnalyzeToken by <a href="https://github.com/aoiasd"><code>@aoiasd</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2704">milvus-io/pymilvus#2704</a></li> <li>enhance: grant/revoke v2 optional db and collection params by <a href="https://github.com/shaoting-huang"><code>@shaoting-huang</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2386">milvus-io/pymilvus#2386</a></li> <li>extend unlimted offset for query iterator(<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2418">#2418</a>) by <a href="https://github.com/MrPresent-Han"><code>@MrPresent-Han</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2419">milvus-io/pymilvus#2419</a></li> <li>enhance: alterindex & altercollection supports altering properties by <a href="https://github.com/JsDove"><code>@JsDove</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2406">milvus-io/pymilvus#2406</a></li> <li>enhance: alterdatabase support delete property by <a href="https://github.com/JsDove"><code>@JsDove</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2435">milvus-io/pymilvus#2435</a></li> <li>enhance: support hints param by <a href="https://github.com/chasingegg"><code>@chasingegg</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2408">milvus-io/pymilvus#2408</a></li> <li>enhance: create database support properties by <a href="https://github.com/JsDove"><code>@JsDove</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2448">milvus-io/pymilvus#2448</a></li> <li>enhance: Add <code>db_name</code> parameter at <code>bulk_import</code> by <a href="https://github.com/counter2015"><code>@counter2015</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2446">milvus-io/pymilvus#2446</a></li> <li>enhance: add search iterator v2 by <a href="https://github.com/PwzXxm"><code>@PwzXxm</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2395">milvus-io/pymilvus#2395</a></li> <li>enhance: simplify the structure of search_params by <a href="https://github.com/smellthemoon"><code>@smellthemoon</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2507">milvus-io/pymilvus#2507</a></li> <li>enhance: Remove long deprecated Milvus class by <a href="https://github.com/XuanYang-cn"><code>@XuanYang-cn</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2544">milvus-io/pymilvus#2544</a></li> <li>enhance: Use new model pkg by <a href="https://github.com/junjiejiangjjj"><code>@junjiejiangjjj</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2595">milvus-io/pymilvus#2595</a></li> <li>enhance: Add schema update time verification to insert and upsert to use cache by <a href="https://github.com/JsDove"><code>@JsDove</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2551">milvus-io/pymilvus#2551</a></li> <li>enhance: describecollection output add created_timestamp by <a href="https://github.com/JsDove"><code>@JsDove</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2618">milvus-io/pymilvus#2618</a></li> <li>feat: add external filter func for search iterator v2 by <a href="https://github.com/PwzXxm"><code>@PwzXxm</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2639">milvus-io/pymilvus#2639</a></li> <li>enhance: support run analyzer by <a href="https://github.com/aoiasd"><code>@aoiasd</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2622">milvus-io/pymilvus#2622</a></li> <li>weighted reranker to allow skip score normalization by <a href="https://github.com/zhengbuqian"><code>@zhengbuqian</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2708">milvus-io/pymilvus#2708</a></li> <li>enhance: Support AddCollectionField API by <a href="https://github.com/congqixia"><code>@congqixia</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2722">milvus-io/pymilvus#2722</a></li> <li>Add 1-Way and 2-Way TLS Support to Bulk Import Functions by <a href="https://github.com/abd-770"><code>@abd-770</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2672">milvus-io/pymilvus#2672</a></li> <li>enhance: Use SearchResult in MilvusClient by <a href="https://github.com/XuanYang-cn"><code>@XuanYang-cn</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2735">milvus-io/pymilvus#2735</a></li> <li>Support rerank by <a href="https://github.com/junjiejiangjjj"><code>@junjiejiangjjj</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2729">milvus-io/pymilvus#2729</a></li> <li>feat: suppoprt multi analyzer params by <a href="https://github.com/aoiasd"><code>@aoiasd</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2747">milvus-io/pymilvus#2747</a></li> <li>Add funciton checker by <a href="https://github.com/junjiejiangjjj"><code>@junjiejiangjjj</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2760">milvus-io/pymilvus#2760</a></li> <li>enhance: Support run analyzer by collection and field by <a href="https://github.com/aoiasd"><code>@aoiasd</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2822">milvus-io/pymilvus#2822</a></li> <li>feat: support load collection/partition with priority(<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2835">#2835</a>) by <a href="https://github.com/MrPresent-Han"><code>@MrPresent-Han</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2836">milvus-io/pymilvus#2836</a></li> <li>enhance: optimize perf for large topk(<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2848">#2848</a>) by <a href="https://github.com/MrPresent-Han"><code>@MrPresent-Han</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2849">milvus-io/pymilvus#2849</a></li> <li>enhance: Add usage guide to manage MilvusClient by <a href="https://github.com/XuanYang-cn"><code>@XuanYang-cn</code></a> in <a href="https://redirect.github.com/milvus-io/pymilvus/pull/2907">milvus-io/pymilvus#2907</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/milvus-io/pymilvus/commit/1e56ce7d3159883108fb581d820572c1ab9a4c11"><code>1e56ce7</code></a> enhance: Update milvus-proto and readme (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2921">#2921</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/75052b1b7cada14585eed4e7d7aa68ac2f541306"><code>75052b1</code></a> enhance: Add usage guide to manage MilvusClient (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2907">#2907</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/9f44053086002d782cf7f81576a7a0f2bcc9f5ad"><code>9f44053</code></a> add example code for language identifier and multi analyzer (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2919">#2919</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/058836de26f84c4c9e82490e3ef76a6a122b8dff"><code>058836d</code></a> fix: Return new pk value for upsert when autoid=true (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2914">#2914</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/bbc6777565694dc2d6479177c5d2136256d332a9"><code>bbc6777</code></a> [cherry-pick] Compatible with the default behavior of free on the cloud (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2913">#2913</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/45080c39c59b5dbc8a5766d8afb9c08bba8d3896"><code>45080c3</code></a> fix: Aviod coping functions when init CollectionSchema (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2902">#2902</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/52b8461c5bee1466c4678f3bc029a9cda4422bd0"><code>52b8461</code></a> [cherry-pick] bulk_import add stageName/dataPaths parameter (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2905">#2905</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/a8c3120622290d429dc3b12ece643248dc2f5d76"><code>a8c3120</code></a> [cherry-pick] support stage (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2895">#2895</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/3653effa88a8af263690ca88b53dc529da3082fb"><code>3653eff</code></a> fix: Tidy alias configs when connect fails (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2900">#2900</a>)</li> <li><a href="https://github.com/milvus-io/pymilvus/commit/728791a7de7d6eb0a4201ba755ea0675bb6976a0"><code>728791a</code></a> enhance: Store alias before wait for ready (<a href="https://redirect.github.com/milvus-io/pymilvus/issues/2894">#2894</a>)</li> <li>Additional commits viewable in <a href="https://github.com/milvus-io/pymilvus/compare/v2.3.0...v2.6.0">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Get Started with Semantic Kernel Python
Highlights
- Flexible Agent Framework: build, orchestrate, and deploy AI agents and multi-agent systems
- Multi-Agent Systems: Model workflows and collaboration between AI specialists
- Plugin Ecosystem: Extend with Python, OpenAPI, Model Context Protocol (MCP), and more
- LLM Support: OpenAI, Azure OpenAI, Hugging Face, Mistral, Vertex AI, ONNX, Ollama, NVIDIA NIM, and others
- Vector DB Support: Azure AI Search, Elasticsearch, Chroma, and more
- Process Framework: Build structured business processes with workflow modeling
- Multimodal: Text, vision, audio
Quick Install
pip install --upgrade semantic-kernel
# Optional: Add integrations
pip install --upgrade semantic-kernel[hugging_face]
pip install --upgrade semantic-kernel[all]
Supported Platforms:
- Python: 3.10+
- OS: Windows, macOS, Linux
1. Setup API Keys
Set as environment variables, or create a .env file at your project root:
OPENAI_API_KEY=sk-...
OPENAI_CHAT_MODEL_ID=...
...
AZURE_OPENAI_API_KEY=...
AZURE_OPENAI_ENDPOINT=...
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME=...
...
You can also override environment variables by explicitly passing configuration parameters to the AI service constructor:
chat_service = AzureChatCompletion(
api_key=...,
endpoint=...,
deployment_name=...,
api_version=...,
)
See the following setup guide for more information.
2. Use the Kernel for Prompt Engineering
Create prompt functions and invoke them via the Kernel:
import asyncio
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
from semantic_kernel.functions import KernelArguments
kernel = Kernel()
kernel.add_service(OpenAIChatCompletion())
prompt = """
1) A robot may not injure a human being...
2) A robot must obey orders given it by human beings...
3) A robot must protect its own existence...
Give me the TLDR in exactly {{$num_words}} words."""
async def main():
result = await kernel.invoke_prompt(prompt, arguments=KernelArguments(num_words=5))
print(result)
asyncio.run(main())
# Output: Protect humans, obey, self-preserve, prioritized.
3. Directly Use AI Services (No Kernel Required)
You can use the AI service classes directly for advanced workflows:
import asyncio
import asyncio
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion, OpenAIChatPromptExecutionSettings
from semantic_kernel.contents import ChatHistory
async def main():
service = OpenAIChatCompletion()
settings = OpenAIChatPromptExecutionSettings()
chat_history = ChatHistory(system_message="You are a helpful assistant.")
chat_history.add_user_message("Write a haiku about Semantic Kernel.")
response = await service.get_chat_message_content(chat_history=chat_history, settings=settings)
print(response.content)
"""
Output:
Thoughts weave through context,
Semantic threads interlace—
Kernel sparks meaning.
"""
asyncio.run(main())
4. Build an Agent with Plugins and Tools
Add Python functions as plugins or Pydantic models as structured outputs;
Enhance your agent with custom tools (plugins) and structured output:
import asyncio
from typing import Annotated
from pydantic import BaseModel
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion, OpenAIChatPromptExecutionSettings
from semantic_kernel.functions import kernel_function, KernelArguments
class MenuPlugin:
@kernel_function(description="Provides a list of specials from the menu.")
def get_specials(self) -> Annotated[str, "Returns the specials from the menu."]:
return """
Special Soup: Clam Chowder
Special Salad: Cobb Salad
Special Drink: Chai Tea
"""
@kernel_function(description="Provides the price of the requested menu item.")
def get_item_price(
self, menu_item: Annotated[str, "The name of the menu item."]
) -> Annotated[str, "Returns the price of the menu item."]:
return "$9.99"
class MenuItem(BaseModel):
# Used for structured outputs
price: float
name: str
async def main():
# Configure structured outputs format
settings = OpenAIChatPromptExecutionSettings()
settings.response_format = MenuItem
# Create agent with plugin and settings
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="SK-Assistant",
instructions="You are a helpful assistant.",
plugins=[MenuPlugin()],
arguments=KernelArguments(settings)
)
response = await agent.get_response("What is the price of the soup special?")
print(response.content)
# Output:
# The price of the Clam Chowder, which is the soup special, is $9.99.
asyncio.run(main())
You can explore additional getting started agent samples here.
5. Multi-Agent Orchestration
Coordinate a group of agents to iteratively solve a problem or refine content together:
import asyncio
from semantic_kernel.agents import ChatCompletionAgent, GroupChatOrchestration, RoundRobinGroupChatManager
from semantic_kernel.agents.runtime import InProcessRuntime
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
def get_agents():
return [
ChatCompletionAgent(
name="Writer",
instructions="You are a creative content writer. Generate and refine slogans based on feedback.",
service=AzureChatCompletion(),
),
ChatCompletionAgent(
name="Reviewer",
instructions="You are a critical reviewer. Provide detailed feedback on proposed slogans.",
service=AzureChatCompletion(),
),
]
async def main():
agents = get_agents()
group_chat = GroupChatOrchestration(
members=agents,
manager=RoundRobinGroupChatManager(max_rounds=5),
)
runtime = InProcessRuntime()
runtime.start()
result = await group_chat.invoke(
task="Create a slogan for a new electric SUV that is affordable and fun to drive.",
runtime=runtime,
)
value = await result.get()
print(f"Final Slogan: {value}")
# Example Output:
# Final Slogan: "Feel the Charge: Adventure Meets Affordability in Your New Electric SUV!"
await runtime.stop_when_idle()
if __name__ == "__main__":
asyncio.run(main())
For orchestration-focused examples, see these orchestration samples.
More Examples & Notebooks
- Getting Started with Agents: Practical agent orchestration and tool use
- Getting Started with Processes: Modeling structured workflows with the Process framework
- Concept Samples: Advanced scenarios, integrations, and SK patterns
- Getting Started Notebooks: Interactive Python notebooks for rapid experimentation