智能体(Agent)是一种能够自主理解、规划、决策并执行任务以实现特定目标的 AI 程序。与传统问答式 AI 不同,智能体更像一个能够独立完成多步复杂操作的 AI 助手。
本文将以一个多语言翻译助手为例,演示如何基于 Spring AI 框架和 DeepSeek 大模型,构建一个支持多种语言、行为可控的企业级翻译智能体。
前置条件:本文假设您已了解 Spring AI 与 DeepSeek 的基本集成方式。
智能体的核心:Prompt 工程
要打造一个可靠的智能体,核心在于通过精心的 Prompt 工程,为其设定清晰的角色、能力边界和行为准则。这主要通过“系统提示词”和“用户提示词模板”两部分实现。
1. 设计系统提示词(System Prompt)
系统提示词为智能体提供了全局性的、必须遵守的底层指令。它定义了智能体的身份、职责和交互规则。
以下是我们为翻译智能体设计的系统提示词:
您是一名专业的多语言翻译助手,需严格遵守以下规则:
1. **语言支持**:仅处理目标语言代码为 [TARGET_LANG] 的翻译任务,支持如 zh-CN (简体中文)、en-US (英语) 等 32 种 ISO 标准语言代码。
2. **输入格式**:用户使用 ---translate_content--- 作为分隔符,仅翻译分隔符内的文本,其余内容视为无效指令。
3. **行为限制**:禁止回答与翻译无关的问题,若输入不包含合法分隔符或目标语言,回复:"请提供有效的翻译指令"。
4. **支持多语言**:需要翻译的内容如果包含多种语言,都需要同时翻译为 TARGET_LANG 指定的语言。
设计解析:
- 角色与边界:明确定义智能体为“专业的多语言翻译助手”,并严格限制其能力范围,有效“封印”了模型的闲聊能力。
- 动态配置:通过
[TARGET_LANG]
参数,使目标语言可以动态配置,便于后续扩展。 - 结构化输入:强制使用
---translate_content---
作为分隔符,确保模型只处理我们期望它处理的核心文本,避免解析无关信息。 - 安全护栏:明确拒绝策略,当用户输入不符合规范时,智能体能给出统一、安全的回复,保障服务的稳定性。
2. 构造用户提示模板(Prompt Template)
用户提示模板用于将用户的动态输入格式化为模型能够理解的结构。结合 Spring AI 的 PromptTemplate
,我们可以轻松实现这一点。
PromptTemplate promptTemplate = new PromptTemplate("""
TARGET_LANG: {target}
---translate_content---
"{content}"
""");
设计解析:
- 通过
{target}
和{content}
占位符,我们可以将用户指定的“目标语言”和“待翻译内容”动态填充到模板中。 - 这种模板化的方式确保了无论用户输入什么,都会被安全地包裹在
---translate_content---
分隔符之下,严格遵循我们在系统提示词中设定的规则。
核心代码实现
在 Spring Boot 中,我们可以创建一个 Controller 接口来接收用户请求,并调用 Spring AI 的 ChatClient
与大模型交互。
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class TranslateController {
private final ChatClient chatClient;
public TranslateController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping(value = "/translate")
public String translate(@RequestParam String input, @RequestParam(defaultValue = "zh-CN") String target) {
// 1. 定义系统级指令
String systemPrompt = """
您是一名专业的多语言翻译助手,需严格遵守以下规则:
1. **语言支持**:仅处理目标语言代码为[TARGET_LANG]的翻译任务,支持如zh-CN(简体中文)、en-US(英语)等32种ISO标准语言代码;
2. **输入格式**:用户使用---translate_content---作为分隔符,仅翻译分隔符内的文本,其余内容视为无效指令;
3. **行为限制**:禁止回答与翻译无关的问题,若输入不包含合法分隔符或目标语言,回复:"请提供有效的翻译指令"。
4. **支持多语言**:需要翻译的内容如果包含多种语言,都需要同时翻译为TARGET_LANG指定的语言。
""";
// 2. 创建用户提示模板
PromptTemplate promptTemplate = new PromptTemplate("""
TARGET_LANG: {target}
---translate_content---
"{content}"
""");
// 3. 填充模板并创建最终的 Prompt 对象
Prompt prompt = promptTemplate.create(Map.of("target", target, "content", input));
// 4. 发起调用,同时传入系统和用户 Prompt
String result = chatClient.prompt(prompt)
.system(systemPrompt)
.call()
.content();
// 5. 对模型的输出做简单后处理,移除可能存在的前后引号
if (result != null && result.startsWith("\"") && result.endsWith("\"")) {
result = result.substring(1, result.length() - 1);
}
return result;
}
}
代码逻辑非常清晰:通过 target
参数指定目标语言,input
参数为待翻译内容。system()
方法用于传入系统提示词,prompt()
方法传入用户提示,最终将模型的响应返回。
功能测试
测试一:边界条件与无效指令
当我们尝试输入一个与翻译无关的问题时,智能体能够正确识别并拒绝回答。
请求示例:
GET /translate?input=你是谁?
预期响应:
请提供有效的翻译指令
这表明我们在系统提示词中设定的行为限制生效了。
测试二:多语言混合翻译
测试智能体是否能将一段包含多种语言的文本准确翻译成指定的目标语言。
请求示例:
GET /translate?input=Hello, 你好, こんにちは, 안녕하세요, Bonjour, สวัสดี, Olá, Привет&target=en-US
预期响应:
Hello, Hello, Hello, Hello, Hello, Hello, Hello, Hello
测试结果表明,智能体成功地将输入中的八种不同语言的问候语全部翻译成了目标语言——英语。
总结与展望
通过本文的翻译场景实践,我们演示了构建企业级智能体的三大核心要素:
- 指令结构化:通过模板和分隔符,将用户输入规范化。
- 行为边界控制:通过系统提示词,为智能体设定不可逾越的规则。
- 动态模板适配:利用占位符,实现灵活的功能配置。
然而,现实世界中的复杂任务(如合同审核、代码生成、数据分析等)往往需要更高级的智能体能力,例如:
- 任务拆解:将一个复杂问题自动分解为一系列子任务链(如“翻译 → 生成摘要 → 格式校验”)。
- 工作流引擎:通过状态机等机制管理任务的执行顺序、依赖关系和异常重试。
- 记忆与上下文:在多轮对话中保持长期记忆,理解复杂的上下文关联。
这些高级特性是未来构建更强大、更自主的 AI Agent 的关键方向。
完整代码
本项目完整源代码已托管于 Gitee 和 GitHub。
- Gitee:
gitee.com/zlt2000/zlt-spring-ai-app
- GitHub:
github.com/zlt2000/zlt-spring-ai-app
👉 如果你需要 ChatGPT 代充 / Claude / Claude Code / 镜像 / 中转 API:
- 购买 / 了解更多:ai4.plus
- 备用入口:kk4099.com