// 1. 创建LlmAgent
LlmAgent agent = LlmAgent.builder()
.name("agent-name")
.description("Agent description")
.model("gemini-2.0-flash")
.instruction("You are a helpful assistant.")
.tools(new GoogleSearchTool()) // 可选工具
.build();
// 2. 创建Runner
Runner runner = new Runner(
agent, // LlmAgent实例
"app-name", // 应用名称
null, // ArtifactService (可选)
new InMemorySessionService() // SessionService
);
// 3. 发送消息并获取响应
Content userMessage = Content.fromParts(Part.fromText("Hello"));
Flowable<Event> flow = runner.runAsync("user-id", "session-id", userMessage);
// 4. 处理事件流
StringBuilder result = new StringBuilder();
flow.blockingForEach(event -> {
event.content().ifPresent(content -> {
content.parts().ifPresent(parts -> {
parts.forEach(part -> part.text().ifPresent(result::append));
});
});
});
// 1. 使用AgenticServices创建Agent
WithdrawAgent withdrawAgent = AgenticServices
.agentBuilder(WithdrawAgent.class)
.chatModel(BASE_MODEL)
.tools(bankTool)
.build();
// 2. 创建SupervisorAgent
SupervisorAgent bankSupervisor = AgenticServices
.supervisorBuilder()
.chatModel(PLANNER_MODEL)
.subAgents(withdrawAgent, creditAgent, exchangeAgent)
.responseStrategy(SupervisorResponseStrategy.SUMMARY)
.build();
// 3. 调用SupervisorAgent
String result = bankSupervisor.invoke("Transfer 100 EUR from Mario's account to Georgios' one");
// 4. SupervisorAgent接口定义
public interface SupervisorAgent {
@Agent
String invoke(@V("request") String request);
}
// 1. 定义Agent类 (使用@Action注解)
public class StarNewsFinder {
@Action
public StarPerson extractStarPerson(UserInput userInput, Ai ai) {
return ai
.withLlm(OpenAiModels.GPT_41)
.createObjectIfPossible(
"Create a person from this user input...",
StarPerson.class
);
}
@Action(toolGroups = {CoreToolGroups.WEB})
public RelevantNewsStories findNewsStories(
StarPerson person,
Horoscope horoscope,
Ai ai) {
return ai
.withDefaultLlm()
.createObject(prompt, RelevantNewsStories.class);
}
@AchievesGoal(description = "Write an amusing writeup...")
@Action
public Writeup writeup(StarPerson person, RelevantNewsStories stories, Ai ai) {
// 实现逻辑
}
}
// 2. Agent核心类构造
Agent agent = new Agent(
"agent-name", // name
"provider", // provider
"1.0", // version
"description", // description
Set.of(), // conditions
List.of(), // actions
Set.of() // goals
);
// 1. 创建AgentCard
AgentCard card = new AgentCard();
card.setName("agent-name");
card.setDescription("Agent description");
// 2. 创建ReActAgent
ReActAgent agent = new ReActAgent(card);
// 3. 调用Agent (同步)
Session session = new Session();
Object result = agent.invoke("message", session);
// 4. 流式调用
Iterator<Object> stream = agent.stream("message", session, List.of());
while (stream.hasNext()) {
Object chunk = stream.next();
// 处理每个chunk
}
// 5. 配置Agent
ReActAgentConfig config = agent.getConfig();
AgentTeam是一组Agent的协作,不依赖特定框架,统一管理:
// 1. 初始化团队
Map<String, AgentRuntime> agentRuntimes = new HashMap<>();
ThreadGroup teamGroup = new ThreadGroup("team-" + teamId);
// 2. 并行执行
agentRuntimes.values().parallelStream()
.forEach(rt -> rt.sendMessage(id, sid, message));
// 3. 串行执行
agentRuntimes.values()
.forEach(rt -> rt.sendMessage(id, sid, message));
// 4. 使用ThreadGroup管理
ThreadGroup group = groups.get(id);
group.interrupt(); // 停止所有线程
// 已实现 - GoogleAdkAgentRuntime.java
- 使用LlmAgent.builder()创建Agent
- 使用Runner构造函数创建Runner
- 使用runAsync()和Flowable处理消息
- 正确处理Event、Content、Part
- 所有方法不超过10行
// 待实现 - Langchain4jAgentRuntime.java
- 使用AgenticServices.supervisorBuilder()创建SupervisorAgent
- 实现invoke()调用
- 研究TokenStream API实现流式
// 待实现 - EmbabelAgentRuntime.java
- 创建Agent实例,定义goals和actions
- 使用Ai接口调用LLM
- 实现基于@Action的执行
// 待实现 - OpenJiuwenAgentRuntime.java
- 创建AgentCard和ReActAgent
- 实现invoke()调用
- 实现stream()流式调用
// 已实现 - UnifiedAgentTeamRuntime.java
- 管理多个AgentRuntime
- 实现并行/串行执行
- 使用ThreadGroup管理线程
dependencies {
// Google ADK
implementation 'com.google.adk:google-adk:1.2.0'
// Langchain4j
implementation platform("dev.langchain4j:langchain4j-bom:1.14.0")
implementation "dev.langchain4j:langchain4j-agentic"
// Embabel Agent
implementation "com.embabel.agent:embabel-agent-starter:0.2.0-SNAPSHOT"
// OpenJiuwen
implementation 'com.openjiuwen:agent-core-java:0.1.7'
}
所有依赖已正确配置在build.gradle中。