探索语义内核 OpenAIAssistantAgent
重要
此功能处于候选发布阶段。 此阶段的功能几乎完整且一般稳定,尽管在全面推出之前,它们可能会进行轻微的改进或优化。
有关此讨论的详细 API 文档在以下位置提供:
代理当前在 Java 中不可用。
什么是助手?
OpenAI 助手 API 是专为更高级和交互式 AI 功能设计的专用界面,使开发人员能够创建个性化的多步骤面向任务的代理。 与专注于简单聊天交换的聊天完成 API 不同,助手 API 允许动态、目标驱动的交互与代码解释器和文件搜索等其他功能交互。
准备开发环境
若要继续开发 OpenAIAIAssistantAgent
,请使用相应的包配置开发环境。
将 Microsoft.SemanticKernel.Agents.OpenAI
包添加到项目:
dotnet add package Microsoft.SemanticKernel.Agents.AzureAI --prerelease
您可能还想要包括 Azure.Identity
包:
dotnet add package Azure.Identity
使用带有可选semantic-kernel
依赖的包进行安装:
pip install semantic-kernel[azure]
代理当前在 Java 中不可用。
创建 OpenAIAssistantAgent
创建 OpenAIAssistant
需要调用异步处理的远程服务。 为了管理这一点,OpenAIAssistantAgent
通过静态工厂方法实例化,从而确保该过程以非阻塞的方式进行。 此方法抽象了异步调用的复杂性,当助手完全初始化且准备好使用时,返回一个 promise 或 future。
AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant =
await this.AssistantClient.CreateAssistantAsync(
"<model name>",
"<agent name>",
instructions: "<agent instructions>");
OpenAIAssistantAgent agent = new(assistant, client);
from semantic_kernel.agents.open_ai import AzureAssistantAgent, OpenAIAssistantAgent
# Set up the client and model using Azure OpenAI Resources
client, model = AzureAssistantAgent.setup_resources()
# Define the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<agent name>",
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
# or
# Set up the client and model using OpenAI Resources
client, model = OpenAIAssistantAgent.setup_resources()
# Define the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<agent name>",
)
# Create the OpenAIAssistantAgent instance using the client and the assistant definition
agent = OpenAIAssistantAgent(
client=client,
definition=definition,
)
代理当前在 Java 中不可用。
检索一个OpenAIAssistantAgent
创建后,可以通过其标识符访问助手的标识。 此标识符可用于从已存在的助手定义创建 OpenAIAssistantAgent
。
对于 .NET,代理标识符通过由任何代理定义的属性以 string
的形式公开。
AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant = await this.AssistantClient.GetAssistantAsync("<assistant id>");
OpenAIAssistantAgent agent = new(assistant, client);
# Using Azure OpenAI Resources
# 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="<agent name>",
instructions="<instructions>",
)
# Store the assistant ID
assistant_id = definition.id
# Retrieve the assistant definition from the server based on the assistant ID
new_asst_definition = await client.beta.assistants.retrieve(assistant_id)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=new_asst_definition,
)
代理当前在 Java 中不可用。
使用 OpenAIAssistantAgent
和 助手 API 的所有方面一样,对话会被远程存储。 每个对话称为线程,并由唯一string
标识。 与你的 OpenAIAssistantAgent
的交互将绑定到此特定的线程标识符,该标识符必须在调用代理程序时指定。
// Define agent
OpenAIAssistantAgent agent = ...;
// Create a thread for the agent conversation.
string threadId = await agent.CreateThreadAsync();
// Add a user message to the conversation
chat.Add(threadId, new ChatMessageContent(AuthorRole.User, "<user input>"));
// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync(threadId))
{
// Process agent response(s)...
}
// Delete the thread when it is no longer needed
await agent.DeleteThreadAsync(threadId);
# Define agent
openai_agent = await ...
# Create a thread for the agent conversation
thread_id = await agent.create_thread()
# Add a user message to the conversation
await agent.add_chat_message(
thread_id=thread_id,
message=ChatMessageContent(role=AuthorRole.USER, content="<user input>"),
)
# Generate the agent response(s)
async for response in agent.invoke(thread_id=thread_id):
# process agent response(s)...
# Delete the thread when it is no longer needed
await agent.delete_thread(thread_id)
代理当前在 Java 中不可用。
删除 OpenAIAssistantAgent
由于助手的定义是远程存储的,因此如果未删除,它将保留。
可以直接使用AssistantClient
删除助理定义。
注意:在删除代理实例后尝试使用代理实例将导致服务异常。
对于 .NET,通过任何代理定义的string
属性来公开代理标识符Agent.Id
。
AssistantClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(...).GetAssistantClient();
Assistant assistant = await this.AssistantClient.DeleteAssistantAsync("<assistant id>");
await agent.delete()
is_deleted = agent._is_deleted
代理当前在 Java 中不可用。
操作说明
有关 OpenAIAssistantAgent
的从头到尾示例,请参阅: