@@ -6,7 +6,7 @@ services: azure-ai-agent-service
6
6
manager : nitinme
7
7
ms.service : azure-ai-agent-service
8
8
ms.topic : how-to
9
- ms.date : 07/11 /2025
9
+ ms.date : 08/07 /2025
10
10
author : aahill
11
11
ms.author : aahi
12
12
ms.custom : azure-ai-agents
@@ -555,3 +555,166 @@ client.Administration.DeleteAgent(agent.Id);
555
555
```
556
556
557
557
::: zone-end
558
+
559
+ :::zone pivot="java"
560
+
561
+ ## Code example
562
+
563
+ ```java
564
+ package com.example.agents;
565
+
566
+ import com.azure.ai.agents.persistent.MessagesClient;
567
+ import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient;
568
+ import com.azure.ai.agents.persistent.PersistentAgentsClient;
569
+ import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder;
570
+ import com.azure.ai.agents.persistent.RunsClient;
571
+ import com.azure.ai.agents.persistent.ThreadsClient;
572
+ import com.azure.ai.agents.persistent.implementation.models.CreateAgentRequest;
573
+ import com.azure.ai.agents.persistent.models.AzureFunctionBinding;
574
+ import com.azure.ai.agents.persistent.models.AzureFunctionDefinition;
575
+ import com.azure.ai.agents.persistent.models.AzureFunctionStorageQueue;
576
+ import com.azure.ai.agents.persistent.models.AzureFunctionToolDefinition;
577
+ import com.azure.ai.agents.persistent.models.CreateRunOptions;
578
+ import com.azure.ai.agents.persistent.models.FunctionDefinition;
579
+ import com.azure.ai.agents.persistent.models.MessageImageFileContent;
580
+ import com.azure.ai.agents.persistent.models.MessageRole;
581
+ import com.azure.ai.agents.persistent.models.MessageTextContent;
582
+ import com.azure.ai.agents.persistent.models.PersistentAgent;
583
+ import com.azure.ai.agents.persistent.models.PersistentAgentThread;
584
+ import com.azure.ai.agents.persistent.models.RunStatus;
585
+ import com.azure.ai.agents.persistent.models.ThreadMessage;
586
+ import com.azure.ai.agents.persistent.models.ThreadRun;
587
+ import com.azure.ai.agents.persistent.models.MessageContent;
588
+ import com.azure.core.http.HttpHeaderName;
589
+ import com.azure.core.http.rest.PagedIterable;
590
+ import com.azure.core.http.rest.RequestOptions;
591
+ import com.azure.core.util.BinaryData;
592
+ import com.azure.identity.DefaultAzureCredentialBuilder;
593
+ import java.util.Arrays;
594
+ import java.util.HashMap;
595
+ import java.util.Map;
596
+
597
+ public class AgentExample {
598
+
599
+ public static void main(String[] args) {
600
+
601
+ // variables for authenticating requests to the agent service
602
+ String projectEndpoint = System.getenv("PROJECT_ENDPOINT");
603
+ String modelName = System.getenv("MODEL_DEPLOYMENT_NAME");
604
+ String storageQueueUri = System.getenv("STORAGE_QUEUE_URI");
605
+ String azureFunctionName = System.getenv("AZURE_FUNCTION_NAME");
606
+
607
+ PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder().endpoint(projectEndpoint)
608
+ .credential(new DefaultAzureCredentialBuilder().build());
609
+ PersistentAgentsClient agentsClient = clientBuilder.buildClient();
610
+ PersistentAgentsAdministrationClient administrationClient = agentsClient.getPersistentAgentsAdministrationClient();
611
+ ThreadsClient threadsClient = agentsClient.getThreadsClient();
612
+ MessagesClient messagesClient = agentsClient.getMessagesClient();
613
+ RunsClient runsClient = agentsClient.getRunsClient();
614
+
615
+ FunctionDefinition fnDef = new FunctionDefinition(
616
+ azureFunctionName,
617
+ BinaryData.fromObject(
618
+ mapOf(
619
+ "type", "object",
620
+ "properties", mapOf(
621
+ "location",
622
+ mapOf("type", "string", "description", "The location to look up")
623
+ ),
624
+ "required", new String[]{"location"}
625
+ )
626
+ )
627
+ );
628
+ AzureFunctionDefinition azureFnDef = new AzureFunctionDefinition(
629
+ fnDef,
630
+ new AzureFunctionBinding(new AzureFunctionStorageQueue(storageQueueUri, "agent-input")),
631
+ new AzureFunctionBinding(new AzureFunctionStorageQueue(storageQueueUri, "agent-output"))
632
+ );
633
+ AzureFunctionToolDefinition azureFnTool = new AzureFunctionToolDefinition(azureFnDef);
634
+
635
+ String agentName = "azure_function_example";
636
+ RequestOptions requestOptions = new RequestOptions()
637
+ .setHeader(HttpHeaderName.fromString("x-ms-enable-preview"), "true");
638
+ CreateAgentRequest createAgentRequestObj = new CreateAgentRequest(modelName)
639
+ .setName(agentName)
640
+ .setInstructions("You are a helpful agent. Use the provided function any time "
641
+ + "you are asked with the weather of any location")
642
+ .setTools(Arrays.asList(azureFnTool));
643
+ BinaryData createAgentRequest = BinaryData.fromObject(createAgentRequestObj);
644
+ PersistentAgent agent = administrationClient.createAgentWithResponse(createAgentRequest, requestOptions)
645
+ .getValue().toObject(PersistentAgent.class);
646
+
647
+ PersistentAgentThread thread = threadsClient.createThread();
648
+ ThreadMessage createdMessage = messagesClient.createMessage(
649
+ thread.getId(),
650
+ MessageRole.USER,
651
+ "What is the weather in Seattle, WA?");
652
+
653
+ try {
654
+ //run agent
655
+ CreateRunOptions createRunOptions = new CreateRunOptions(thread.getId(), agent.getId())
656
+ .setAdditionalInstructions("");
657
+ ThreadRun threadRun = runsClient.createRun(createRunOptions);
658
+
659
+ waitForRunCompletion(thread.getId(), threadRun, runsClient);
660
+ printRunMessages(messagesClient, thread.getId());
661
+ } catch (InterruptedException e) {
662
+ throw new RuntimeException(e);
663
+ } finally {
664
+ //cleanup
665
+ threadsClient.deleteThread(thread.getId());
666
+ administrationClient.deleteAgent(agent.getId());
667
+ }
668
+ }
669
+
670
+ // Use "Map.of" if available
671
+ @SuppressWarnings("unchecked")
672
+ private static <T> Map<String, T> mapOf(Object... inputs) {
673
+ Map<String, T> map = new HashMap<>();
674
+ for (int i = 0; i < inputs.length; i += 2) {
675
+ String key = (String) inputs[i];
676
+ T value = (T) inputs[i + 1];
677
+ map.put(key, value);
678
+ }
679
+ return map;
680
+ }
681
+
682
+ // A helper function to print messages from the agent
683
+ public static void printRunMessages(MessagesClient messagesClient, String threadId) {
684
+
685
+ PagedIterable<ThreadMessage> runMessages = messagesClient.listMessages(threadId);
686
+ for (ThreadMessage message : runMessages) {
687
+ System.out.print(String.format("%1$s - %2$s : ", message.getCreatedAt(), message.getRole()));
688
+ for (MessageContent contentItem : message.getContent()) {
689
+ if (contentItem instanceof MessageTextContent) {
690
+ System.out.print((((MessageTextContent) contentItem).getText().getValue()));
691
+ } else if (contentItem instanceof MessageImageFileContent) {
692
+ String imageFileId = (((MessageImageFileContent) contentItem).getImageFile().getFileId());
693
+ System.out.print("Image from ID: " + imageFileId);
694
+ }
695
+ System.out.println();
696
+ }
697
+ }
698
+ }
699
+
700
+ // a helper function to wait until a run has completed running
701
+ public static void waitForRunCompletion(String threadId, ThreadRun threadRun, RunsClient runsClient)
702
+ throws InterruptedException {
703
+
704
+ do {
705
+ Thread.sleep(500);
706
+ threadRun = runsClient.getRun(threadId, threadRun.getId());
707
+ }
708
+ while (
709
+ threadRun.getStatus() == RunStatus.QUEUED
710
+ || threadRun.getStatus() == RunStatus.IN_PROGRESS
711
+ || threadRun.getStatus() == RunStatus.REQUIRES_ACTION);
712
+
713
+ if (threadRun.getStatus() == RunStatus.FAILED) {
714
+ System.out.println(threadRun.getLastError().getMessage());
715
+ }
716
+ }
717
+ }
718
+ ```
719
+
720
+ :::zone-end
0 commit comments