Skip to content

embabel/java-agent-template

Repository files navigation

Generated Agent Project

Build

Java Spring Apache Maven ChatGPT


Starting point for your own agent development using the Embabel framework.

Uses Spring Boot 3.5.9 and Embabel 0.3.1.

Add your magic here!

Illustrates:

  • An injected demo showing how any Spring component can be injected with an Embabel Ai instance to enable it to perform LLM operations.
  • A simple agent
  • Unit tests for an agent verifying prompts and hyperparameters

For the Kotlin equivalent, see our Kotlin agent template.

Running

Run the shell script to start Embabel under Spring Shell:

./scripts/shell.sh

There is a single example agent, WriteAndReviewAgent. It uses one LLM with a high temperature and creative persona to write a story based on your input, then another LLM with a low temperature and different persona to review the story.

When the Embabel shell comes up, invoke the story agent like this:

x "Tell me a story about...[your topic]"

Try the following other shell commands:

  • demo: Runs the same agent, invoked programmatically, instead of dynamically based on user input. See DemoCommands.java for the implementation.
  • animal: Runs a simple demo using an Embabel injected Ai instance to call an LLM. See InjectedDemo.

Suggested Next Steps

To get a feel for working with Embabel, try the following:

  • Modify the prompts in WriteAndReviewAgent and InjectedDemo.
  • Experiment with different models and hyperparameters by modifying withLlm calls.
  • Integrate your own services, injecting them with Spring. All Embabel @Agent classes are Spring beans.
  • Run the tests with mvn test and modify them to experiment with prompt verification.

To see tool support, check out the more complex Embabel Agent API Examples repository.

Model support

Embabel integrates with any LLM supported by Spring AI.

See LLM integration guide (work in progress).

Also see Spring AI models.

Testing

This repository includes unit tests and integration tests demonstrating how to test Embabel agents.

Running Tests

mvn test

Unit Tests

Unit tests use Embabel's FakeOperationContext and FakePromptRunner to test agent actions in isolation without calling actual LLMs.

See WriteAndReviewAgentTest.java for examples of:

  • Creating a fake context with FakeOperationContext.create()
  • Setting up expected responses with context.expectResponse()
  • Verifying prompt content contains expected values
  • Inspecting LLM invocations via promptRunner.getLlmInvocations()
var context = FakeOperationContext.create();
context.expectResponse(new Story("Once upon a time..."));

var story = agent.craftStory(userInput, context.ai());

var prompt = context.getLlmInvocations().getFirst().getMessages().getFirst().getContent();
assertTrue(prompt.contains("knight"));

Integration Tests

Integration tests extend EmbabelMockitoIntegrationTest to test complete agent workflows under Spring Boot with a fully configured AgentPlatform.

See WriteAndReviewAgentIntegrationTest.java for examples of:

  • Mocking LLM responses with whenCreateObject() and whenGenerateText()
  • Running complete agent workflows via AgentInvocation
  • Verifying LLM calls and hyperparameters with verifyCreateObjectMatching() and verifyGenerateTextMatching()
whenCreateObject(prompt -> prompt.contains("Craft a short story"), Story.class)
    .thenReturn(new Story("AI will transform our world..."));

var invocation = AgentInvocation.create(agentPlatform, ReviewedStory.class);
var result = invocation.invoke(input);

verifyCreateObjectMatching(
    prompt -> prompt.contains("Craft a short story"),
    Story.class,
    llm -> llm.getLlm().getTemperature() == 0.7
);

Contributors

Embabel contributors

About

Java agent template

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 8