139 lines
3.6 KiB
Python
139 lines
3.6 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
import asyncio
|
|
|
|
from azure.identity import AzureCliCredential
|
|
|
|
from semantic_kernel.agents import ChatCompletionAgent, ChatHistoryAgentThread
|
|
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
|
|
from semantic_kernel.connectors.mcp import MCPStreamableHttpPlugin
|
|
|
|
"""
|
|
The following sample demonstrates how to create a chat completion agent that
|
|
answers questions about Github using a Semantic Kernel Plugin from a MCP server.
|
|
|
|
It uses the Azure OpenAI service to create a agent, so make sure to
|
|
set the required environment variables for the Azure AI Foundry service:
|
|
- AZURE_OPENAI_CHAT_DEPLOYMENT_NAME
|
|
- Optionally: AZURE_OPENAI_API_KEY
|
|
If this is not set, it's also possible to pass AsyncTokenCredential to the service, e.g. AzureCliCredential.
|
|
"""
|
|
|
|
|
|
# Simulate a conversation with the agent
|
|
USER_INPUTS = [
|
|
"How do I make a Python chat completion request in Semantic Kernel using Azure OpenAI?",
|
|
]
|
|
|
|
|
|
async def main():
|
|
# 1. Create the agent
|
|
async with MCPStreamableHttpPlugin(
|
|
name="LearnSite",
|
|
description="Learn Docs Plugin",
|
|
url="https://learn.microsoft.com/api/mcp",
|
|
) as learn_plugin:
|
|
agent = ChatCompletionAgent(
|
|
service=AzureChatCompletion(credential=AzureCliCredential()),
|
|
name="DocsAgent",
|
|
instructions="Answer questions about the Microsoft's Semantic Kernel SDK.",
|
|
plugins=[learn_plugin],
|
|
)
|
|
|
|
for user_input in USER_INPUTS:
|
|
# 2. Create a thread to hold the conversation
|
|
# If no thread is provided, a new thread will be
|
|
# created and returned with the initial response
|
|
thread: ChatHistoryAgentThread | None = None
|
|
|
|
print(f"# User: {user_input}")
|
|
# 3. Invoke the agent for a response
|
|
response = await agent.get_response(messages=user_input, thread=thread)
|
|
print(f"# {response.name}: {response} ")
|
|
thread = response.thread
|
|
|
|
# 4. Cleanup: Clear the thread
|
|
await thread.delete() if thread else None
|
|
|
|
|
|
"""
|
|
Sample output:
|
|
|
|
# User: How do I make a Python chat completion request in Semantic Kernel using Azure OpenAI?
|
|
# DocsAgent: To make a **Python chat completion request in Semantic Kernel using Azure OpenAI**, follow these steps:
|
|
|
|
---
|
|
|
|
### 1. Install Semantic Kernel
|
|
|
|
```bash
|
|
pip install semantic-kernel
|
|
```
|
|
|
|
---
|
|
|
|
### 2. Import Necessary Libraries
|
|
|
|
```python
|
|
import semantic_kernel as sk
|
|
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
|
|
```
|
|
|
|
---
|
|
|
|
### 3. Initialize the Kernel and Add Azure OpenAI Service
|
|
|
|
```python
|
|
# Initialize the kernel
|
|
kernel = sk.Kernel()
|
|
|
|
# Set your Azure OpenAI details
|
|
deployment_name = "your-chat-deployment"
|
|
endpoint = "https://your-resource-name.openai.azure.com/"
|
|
api_key = "your-azure-openai-api-key"
|
|
|
|
# Add Azure Chat Completion service
|
|
kernel.add_chat_service(
|
|
"azure_chat",
|
|
AzureChatCompletion(
|
|
deployment_name=deployment_name,
|
|
endpoint=endpoint,
|
|
api_key=api_key,
|
|
),
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Create a Chat History and Send a Request
|
|
|
|
```python
|
|
# Create an initial chat history
|
|
history = [
|
|
{"role": "system", "content": "You are a helpful assistant."},
|
|
{"role": "user", "content": "What can you do?"},
|
|
]
|
|
|
|
# Get chat completion
|
|
result = kernel.chat.complete(
|
|
chat_history=history,
|
|
max_tokens=100,
|
|
temperature=0.7,
|
|
top_p=0.95,
|
|
)
|
|
|
|
print(result)
|
|
```
|
|
|
|
---
|
|
|
|
## Example Summary
|
|
|
|
This makes a chat completion request to Azure OpenAI through Semantic Kernel in Python. You can add more user/assistant
|
|
turns to `history`.
|
|
"""
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|