mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
7c2dae8855
* Fix sample bugs: incorrect API params, wrong client types, and invalid options - typed_options.py: Fix AnthropicClient model->model_id, wrap raw strings in Message objects for get_response(), fix reasoning_effort->reasoning dict, fix budget_tokens minimum (1024), use OpenAIChatClient not FoundryChatClient, remove unused import - client_reasoning.py: Fix deprecated model_id to model param - client_with_hosted_mcp.py: Remove invalid store=True kwarg from Agent.run() - code_defined_skill.py: Fix precision kwarg to use function_invocation_kwargs - Various other samples: Fix deprecated API usage and incorrect params Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review comments - client_with_hosted_mcp.py: Fix remaining store=True kwarg on line 68 to use options dict - client_with_session.py: Change store=True to store=False to match in-memory persistence demo intent - typed_options.py: Remove non-existent import and model key from docstring example Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * new sample fixes --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
152 lines
5.2 KiB
Python
152 lines
5.2 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
import asyncio
|
|
from random import randint
|
|
from typing import Annotated
|
|
|
|
from agent_framework import Agent, AgentSession, tool
|
|
from agent_framework.openai import OpenAIChatClient
|
|
from dotenv import load_dotenv
|
|
from pydantic import Field
|
|
|
|
# Load environment variables from .env file
|
|
load_dotenv()
|
|
|
|
"""
|
|
OpenAI Chat Client with Session Management Example
|
|
|
|
This sample demonstrates session management with OpenAI Chat Client, showing
|
|
persistent conversation context and simplified response handling.
|
|
"""
|
|
|
|
|
|
# NOTE: approval_mode="never_require" is for sample brevity. Use "always_require" in production;
|
|
# see samples/02-agents/tools/function_tool_with_approval.py
|
|
# and samples/02-agents/tools/function_tool_with_approval_and_sessions.py.
|
|
@tool(approval_mode="never_require")
|
|
def get_weather(
|
|
location: Annotated[str, Field(description="The location to get the weather for.")],
|
|
) -> str:
|
|
"""Get the weather for a given location."""
|
|
conditions = ["sunny", "cloudy", "rainy", "stormy"]
|
|
return f"The weather in {location} is {conditions[randint(0, 3)]} with a high of {randint(10, 30)}°C."
|
|
|
|
|
|
async def example_with_automatic_session_creation() -> None:
|
|
"""Example showing automatic session creation."""
|
|
print("=== Automatic Session Creation Example ===")
|
|
|
|
agent = Agent(
|
|
client=OpenAIChatClient(),
|
|
instructions="You are a helpful weather agent.",
|
|
tools=get_weather,
|
|
)
|
|
|
|
# First conversation - no session provided, will be created automatically
|
|
query1 = "What's the weather like in Seattle?"
|
|
print(f"User: {query1}")
|
|
result1 = await agent.run(query1)
|
|
print(f"Agent: {result1.text}")
|
|
|
|
# Second conversation - still no session provided, will create another new session
|
|
query2 = "What was the last city I asked about?"
|
|
print(f"\nUser: {query2}")
|
|
result2 = await agent.run(query2)
|
|
print(f"Agent: {result2.text}")
|
|
print("Note: Each call creates a separate session, so the agent doesn't remember previous context.\n")
|
|
|
|
|
|
async def example_with_session_persistence_in_memory() -> None:
|
|
"""
|
|
Example showing session persistence across multiple conversations.
|
|
In this example, messages are stored in-memory.
|
|
"""
|
|
print("=== Session Persistence Example (In-Memory) ===")
|
|
|
|
agent = Agent(
|
|
client=OpenAIChatClient(),
|
|
instructions="You are a helpful weather agent.",
|
|
tools=get_weather,
|
|
)
|
|
|
|
# Create a new session that will be reused
|
|
session = agent.create_session()
|
|
|
|
# First conversation
|
|
query1 = "What's the weather like in Tokyo?"
|
|
print(f"User: {query1}")
|
|
result1 = await agent.run(query1, session=session, options={"store": False})
|
|
print(f"Agent: {result1.text}")
|
|
|
|
# Second conversation using the same session - maintains context
|
|
query2 = "How about London?"
|
|
print(f"\nUser: {query2}")
|
|
result2 = await agent.run(query2, session=session, options={"store": False})
|
|
print(f"Agent: {result2.text}")
|
|
|
|
# Third conversation - agent should remember both previous cities
|
|
query3 = "Which of the cities I asked about has better weather?"
|
|
print(f"\nUser: {query3}")
|
|
result3 = await agent.run(query3, session=session, options={"store": False})
|
|
print(f"Agent: {result3.text}")
|
|
print("Note: The agent remembers context from previous messages in the same session.\n")
|
|
|
|
|
|
async def example_with_existing_session_id() -> None:
|
|
"""
|
|
Example showing how to work with an existing session ID from the service.
|
|
In this example, messages are stored on the server using OpenAI conversation state.
|
|
"""
|
|
print("=== Existing Session ID Example ===")
|
|
|
|
# First, create a conversation and capture the session ID
|
|
existing_session_id = None
|
|
|
|
agent = Agent(
|
|
client=OpenAIChatClient(),
|
|
instructions="You are a helpful weather agent.",
|
|
tools=get_weather,
|
|
)
|
|
|
|
# Start a conversation and get the session ID
|
|
session = agent.create_session()
|
|
|
|
query1 = "What's the weather in Paris?"
|
|
print(f"User: {query1}")
|
|
result1 = await agent.run(query1, session=session)
|
|
print(f"Agent: {result1.text}")
|
|
|
|
# The session ID is set after the first response
|
|
existing_session_id = session.service_session_id
|
|
print(f"Session ID: {existing_session_id}")
|
|
|
|
if existing_session_id:
|
|
print("\n--- Continuing with the same session ID in a new agent instance ---")
|
|
|
|
agent = Agent(
|
|
client=OpenAIChatClient(),
|
|
instructions="You are a helpful weather agent.",
|
|
tools=get_weather,
|
|
)
|
|
|
|
# Create a session with the existing ID
|
|
session = AgentSession(service_session_id=existing_session_id)
|
|
|
|
query2 = "What was the last city I asked about?"
|
|
print(f"User: {query2}")
|
|
result2 = await agent.run(query2, session=session)
|
|
print(f"Agent: {result2.text}")
|
|
print("Note: The agent continues the conversation from the previous session by using session ID.\n")
|
|
|
|
|
|
async def main() -> None:
|
|
print("=== OpenAI Response Client Agent Session Management Examples ===\n")
|
|
|
|
await example_with_automatic_session_creation()
|
|
await example_with_session_persistence_in_memory()
|
|
await example_with_existing_session_id()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|