探索 语义内核 Open AI 助手代理 (实验性)

警告

语义内核代理框架是实验性的,仍在开发中,可能会更改。

有关此讨论的详细 API 文档在以下位置提供:

代理当前在 Java 中不可用。

什么是助手?

OpenAI 助手 API 是专为更高级和交互式 AI 功能设计的专用界面,使开发人员能够创建个性化的多步骤面向任务的代理。 与专注于简单聊天交换的聊天完成 API 不同,助手 API 允许动态、目标驱动的交互与代码解释器和文件搜索等其他功能交互。

创建 Open AI 助手代理

创建 Open AI 助手需要调用异步处理的远程服务。 为了管理这一点, Open AI 助手代理 通过静态工厂方法实例化,确保该过程以非阻塞方式发生。 此方法抽象化异步调用的复杂性,在助手完全初始化并可供使用后返回承诺或将来。

OpenAIAssistantAgent agent =
    await OpenAIAssistantAgent.CreateAsync(
        OpenAIClientProvider.ForAzureOpenAI(/*<...service configuration>*/),
        new OpenAIAssistantDefinition("<model name>")
        {
          Name = "<agent name>",
          Instructions = "<agent instructions>",
        },
        new Kernel());
azure_agent = await AzureAssistantAgent.create(
    kernel=kernel, 
    service_id=service_id, 
    name="<agent name>", 
    instructions="<agent instructions>"
)

# or

openai_agent = await OpenAIAssistantAgent.create(
    kernel=kernel, 
    service_id=service_id, 
    name="<agent name>", 
    instructions="<agent instructions>"
)

代理当前在 Java 中不可用。

检索 Open AI 助手代理

创建后,助手的标识符可以通过其标识符进行访问。 此标识符可用于从现有助理定义创建 Open AI 助手代理

对于 .NET,代理标识符通过任何代理定义的属性公开 string

OpenAIAssistantAgent agent =
    await OpenAIAssistantAgent.RetrieveAsync(
        OpenAIClientProvider.ForAzureOpenAI(/*<...service configuration>*/),
        "<your agent id>",
        new Kernel());
agent = await OpenAIAssistantAgent.retrieve(id=agent_id, kernel=kernel)

# or

agent = await AzureAssistantAgent.retrieve(id=agent_id, kernel=kernel)

代理当前在 Java 中不可用。

使用 Open AI 助手代理

与助手 API 的所有方面一样,对话会远程存储。 每个会话称为线程,并由唯string标识符标识。 与 OpenAI 助手代理 的交互绑定到此特定线程标识符,该标识符必须在调用代理时指定/

// 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 中不可用。

删除 Open AI 助手代理

由于助手的定义是远程存储的,因此它支持自我删除的功能。 这样,当不再需要代理时,可以从系统中删除代理。

注意:在删除代理实例后尝试使用代理实例会导致异常。

对于 .NET,代理标识符通过Agent.Id任何代理定义的属性公开string

// Perform the deletion
await agent.DeleteAsync();

// Inspect whether an agent has been deleted
bool isDeleted = agent.IsDeleted();
await agent.delete()

is_deleted = agent._is_deleted

代理当前在 Java 中不可用。

操作说明

有关 Open AI 助手代理的端到端示例,请参阅: