Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při přechodu některých agentů z experimentální fáze do fáze kandidáta na vydání jsme aktualizovali rozhraní API, aby bylo jejich použití jednodušší a přehlednější. V průvodci konkrétním scénářem se dozvíte, jak aktualizovat stávající kód tak, aby fungoval s nejnovějšími dostupnými rozhraními API.
Běžné rozhraní API pro vyvolání agenta
Ve verzi 1.43.0 vydáváme nové společné rozhraní API pro vyvolání agenta, které umožní vyvolání všech typů agentů prostřednictvím společného rozhraní API.
Abychom umožnili toto nové rozhraní API, představujeme koncept AgentThread, který představuje vlákno konverzace a abstrahuje různé požadavky na správu vláken různých typů agentů. U některých typů agentů také v budoucnu umožní použití různých implementací vláken se stejným agentem.
Běžné Invoke metody, které zavádíme, umožňují zadat zprávy, které chcete předat agentovi, a volitelný AgentThread. Pokud je k dispozici AgentThread, konverzace bude pokračovat již probíhající na AgentThread. Pokud není k dispozici žádná AgentThread, vytvoří se nové výchozí vlákno a vrátí se jako součást odpovědi.
Je také možné ručně vytvořit instanci AgentThread, například v případech, kdy můžete mít ID vlákna z podkladové služby agenta a chcete pokračovat v tomto vlákně. Můžete také přizpůsobit možnosti vlákna, například přidružit nástroje.
Tady je jednoduchý příklad použití libovolného agenta s kódem, který je nezávislý na agentech.
private async Task UseAgentAsync(Agent agent, AgentThread? agentThread = null)
{
// Invoke the agent, and continue the existing thread if provided.
var responses = agent.InvokeAsync(new ChatMessageContent(AuthorRole.User, "Hi"), agentThread);
// Output results.
await foreach (AgentResponseItem<ChatMessageContent> response in responses)
{
Console.WriteLine(response);
agentThread = response.Thread;
}
// Delete the thread if required.
if (agentThread is not null)
{
await agentThread.DeleteAsync();
}
}
Tyto změny byly použity v:
Možnosti vláken agenta Azure AI
AzureAIAgent aktuálně podporuje pouze vlákna typu AzureAIAgentThread.
Kromě automatického vytvoření vlákna pro vás při vyvolání agenta si můžete také ručně vytvořit instanci AzureAIAgentThread.
AzureAIAgentThread podporuje vytváření s přizpůsobenými nástroji a metadaty, a také zasílání zpráv k zahájení konverzace.
AgentThread thread = new AzureAIAgentThread(
agentsClient,
messages: seedMessages,
toolResources: tools,
metadata: metadata);
Můžete také vytvořit instanci AzureAIAgentThread, která pokračuje v existující konverzaci.
AgentThread thread = new AzureAIAgentThread(
agentsClient,
id: "my-existing-thread-id");
Možnosti vláken bedrockového agenta
BedrockAgent aktuálně podporuje pouze vlákna typu BedrockAgentThread.
Kromě automatického vytvoření vlákna pro vás při vyvolání agenta si můžete také ručně vytvořit instanci BedrockAgentThread.
AgentThread thread = new BedrockAgentThread(amazonBedrockAgentRuntimeClient);
Můžete také vytvořit instanci BedrockAgentThread, která pokračuje v existující konverzaci.
AgentThread thread = new BedrockAgentThread(
amazonBedrockAgentRuntimeClient,
sessionId: "my-existing-session-id");
Možnosti vlákna agenta pro dokončování chatu
ChatCompletionAgent aktuálně podporuje pouze vlákna typu ChatHistoryAgentThread.
ChatHistoryAgentThread používá objekt ChatHistory v paměti k uložení zpráv ve vlákně.
Kromě automatického vytvoření vlákna pro vás při vyvolání agenta si můžete také ručně vytvořit instanci ChatHistoryAgentThread.
AgentThread thread = new ChatHistoryAgentThread();
Můžete také vytvořit instanci ChatHistoryAgentThread, která pokračuje v existující konverzaci předáním objektu ChatHistory s existujícími zprávami.
ChatHistory chatHistory = new([new ChatMessageContent(AuthorRole.User, "Hi")]);
AgentThread thread = new ChatHistoryAgentThread(chatHistory: chatHistory);
Možnosti vlákna asistenta OpenAI
OpenAIAssistantAgent aktuálně podporuje pouze vlákna typu OpenAIAssistantAgentThread.
Kromě automatického vytvoření vlákna pro vás při vyvolání agenta si můžete také ručně vytvořit instanci OpenAIAssistantAgentThread.
OpenAIAssistantAgentThread podporuje vytváření s přizpůsobenými nástroji a metadaty, a také zasílání zpráv k zahájení konverzace.
AgentThread thread = new OpenAIAssistantAgentThread(
assistantClient,
messages: seedMessages,
codeInterpreterFileIds: fileIds,
vectorStoreId: "my-vector-store",
metadata: metadata);
Můžete také vytvořit instanci OpenAIAssistantAgentThread, která pokračuje v existující konverzaci.
AgentThread thread = new OpenAIAssistantAgentThread(
assistantClient,
id: "my-existing-thread-id");
Průvodce migrací openAIAssistantAgent C#
Nedávno jsme použili významný posun v rámci OpenAIAssistantAgent v sémantickém jádru agentního frameworku.
Tyto změny byly použity v:
Tyto změny jsou určeny k tomu, aby:
- Zarovnejte se s návodem pro užití našeho
AzureAIAgent. - Opravte chyby související se vzorem statické inicializace.
- Vyhněte se omezení funkcí na základě naší abstrakce podkladové sady SDK.
Tento průvodce obsahuje podrobné pokyny pro migraci kódu jazyka C# ze staré implementace na novou. Mezi změny patří aktualizace pro vytváření asistentů, správa životního cyklu asistenta, zpracování vláken, souborů a úložišť vektorů.
1. Vytvoření instance klienta
Dříve bylo nutné OpenAIClientProvider k vytvoření libovolného OpenAIAssistantAgent. Tato závislost byla zjednodušená.
nový způsob
OpenAIClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(new AzureCliCredential(), new Uri(endpointUrl));
AssistantClient assistantClient = client.GetAssistantClient();
Starý způsob (zastaralý)
var clientProvider = new OpenAIClientProvider(...);
2. Životní cyklus pomocníka
Vytvoření pomocníka
Nyní můžete přímo vytvořit instanci OpenAIAssistantAgent ze stávající nebo nové definice asistenta z AssistantClient.
nový způsob
Assistant definition = await assistantClient.GetAssistantAsync(assistantId);
OpenAIAssistantAgent agent = new(definition, client);
Moduly plug-in je možné přímo zahrnout během inicializace:
KernelPlugin plugin = KernelPluginFactory.CreateFromType<YourPlugin>();
Assistant definition = await assistantClient.GetAssistantAsync(assistantId);
OpenAIAssistantAgent agent = new(definition, client, [plugin]);
Vytvoření nové definice asistenta pomocí metody rozšíření:
Assistant assistant = await assistantClient.CreateAssistantAsync(
model,
name,
instructions: instructions,
enableCodeInterpreter: true);
Starý způsob (zastaralý)
Dříve byly definice asistentů spravovány nepřímo.
3. Vyvolání agenta
Můžete zadat přímo RunCreationOptions a povolit úplný přístup k základním funkcím sady SDK.
nový způsob
RunCreationOptions options = new(); // configure as needed
var result = await agent.InvokeAsync(options);
Starý způsob (zastaralý)
var options = new OpenAIAssistantInvocationOptions();
4. Odstranění asistenta
Odstranění asistenta můžete spravovat přímo pomocí AssistantClient.
await assistantClient.DeleteAssistantAsync(agent.Id);
5. Životní cyklus vlákna
Vytvoření vlákna
Vlákna jsou nyní spravována pomocí AssistantAgentThread.
nový způsob
var thread = new AssistantAgentThread(assistantClient);
// Calling CreateAsync is an optional step.
// A thread will be created automatically on first use if CreateAsync was not called.
// Note that CreateAsync is not on the AgentThread base implementation since not all
// agent services support explicit thread creation.
await thread.CreateAsync();
Starý způsob (zastaralý)
Dříve byla správa vláken nepřímá nebo vázaná na agenta.
Odstranění vlákna
var thread = new AssistantAgentThread(assistantClient, "existing-thread-id");
await thread.DeleteAsync();
6. Životní cyklus souborů
Vytváření a odstraňování souborů nyní využívá OpenAIFileClient.
Nahrání souboru
string fileId = await client.UploadAssistantFileAsync(stream, "<filename>");
Mazání souboru
await client.DeleteFileAsync(fileId);
7. Životní cyklus úložiště vektorů
Vektorová úložiště se spravují přímo prostřednictvím VectorStoreClient s pohodlnými rozšiřujícími metodami.
Vytvoření Úložiště Vektorů
string vectorStoreId = await client.CreateVectorStoreAsync([fileId1, fileId2], waitUntilCompleted: true);
Odstranění úložiště vektorů
await client.DeleteVectorStoreAsync(vectorStoreId);
Zpětná kompatibilita
Zastaralé vzory jsou označené [Obsolete]. Chcete-li potlačit zastaralá upozornění (CS0618), aktualizujte soubor projektu následujícím způsobem:
<PropertyGroup>
<NoWarn>$(NoWarn);CS0618</NoWarn>
</PropertyGroup>
Tento průvodce migrací vám pomůže hladce přejít na novou implementaci, zjednodušit inicializaci klientů, správu prostředků a integraci se sadou sémantické jádro .NET SDK.
Důležité
Pro vývojáře upgradující na Sémantické jádro Python 1.26.1 nebo novější jsme zavedli významné aktualizace a zásadní změny, abychom vylepšili náš framework agentů, jak se blížíme k GA.
Tyto změny byly použity v:
Předchozí změny byly použity v:
Tento průvodce obsahuje podrobné pokyny pro migraci kódu Pythonu ze staré implementace na novou implementaci.
Import agentů
Všechny importní cesty agentů byly sjednoceny pod semantic_kernel.agents.
Aktualizovaný styl importu
from semantic_kernel.agents import (
AutoGenConversableAgent,
AzureAIAgent,
AzureAssistantAgent,
BedrockAgent,
ChatCompletionAgent,
OpenAIAssistantAgent,
)
Předchozí styl importu (zastaralý):
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.agents.autogen import AutoGenConversableAgent
from semantic_kernel.agents.azure_ai import AzureAIAgent
from semantic_kernel.agents.bedrock import BedrockAgent
from semantic_kernel.agents.open_ai import AzureAssistantAgent, OpenAIAssistantAgent
Běžné rozhraní API pro vyvolání agenta
Od sémantického jádra Python 1.26.0 a novější jsme zavedli novou společnou abstrakci pro správu vláken pro všechny agenty. Pro každého agenta nyní zveřejňujeme třídu vlákna, která implementuje základní třídu AgentThread, což umožňuje správu kontextu prostřednictvím metod, jako jsou create() a delete().
Odpovědi agenta get_response(...), invoke(...), invoke_stream(...) nyní vrací AgentResponseItem[ChatMessageContent], který má dva atributy:
message: TMessage # Usually ChatMessageContent
thread: AgentThread # Contains the concrete type for the given agent
Přidání zpráv do vlákna
Zprávy by měly být přidány do vlákna jako součást agentových metod messages, get_response(...), nebo invoke(...) prostřednictvím argumentu invoke_stream(...).
Vlákno agenta Azure AI
AzureAIAgentThread lze vytvořit následujícím způsobem:
from semantic_kernel.agents import AzureAIAgentThread
thread = AzureAIAgentThread(
client: AIProjectClient, # required
messages: list[ThreadMessageOptions] | None = None, # optional
metadata: dict[str, str] | None = None, # optional
thread_id: str | None = None, # optional
tool_resources: "ToolResources | None" = None, # optional
)
Poskytnutí thread_id (textového řetězce) umožňuje pokračovat v existující konverzaci. Pokud tento parametr vynecháte, vytvoří se nové vlákno a vrátí se jako součást odpovědi agenta.
Kompletní příklad implementace:
import asyncio
from azure.identity.aio import DefaultAzureCredential
from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
USER_INPUTS = [
"Why is the sky blue?",
"What are we talking about?",
]
async def main() -> None:
ai_agent_settings = AzureAIAgentSettings.create()
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Create an agent on the Azure AI agent service
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
name="Assistant",
instructions="Answer the user's questions.",
)
# 2. Create a Semantic Kernel agent for the Azure AI agent
agent = AzureAIAgent(
client=client,
definition=agent_definition,
)
# 3. Create a thread for the agent
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread: AzureAIAgentThread = None
try:
for user_input in USER_INPUTS:
print(f"# User: {user_input}")
# 4. Invoke the agent with the specified message for response
response = await agent.get_response(messages=user_input, thread=thread)
print(f"# {response.content}: {response}")
thread = response.thread
finally:
# 6. Cleanup: Delete the thread and agent
await thread.delete() if thread else None
await client.agents.delete_agent(agent.id)
if __name__ == "__main__":
asyncio.run(main())
Bedrock Agentní vlákno
BedrockAgent používá BedrockAgentThread ke správě historie konverzací a kontextu. Můžete poskytnout session_id, abyste mohli pokračovat nebo zahájit nový kontext konverzace.
from semantic_kernel.agents import BedrockAgentThread
thread = BedrockAgentThread(
bedrock_runtime_client: Any,
session_id: str | None = None,
)
Pokud není k dispozici žádná session_id, vytvoří se automaticky nový kontext.
Kompletní příklad implementace:
import asyncio
from semantic_kernel.agents import BedrockAgent, BedrockAgentThread
async def main():
bedrock_agent = await BedrockAgent.create_and_prepare_agent(
"semantic-kernel-bedrock-agent",
instructions="You are a friendly assistant. You help people find information.",
)
# Create a thread for the agent
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread: BedrockAgentThread = None
try:
while True:
user_input = input("User:> ")
if user_input == "exit":
print("\n\nExiting chat...")
break
# Invoke the agent
# The chat history is maintained in the session
response = await bedrock_agent.get_response(
input_text=user_input,
thread=thread,
)
print(f"Bedrock agent: {response}")
thread = response.thread
except KeyboardInterrupt:
print("\n\nExiting chat...")
return False
except EOFError:
print("\n\nExiting chat...")
return False
finally:
# Delete the agent
await bedrock_agent.delete_agent()
await thread.delete() if thread else None
if __name__ == "__main__":
asyncio.run(main())
Vlákno historie chatu agenta
ChatCompletionAgent používá ke správě historie konverzací ChatHistoryAgentThread. Inicializovat ho můžete takto:
from semantic_kernel.agents import ChatHistoryAgentThread
thread = ChatHistoryAgentThread(
chat_history: ChatHistory | None = None,
thread_id: str | None = None
)
Poskytnutí thread_id umožňuje pokračovat v existujících konverzacích. Vynechání vytvoří nové vlákno. Serializace a obnovování stavu vlákna jsou podporovány pro perzistentní kontexty konverzace.
Kompletní příklad implementace:
import asyncio
from semantic_kernel.agents import ChatCompletionAgent, ChatHistoryAgentThread
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
# Simulate a conversation with the agent
USER_INPUTS = [
"Hello, I am John Doe.",
"What is your name?",
"What is my name?",
]
async def main():
# 1. Create the agent by specifying the service
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="Assistant",
instructions="Answer the user's questions.",
)
# 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
for user_input in USER_INPUTS:
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}")
# 4. Store the thread, which allows the agent to
# maintain conversation history across multiple messages.
thread = response.thread
# 5. Cleanup: Clear the thread
await thread.delete() if thread else None
if __name__ == "__main__":
asyncio.run(main())
Vlákno asistenta OpenAI
AzureAssistantAgent a OpenAIAssistantAgent používají AssistantAgentThread ke správě historie konverzací a kontextu:
from semantic_kernel.agents import ChatHistoryAgentThread
thread = AssistantAgentThread(
client: AsyncOpenAI,
thread_id: str | None = None,
messages: Iterable["ThreadCreateMessage"] | NotGiven = NOT_GIVEN,
metadata: dict[str, Any] | NotGiven = NOT_GIVEN,
tool_resources: ToolResources | NotGiven = NOT_GIVEN,
)
Poskytnutím thread_id se pokračuje v existující konverzaci; pokud tomu tak není, vytvoří se nové vlákno.
Kompletní příklad implementace:
# Copyright (c) Microsoft. All rights reserved.
import asyncio
from semantic_kernel.agents import AzureAssistantAgent
# Simulate a conversation with the agent
USER_INPUTS = [
"Why is the sky blue?",
"What is the speed of light?",
"What have we been talking about?",
]
async def main():
# 1. Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# 2. Create the assistant on the Azure OpenAI service
definition = await client.beta.assistants.create(
model=model,
instructions="Answer questions about the world in one sentence.",
name="Assistant",
)
# 3. Create a Semantic Kernel agent for the Azure OpenAI assistant
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
# 4. Create a new thread for use with the assistant
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread = None
try:
for user_input in USER_INPUTS:
print(f"# User: '{user_input}'")
# 6. Invoke the agent for the current thread and print the response
response = await agent.get_response(messages=user_input, thread=thread)
print(f"# {response.name}: {response}")
thread = response.thread
finally:
# 7. Clean up the resources
await thread.delete() if thread else None
await agent.client.beta.assistants.delete(assistant_id=agent.id)
if __name__ == "__main__":
asyncio.run(main())
Vstupy zpráv pro vyvolání agenta
Předchozí implementace umožňovaly pouze jeden vstup zpráv do metod, jako jsou get_response(...), invoke(...)a invoke_stream(...). Nyní jsme tyto metody aktualizovali tak, aby podporovaly více messages (str | ChatMessageContent | list[str | ChatMessageContent]). Vstupy zpráv musí být předány pomocí argumentu klíčového messages slova, například agent.get_response(messages="user input") nebo agent.invoke(messages="user input").
Metody vyvolání agenta vyžadují aktualizace následujícím způsobem:
Starý způsob
response = await agent.get_response(message="some user input", thread=thread)
Nový způsob
response = await agent.get_response(messages=["some initial inputer", "other input"], thread=thread)
AzureAIAgent
V sémantickém jádru Python 1.26.0+ se teď vytváření vláken AzureAIAgent spravuje prostřednictvím objektu AzureAIAgentThread, ne přímo v klientovi.
Starý způsob
thread = await client.agents.create_thread()
Nový způsob
from semantic_kernel.agents import AzureAIAgentThread
thread = AzureAIAgentThread(
client: AIProjectClient, # required
messages: list[ThreadMessageOptions] | None = None, # optional
metadata: dict[str, str] | None = None, # optional
thread_id: str | None = None, # optional
tool_resources: "ToolResources | None" = None, # optional
)
Pokud není zpočátku k dispozici žádná thread_id, vytvoří se nové vlákno a to se vrátí v odpovědi agenta.
ChatCompletionAgent
ChatCompletionAgent byla aktualizována, aby zjednodušila konfiguraci služby, zpracování pluginů a chování při volání funkcí. Níže jsou uvedené klíčové změny, které byste měli při migraci zvážit.
1. Určení služby
Nyní můžete službu zadat přímo jako součást konstruktoru agenta:
Nový způsob
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="<name>",
instructions="<instructions>",
)
Poznámka: Pokud je k dispozici jádro i služba, bude mít tato služba přednost, pokud sdílí stejnou service_id nebo ai_model_id. Jinak pokud jsou samostatné, použije se první služba AI zaregistrovaná v jádru.
Starý způsob (stále platný)
Dříve byste nejprve přidali službu do jádra a pak předali jádro agentovi:
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
kernel = Kernel()
kernel.add_service(AzureChatCompletion())
agent = ChatCompletionAgent(
kernel=kernel,
name="<name>",
instructions="<instructions>",
)
2. Přidání modulů plug-in
Moduly plug-in je teď možné zadat přímo prostřednictvím konstruktoru:
Nový způsob
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="<name>",
instructions="<instructions>",
plugins=[SamplePlugin()],
)
Starý způsob (stále platný)
Moduly plug-in dříve musely být přidány do jádra samostatně:
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
kernel = Kernel()
kernel.add_plugin(SamplePlugin())
agent = ChatCompletionAgent(
kernel=kernel,
name="<name>",
instructions="<instructions>",
)
Poznámka: Oba přístupy jsou platné, ale přímé zadávání modulů plug-in zjednodušuje inicializaci.
3. Vyvolání agenta
Teď máte dva způsoby, jak vyvolat agenta. Nová metoda přímo načte jednu odpověď, zatímco stará metoda podporuje streamování.
Nový způsob (bez vlákna konverzace nebo kontextu)
response = await agent.get_response(messages="user input")
# response is of type AgentResponseItem[ChatMessageContent]
Poznámka: Pokud další odpověď nepoužívá vrácené vlákno, konverzace použije nové vlákno, a proto nebude pokračovat s předchozím kontextem.
Nový způsob (jednoduchá odpověď s kontextem)
thread = ChatHistoryAgentThread()
for user_input in ["First user input", "Second User Input"]:
response = await agent.get_response(messages=user_input, thread=thread)
# response is of type AgentResponseItem[ChatMessageContent]
thread = response.thread
Starý způsob (již není platný)
chat_history = ChatHistory()
chat_history.add_user_message("<user_input>")
response = agent.get_response(message="user input", chat_history=chat_history)
4. Řízení volání funkcí
Chování volání funkce lze nyní přímo řídit při specifikaci služby v konstruktoru agenta.
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="<name>",
instructions="<instructions>",
plugins=[MenuPlugin()],
function_choice_behavior=FunctionChoiceBehavior.Auto(
filters={"included_functions": ["get_specials", "get_item_price"]}
),
)
Poznámka: Dříve nastavení volání funkcí vyžadovalo samostatné nastavení v jádru nebo objektu služby. Pokud nastavení provádění určuje stejné service_id nebo ai_model_id jako konfigurace služby AI, bude mít přednost chování volání funkce definované v nastavení spouštění (prostřednictvím KernelArguments) před chováním funkce nastavené v konstruktoru.
Tyto aktualizace zlepšují jednoduchost a konfigurovatelnost, což usnadňuje integraci a údržbu chatCompletionAgent.
OpenAIAssistantAgent
Změny AzureAssistantAgent a OpenAIAssistantAgent zahrnují aktualizace pro vytváření asistentů, vytváření vláken, zpracování modulů plug-in, používání nástroje pro překlad kódu, práci s nástrojem pro vyhledávání souborů a přidávání chatovacích zpráv do vlákna.
Nastavení zdrojů
Starý způsob
Klient AsyncAzureOpenAI byl vytvořen jako součást vytváření objektu agenta.
agent = await AzureAssistantAgent.create(
deployment_name="optional-deployment-name",
api_key="optional-api-key",
endpoint="optional-endpoint",
ad_token="optional-ad-token",
ad_token_provider=optional_callable,
default_headers={"optional_header": "optional-header-value"},
env_file_path="optional-env-file-path",
env_file_encoding="optional-env-file-encoding",
...,
)
Nový způsob
Agent poskytuje statickou metodu pro vytvoření požadovaného klienta pro zadané prostředky, kde argumenty klíčových slov na úrovni metody mají přednost před proměnnými prostředí a hodnotami v existujícím souboru .env.
client, model = AzureAssistantAgent.setup_resources(
ad_token="optional-ad-token",
ad_token_provider=optional_callable,
api_key="optional-api-key",
api_version="optional-api-version",
base_url="optional-base-url",
default_headers="optional-default-headers",
deployment_name="optional-deployment-name",
endpoint="optional-endpoint",
env_file_path="optional-env-file-path",
env_file_encoding="optional-env-file-encoding",
token_scope="optional-token-scope",
)
1. Vytvoření asistenta
Starý způsob
agent = await AzureAssistantAgent.create(
kernel=kernel,
service_id=service_id,
name=AGENT_NAME,
instructions=AGENT_INSTRUCTIONS,
enable_code_interpreter=True,
)
nebo
agent = await OpenAIAssistantAgent.create(
kernel=kernel,
service_id=service_id,
name=<name>,
instructions=<instructions>,
enable_code_interpreter=True,
)
Nový způsob
# Azure AssistantAgent
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<name>",
)
# Create the agent using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
nebo
# OpenAI Assistant Agent
# Create the client using OpenAI resources and configuration
client, model = OpenAIAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<name>",
)
# Create the agent using the client and the assistant definition
agent = OpenAIAssistantAgent(
client=client,
definition=definition,
)
2. Vytvoření vlákna
Starý způsob
thread_id = await agent.create_thread()
Nový způsob
from semantic_kernel.agents AssistantAgentThread, AzureAssistantAgent
client, model = AzureAssistantAgent.setup_resources()
# You may create a thread based on an existing thread id
# thread = AssistantAgentThread(client=client, thread_id="existing-thread-id")
# Otherwise, if not specified, a thread will be created during the first invocation
# and returned as part of the response
thread = None
async for response in agent.invoke(messages="user input", thread=thread):
# handle response
print(response)
thread = response.thread
3. Zpracování pluginů
Starý způsob
# Create the instance of the Kernel
kernel = Kernel()
# Add the sample plugin to the kernel
kernel.add_plugin(plugin=MenuPlugin(), plugin_name="menu")
agent = await AzureAssistantAgent.create(
kernel=kernel,
name="<name>",
instructions="<instructions>"
)
Poznámka: Moduly plug-in je stále možné spravovat prostřednictvím jádra. Pokud nezadáte jádro, jádro se automaticky vytvoří při vytváření agenta a moduly plug-in se do této instance přidají.
Nový způsob
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<name>",
)
# Create the agent with plugins passed in as a list
agent = AzureAssistantAgent(
client=client,
definition=definition,
plugins=[MenuPlugin()],
)
Podrobnosti naleznete v ukázkové implementaci .
4. Použití nástroje interpreta kódu
Starý způsob
csv_file_path = ...
agent = await AzureAssistantAgent.create(
kernel=kernel,
name="<name>",
instructions="<instructions>",
enable_code_interpreter=True,
code_interpreter_filenames=[csv_file_path],
)
Nový způsob
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
csv_file_path = ...
# Load the CSV file as a FileObject
with open(csv_file_path, "rb") as file:
file = await client.files.create(file=file, purpose="assistants")
# Get the code interpreter tool and resources
code_interpreter_tool, code_interpreter_tool_resource = AzureAssistantAgent.configure_code_interpreter_tool(file.id)
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
name="<name>",
instructions="<instructions>.",
tools=code_interpreter_tool,
tool_resources=code_interpreter_tool_resource,
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
Podrobnosti naleznete v ukázkové implementaci .
5. Práce s nástrojem pro vyhledávání souborů
Starý způsob
pdf_file_path = ...
agent = await AzureAssistantAgent.create(
kernel=kernel,
service_id=service_id,
name=AGENT_NAME,
instructions=AGENT_INSTRUCTIONS,
enable_file_search=True,
vector_store_filenames=[pdf_file_path],
)
Nový způsob
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
pdf_file_path = ...
# Load the employees PDF file as a FileObject
with open(pdf_file_path, "rb") as file:
file = await client.files.create(file=file, purpose="assistants")
# Create a vector store specifying the file ID to be used for file search
vector_store = await client.beta.vector_stores.create(
name="step4_assistant_file_search",
file_ids=[file.id],
)
file_search_tool, file_search_tool_resources = AzureAssistantAgent.configure_file_search_tool(vector_store.id)
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="Find answers to the user's questions in the provided file.",
name="FileSearch",
tools=file_search_tool,
tool_resources=file_search_tool_resources,
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
Podrobnosti naleznete v ukázkové implementaci .
6. Přidání chatových zpráv do vlákna
Starý způsob
await agent.add_chat_message(
thread_id=thread_id,
message=ChatMessageContent(role=AuthorRole.USER, content=user_input)
)
Nový způsob
Poznámka: Stará metoda stále funguje, pokud předáte ChatMessageContent, ale nyní můžete také předat jednoduchý řetězec.
await agent.add_chat_message(
thread_id=thread_id,
message=user_input,
)
7. Vyčištění prostředků
Starý způsob
await agent.delete_file(file_id)
await agent.delete_thread(thread_id)
await agent.delete()
Nový způsob
await client.files.delete(file_id)
await thread.delete()
await client.beta.assistants.delete(agent.id)
Zpracování strukturovaných výstupů
Starý způsob
Nedostupné starým způsobem
Nový způsob
# Define a Pydantic model that represents the structured output from the OpenAI service
class ResponseModel(BaseModel):
response: str
items: list[str]
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
name="<name>",
instructions="<instructions>",
response_format=AzureAssistantAgent.configure_response_format(ResponseModel),
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
Podrobnosti naleznete v ukázkové implementaci .
Tento průvodce migrací by vám měl pomoct s aktualizací kódu na novou implementaci, využití konfigurace na základě klienta a vylepšených funkcí.
Agenti nejsou v Javě k dispozici.