主题
03 · 入门(Getting Started)
快速开始(Quickstart)
有两个 GitHub 模板仓库可以用来创建你自己的项目:
- Java 模板 —— https://github.com/embabel/java-agent-template
- Kotlin 模板 —— https://github.com/embabel/kotlin-agent-template
或者用官方的项目创建器生成一个自定义项目:
bash
uvx --from git+https://github.com/embabel/project-creator.git project-creatoruvx 命令可从 astral-uv 包安装。它是一个 Python 包与项目管理器,用于运行 Embabel 的项目创建器脚本。
拿到代码后,你就可以通过内置的 Maven profiles,用 OpenAI 或 Anthropic 的 LLM 来运行 Embabel。 关于 API key 配置请跳到环境搭建,或查看使用其它 LLM 提供方的详细说明。
获取二进制依赖(Getting the Binaries)
上手 Embabel Agent 最简单的方式,就是把 Spring Boot starter 依赖加入你的项目。 Embabel 的发布版本已发布到 Maven Central。
构建配置(Build Configuration)
根据你选择的应用类型,把对应的 Embabel Agent Spring Boot starter 加入构建文件:
Shell Starter
以控制台模式启动应用,并提供一个由 Embabel 驱动的交互式 shell。
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-shell</artifactId>
<version>${embabel-agent.version}</version>
</dependency>特性:
- ✅ 交互式命令行界面
- ✅ Agent 的发现与注册
- ✅ Human-in-the-loop(人在回路)能力
- ✅ 进度追踪与日志
- ✅ 对开发友好的错误处理
MCP Server Starter
以带 HTTP 监听器的方式启动应用:Agent 会被自动发现,并注册为 MCP server, 可通过 SSE、Streamable-HTTP 或无状态 Streamable-HTTP 协议进行集成。
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-mcpserver</artifactId>
<version>${embabel-agent.version}</version>
</dependency>特性:
- ✅️ MCP 协议服务端实现
- ✅️ 工具的注册与发现
- ✅️ 基于 SSE(Server-Sent Events)、Streamable-HTTP 或无状态 Streamable-HTTP 的 JSON-RPC 通信
- ✅️ 与兼容 MCP 的客户端集成
- ✅️ 安全与沙箱
基础 Agent 平台 Starter(Basic Agent Platform Starter)
在 Spring 容器中初始化 Embabel Agent Platform,平台相关的 bean 通过 Spring 依赖注入机制提供。 应用的启动模式(Web、控制台、微服务等)由应用设计者决定。
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter</artifactId>
<version>${embabel-agent.version}</version>
</dependency>特性:
- ✅️ 由应用自行决定启动模式(控制台、Web 应用等)
- ✅️ Agent 的发现与注册
- ✅️ 通过依赖注入获取 Agent Platform 的 bean
- ✅️ 进度追踪与日志
- ✅️ 对开发友好的错误处理
Embabel 快照(Embabel Snapshots)
如果你想使用 Embabel 的快照版本,需要把 Embabel 的仓库加入构建:
xml
<repositories>
<repository>
<id>embabel-releases</id>
<url>https://repo.embabel.com/artifactory/libs-release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>embabel-snapshots</id>
<url>https://repo.embabel.com/artifactory/libs-snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>环境搭建(Environment Setup)
运行应用之前,你需要为自己打算使用的 LLM 提供方配置 API key。
示例 .env 文件:
properties
OPENAI_API_KEY=your_openai_api_key_here
ANTHROPIC_API_KEY=your_anthropic_api_key_here
GEMINI_API_KEY=your_gemini_api_key_here
MISTRAL_API_KEY=your_mistral_api_key_here如果你是把二进制依赖直接加进项目,或者想用 OpenAI / Anthropic 之外的其它 LLM 提供方, 还需要加入对应厂商的专属依赖。按下面你选择的厂商照做即可。
OpenAI 兼容(GPT-4、GPT-5 等)
- 必需:
OPENAI_API_KEY—— OpenAI 或兼容服务(如 Azure OpenAI 等)的 API key - 可选:
OPENAI_BASE_URL:OpenAI 部署的 base URL(Azure AI 用https://{resource-name}.openai.azure.com/openai)OPENAI_COMPLETIONS_PATH:自定义 completions 端点路径(默认/v1/completions)OPENAI_EMBEDDINGS_PATH:自定义 embeddings 端点路径(默认/v1/embeddings)
也可以通过 application.yml 配置:
yaml
embabel:
agent:
platform:
models:
openai:
api-key: ${OPENAI_API_KEY:sk-dev-key} # ①
base-url: ${OPENAI_BASE_URL:} # ②① API key,可带一个用于本地开发的默认值 ② 可选的 base URL 覆盖
如果你没有使用 Embabel 的模板项目,还需要加上 embabel-agent-starter-openai:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-openai</artifactId>
<version>${embabel-agent.version}</version>
</dependency>自定义 OpenAI 兼容服务(OpenAi Custom)
- 必需:
OPENAI_CUSTOM_API_KEY—— OpenAI 兼容服务的 API key - 可选:
OPENAI_CUSTOM_BASE_URL:OpenAI 兼容 API 的 base URLOPENAI_CUSTOM_MODELS:要注册的自定义模型名的逗号分隔列表 (适用于 Groq、Together AI 等 OpenAI 兼容提供方)OPENAI_CUSTOM_COMPLETIONS_PATH:自定义 chat completions 端点路径OPENAI_CUSTOM_EMBEDDINGS_PATH:自定义 embeddings 端点路径
使用 OPENAI_CUSTOM_MODELS 时,请设置 EMBABEL_MODELS_DEFAULT_LLM 来指定默认使用哪个模型。
以 Groq 为例:
bash
export OPENAI_CUSTOM_BASE_URL="https://api.groq.com/openai"
export OPENAI_CUSTOM_API_KEY="your-groq-api-key"
export OPENAI_CUSTOM_MODELS="llama-3.3-70b-versatile,mixtral-8x7b-32768"
export EMBABEL_MODELS_DEFAULT_LLM="llama-3.3-70b-versatile"也可以通过 application.yml 配置:
yaml
embabel:
agent:
platform:
models:
openai:
custom:
api-key: ${OPENAI_CUSTOM_API_KEY:your-dev-key}
base-url: https://api.groq.com/openai
models: llama-3.3-70b-versatile,mixtral-8x7b-32768对于路径非标准的 API(例如 Z.AI),使用 completions 路径覆盖:
bash
export OPENAI_CUSTOM_BASE_URL="https://api.z.ai/api/coding/paas"
export OPENAI_CUSTOM_API_KEY="your-api-key"
export OPENAI_CUSTOM_COMPLETIONS_PATH="/v4/chat/completions"
export OPENAI_CUSTOM_MODELS="your-model-name"你还需要加上 embabel-agent-starter-openai-custom:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-openai-custom</artifactId>
<version>${embabel-agent.version}</version>
</dependency>Anthropic(Claude 3.x 等)
- 必需:
ANTHROPIC_API_KEY—— Anthropic 服务的 API key - 可选:
ANTHROPIC_BASE_URL—— Anthropic API 的 base URL
也可以通过 application.yml 配置:
yaml
embabel:
agent:
platform:
models:
anthropic:
api-key: ${ANTHROPIC_API_KEY:sk-ant-dev-key}
base-url: ${ANTHROPIC_BASE_URL:}还需要加上 embabel-agent-starter-anthropic:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-anthropic</artifactId>
<version>${embabel-agent.version}</version>
</dependency>DeepSeek
- 必需:
DEEPSEEK_API_KEY—— DeepSeek 服务的 API key - 可选:
DEEPSEEK_BASE_URL—— DeepSeek API 的 base URL(默认https://api.deepseek.com)
也可以通过 application.yml 配置:
yaml
embabel:
agent:
platform:
models:
deepseek:
api-key: ${DEEPSEEK_API_KEY:sk-dev-key}
base-url: ${DEEPSEEK_BASE_URL:}还需要加上 embabel-agent-starter-deepseek:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-deepseek</artifactId>
<version>${embabel-agent.version}</version>
</dependency>Google Gemini(OpenAI 兼容方式)
使用 Gemini 模型的 OpenAI 兼容端点。
- 必需:
GEMINI_API_KEY—— Google Gemini 服务的 API key - 可选:
GEMINI_BASE_URL—— Gemini API 的 base URL (默认https://generativelanguage.googleapis.com/v1beta/openai)
也可以通过 application.yml 配置:
yaml
embabel:
agent:
platform:
models:
gemini:
api-key: ${GEMINI_API_KEY:your-dev-key}
base-url: ${GEMINI_BASE_URL:}还需要加上 embabel-agent-starter-gemini:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-gemini</artifactId>
<version>${embabel-agent.version}</version>
</dependency>Google GenAI(原生方式)
使用原生 Google GenAI SDK,直接访问 Gemini 模型并支持全部特性(包括 thinking 模式)。
- 必需(API key 认证):
GOOGLE_API_KEY—— Google AI Studio 的 API key - 必需(Vertex AI 认证,作为 API key 的替代):
GOOGLE_PROJECT_ID:Google Cloud 项目 IDGOOGLE_LOCATION:Google Cloud 区域(例如us-central1)
Google AI Studio 用 API key 认证;Google Cloud 部署用 Vertex AI 认证。 Vertex AI 认证要求先配置好应用默认凭据(Application Default Credentials,ADC)。
Gemini 3 模型在 Vertex AI 上仅在全球(global)区域可用。 要用 Vertex AI 跑 Gemini 3,必须设置 GOOGLE_LOCATION=global。
要加入 Google GenAI 支持,请添加 embabel-agent-starter-google-genai:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-google-genai</artifactId>
<version>${embabel-agent.version}</version>
</dependency>可用的 LLM 模型包括:
gemini-3.5-flash—— 以 Flash 级速度与成本提供前沿级推理gemini-3.1-flash-lite—— 生产可用的轻量、高性价比模型gemini-3.1-pro-preview—— 最新的 Gemini 3.1 Pro 预览版,具备高级推理能力gemini-3.1-pro-preview-customtools—— 针对自定义工具使用优化的 Gemini 3.1 Progemini-3.1-flash-lite-preview—— 轻量、高性价比的最新一代模型gemini-2.5-pro—— 支持 thinking 的高性能模型gemini-2.5-flash—— 性价比最优的模型gemini-2.5-flash-lite—— 高性价比的高吞吐模型
可用的 embedding 模型包括:
gemini-embedding-001—— 推荐使用的 embedding 模型(3072 维)
application.yml 配置示例:
yaml
embabel:
models:
default-llm: gemini-2.5-flash # ①
default-embedding-model: gemini-embedding-001 # ②
llms:
fast: gemini-2.5-flash
best: gemini-2.5-pro
reasoning: gemini-3.1-pro-preview
embedding-services:
default: gemini-embedding-001
agent:
platform:
models:
googlegenai: # ③
api-key: ${GOOGLE_API_KEY} # ④
# 或使用 Vertex AI 认证:
# project-id: ${GOOGLE_PROJECT_ID}
# location: ${GOOGLE_LOCATION}
max-attempts: 10
backoff-millis: 5000① 把某个 Google GenAI 模型设为默认 LLM ② 把某个 Google GenAI embedding 模型设为默认 embedding 模型 ③ Google GenAI 专属配置 ④ API key 可以写在这里,也可以通过环境变量
GOOGLE_API_KEY提供
OCI Generative AI
要让 Agent 使用 OCI Generative AI,请添加 embabel-agent-starter-oci-genai:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-oci-genai</artifactId>
<version>${embabel-agent.version}</version>
</dependency>该 starter 默认使用 OCI 配置文件认证(~/.oci/config,profile 为 DEFAULT)。 至少需要配置 compartment OCID 与 region。
当 classpath 上没有标准 OpenAI 提供方时,OCI starter 会为 Embabel 的默认 LLM 与 embedding 模型提供 OCI 默认值, 因此纯 OCI 应用不必仅仅为了启动而去覆盖 embabel.models.default-llm。
yaml
embabel:
agent:
platform:
models:
ocigenai:
compartment-id: ocid1.compartment.oc1...
region: us-chicago-1
# authentication-type: FILE
models:
# 可选:换用别的 OCI 模型 id
# default-llm: meta.llama-3.3-70b-instruct
# default-embedding-model: cohere.embed-v4.0其它支持的认证类型包括 INSTANCE_PRINCIPAL、RESOURCE_PRINCIPAL、WORKLOAD_IDENTITY、 SESSION_TOKEN 与 SIMPLE。完整的 OCI 属性列表见配置参考。
Mistral AI
使用原生 Spring AI Mistral 客户端,覆盖 Mistral 的对话模型、代码模型(Codestral、Devstral) 与推理模型(Magistral)。
- 必需:
MISTRAL_API_KEY—— Mistral AI 服务的 API key - 可选:
MISTRAL_BASE_URL—— Mistral AI API 的 base URL(默认https://api.mistral.ai)
Mistral 的推理模型(Magistral 系列,以及具备推理能力的 Mistral Medium / Mistral Small 版本) 会把最终答案作为纯文本返回;其中间的推理过程不会通过 Embabel 的 thinking API 暴露。 由于它们响应可能更慢,如果遇到超时,请调大 embabel.agent.platform.http-client.read-timeout。
也可以通过 application.yml 配置:
yaml
embabel:
agent:
platform:
models:
mistralai:
api-key: ${MISTRAL_API_KEY:your-dev-key}
base-url: ${MISTRAL_BASE_URL:}还需要加上 embabel-agent-starter-mistral-ai:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-mistral-ai</artifactId>
<version>${embabel-agent.version}</version>
</dependency>可用的 LLM 模型包括:
mistral-large-2512—— Mistral Large 3,顶层旗舰mistral-medium-2604—— Mistral Medium 3.5,具备推理能力的中档mistral-medium-2508—— Mistral Medium 3.1mistral-small-2603—— Mistral Small 4,具备推理能力的小型档mistral-small-2506—— Mistral Small 3.2magistral-medium-2509—— Magistral Medium 1.2,专用推理模型magistral-small-2509—— Magistral Small 1.2,专用推理模型codestral-2508—— Codestral,代码生成devstral-2512—— Devstral 2,智能体编码ministral-8b-2512—— Ministral 8B,轻量ministral-3b-2512—— Ministral 3B,轻量
application.yml 配置示例:
yaml
embabel:
models:
default-llm: mistral-medium-2508
llms:
fast: mistral-small-2506
best: mistral-large-2512
reasoning: magistral-medium-2509LM Studio
LM Studio 是一个桌面应用,让你能在自己的电脑上(Windows / Mac / Linux)免费发现、下载并运行强大的 LLM, 从而支持离线使用、本地文档问答,甚至为你的项目托管一个 OpenAI 兼容的 API server, 让高级 AI 的可用性不再依赖云服务。它支持 GGUF 等格式,并让你对自己的模型保有隐私与控制权。
LM Studio Local Server 允许你在 localhost 上运行一个 LLM API server。
要加入 LM Studio 支持,请添加 embabel-agent-starter-lmstudio:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-lmstudio</artifactId>
<version>${embabel-agent.version}</version>
</dependency>按官方说明在 LM Studio 中配置好 LLM API,然后在 application.yml 里写配置。 下面这个例子里,我在 LM Studio 下载了一个 OpenAI 的 LLM 与 embedding 模型,并通过 LLM Server 暴露:
yaml
embabel:
agent:
platform:
autonomy:
agent-confidence-cut-off: 0.8
goal-confidence-cut-off: 0.8
models:
lmstudio:
base-url: http://127.0.0.1:1234
models:
default-llm: openai/gpt-oss-20b
default-embedding-model: text-embedding-nomic-embed-text-v1.5Ollama
Ollama 是一个开源应用,让你能在自己的电脑上(Windows / Mac / Linux)免费发现、下载并运行强大的 LLM, 支持离线使用、本地文档问答,甚至为你的项目托管 API server。 Ollama 应用可以在 localhost 上运行 LLM API server,同时暴露自己的 Ollama API 与 OpenAI 兼容 API。
按官方说明在本地把 Ollama 跑起来。
方式一:使用 Ollama API —— 添加 embabel-agent-starter-ollama:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-ollama</artifactId>
<version>${embabel-agent.version}</version>
</dependency>application.yml 配置示例(Embabel 使用 Spring AI 的配置来设置 Ollama 集成):
yaml
spring:
ai:
ollama:
# 使用默认端口时可以省略
base-url: http://localhost:11434
embabel:
models:
defaultLlm: ministral-3:8b
default-embedding-model: qwen3-embedding方式二:使用 OpenAI 兼容 API —— 添加 embabel-agent-starter-openai-custom:
xml
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-openai-custom</artifactId>
<version>${embabel-agent.version}</version>
</dependency>yaml
embabel:
agent:
platform:
models:
openai:
custom:
api-key: not-set # 该属性必须有,但 Ollama 不使用它的值
base-url: http://localhost:11434
models: ministral-3:8b,qwen3-embedding
models:
defaultLlm: ministral-3:8b
default-embedding-model: qwen3-embedding把 Embabel 跑起来(Getting Embabel Running)
运行官方示例
上手 Embabel 最快的方式就是跑官方示例:
bash
# 克隆并运行示例
git clone https://github.com/embabel/embabel-agent-examples
cd embabel-agent-examples/scripts/java
./shell.sh按你的偏好选择 java 或 kotlin 脚本目录。
前置条件(Prerequisites)
- Java 21+
- 来自 OpenAI、Anthropic 或 Google 的 API Key
- Maven 3.9+(可选)
设置你的 API key:
bash
export OPENAI_API_KEY="your_openai_key"
export ANTHROPIC_API_KEY="your_anthropic_key"
export GOOGLE_API_KEY="your_google_api_key"对 Google GenAI,你可以用 GOOGLE_API_KEY(Google AI Studio), 或用 Vertex AI 认证(GOOGLE_PROJECT_ID + GOOGLE_LOCATION)。
使用 Shell
Spring Shell 是与 Embabel Agent 框架交互的便捷方式,尤其在开发期间。
输入 help 查看可用命令,或用 execute / x 来运行一个 Agent:
bash
execute "Lynda is a Scorpio, find news for her" -p -r-p 与 -r 分别用于打印提示词与 LLM 响应;不加则输出更安静。 用 chat 进入交互式对话,用 choose-goal 在不真正运行任何东西的情况下检视 Embabel 如何给目标排序。
关于每条命令、参数、Tab 补全与历史快捷键的完整说明,见官方文档。
示例命令
可以在 shell 里试试这些:
bash
# 简单的星座运势 Agent
execute "My name is Sarah and I'm a Leo"
# 用 Web 工具做调研(需要带 MCP 扩展的 Docker Desktop)
execute "research the recent australian federal election. what is the position of the Greens party?"
# 事实核查
x "fact check the following: holden cars are still made in australia"实现你自己的 Shell 命令
你可以添加自定义 shell 命令,在开发期间直接调用特定的 Agent。完整示例与说明见官方文档。
给应用加一点 AI(Adding a Little AI to Your Application)
在进入完整的 Embabel Agent 之前,先看看用 Embabel 框架给应用加一点 AI 有多简单。 有时候,你要的不过就是这些。
使用 Embabel 最简单的方式,就是注入一个 OperationContext 并直接使用它的 AI 能力。 这种做法与标准的 Spring 依赖注入模式完全一致。
java
package com.embabel.example.injection;
import com.embabel.agent.api.common.OperationContext;
import com.embabel.common.ai.model.LlmOptions;
import org.springframework.stereotype.Component;
/**
* 演示 Embabel AI 能力的最简用法:把一个 AI 助手注入进 Spring 组件。
* 笑话会很糟,但别怪 Embabel,怪 LLM。
*/
@Component
public record InjectedComponent(Ai ai) {
public record Joke(String leadup, String punchline) {
}
public String tellJokeAbout(String topic) {
return ai
.withDefaultLlm()
.generateText("Tell me a joke about " + topic);
}
public Joke createJokeObjectAbout(String topic1, String topic2, String voice) {
return ai
.withLlm(LlmOptions.withDefaultLlm().withTemperature(.8))
.createObject("""
Tell me a joke about %s and %s.
The voice of the joke should be %s.
The joke should have a leadup and a punchline.
""".formatted(topic1, topic2, voice),
Joke.class);
}
}这个例子展示了 Embabel 设计哲学的几个关键点:
- 标准 Spring 集成:
Ai对象像任何其它 Spring 依赖一样,通过构造器注入获得。 - 简洁 API:可以直接通过
Ai接口访问 AI 能力,也可以用OperationContext.ai()—— 它同样可以被注入。 - 灵活配置:像 temperature 这样的 LLM 选项可以按调用逐个配置。
- 类型安全:通过
createObject()方法直接生成结构化对象。 - 一致的写法:用起来和任何 Spring 组件完全一样。
Ai 类型让你无需搭建完整的 Agent 就能使用 Embabel 的全部 AI 能力, 因此非常适合渐进式地给既有应用添加 AI 功能。
Ai 与 OperationContext 这两套 API 贯穿于所有 Embabel 应用,是通往核心 AI 及其它能力的便捷入口。
编写你的第一个 Agent(Writing Your First Agent)
创建第一个 Agent 最简单的方式,是使用 Java 或 Kotlin 的模板仓库。
示例:WriteAndReviewAgent
模板中包含一个 WriteAndReviewAgent,演示了几个关键概念:
java
@Agent(description = "Agent that writes and reviews stories")
public class WriteAndReviewAgent {
@Action
public Story writeStory(UserInput userInput, OperationContext context) {
return context.ai()
.withAutoLlm()
.createObject("""
You are a creative writer who aims to delight and surprise.
Write a story about %s
""".formatted(userInput.getContent()),
Story.class);
}
@AchievesGoal(description = "Review a story")
@Action
public ReviewedStory reviewStory(Story story, OperationContext context) {
return context.ai()
.withLlmByRole("reviewer")
.createObject("""
You are a meticulous editor.
Carefully review this story:
%s
""".formatted(story.text),
ReviewedStory.class);
}
}演示的关键概念
使用不同配置的多个 LLM:
- 写作 LLM 使用高温度(0.8)以激发创造力;
- 审阅 LLM 使用低温度(0.2)以进行分析式审查;
- 不同的人设(persona)引导模型的行为。
动作与目标:
@Action方法是 Agent 可以采取的步骤;@AchievesGoal标记完成 Agent 工作的那个终结动作。
领域对象:
Story与ReviewedStory是强类型的领域对象;- 它们帮助组织动作之间的交互结构。
运行你的 Agent
设置 API key 并启动 shell:
bash
export OPENAI_API_KEY="your_key_here"
./scripts/shell.sh在 shell 里试试:
bash
x "Tell me a story about a robot learning to paint"这个 Agent 会:
- 用写作 LLM 生成一个有创意的故事;
- 用审阅 LLM 审查并改进它;
- 返回最终审阅后的故事。
下一步
- 探索示例仓库,找到更复杂的 Agent;
- 阅读参考文档,了解详细的 API 信息;
- 试着自己构建面向特定领域的 Agent。