1. 概念全景图:从Prompt到MCP的技术脉络
第一次接触这些术语时,我就像走进了一个满是缩写字母的迷宫。直到参与了一个智能客服系统开发项目,才真正理解这些概念如何在实际工程中协同工作。让我们用开发者的视角,把这些抽象概念还原成可操作的代码组件。
1.1 Prompt:人机对话的触发器
Prompt不是简单的字符串输入,而是精心设计的交互协议。在Java中实现时,我们常用Builder模式构建结构化Prompt:
java复制public class ChatPrompt {
private String systemMessage;
private List<Message> history;
private Map<String, Object> parameters;
// Builder模式示例
public static class Builder {
private String systemRole = "你是一个专业客服助手";
private List<Message> dialogHistory = new ArrayList<>();
public Builder withSystemRole(String role) {
this.systemRole = role;
return this;
}
public Builder addUserMessage(String content) {
dialogHistory.add(new Message("user", content));
return this;
}
public ChatPrompt build() {
ChatPrompt prompt = new ChatPrompt();
prompt.systemMessage = this.systemRole;
prompt.history = Collections.unmodifiableList(this.dialogHistory);
return prompt;
}
}
}
关键经验:Prompt中的system message位置直接影响模型表现。实测发现,某些AI引擎会忽略非首行的系统指令,这是很多开发者容易踩的坑。
1.2 Agent:智能业务处理器
Agent不是魔法黑盒,而是有明确生命周期的状态机。这是我为一个电商客服Agent设计的核心状态流转:
java复制public enum AgentState {
IDLE, // 等待唤醒
LISTENING, // 接收输入
PROCESSING, // 调用技能
RESPONDING, // 生成输出
ERROR // 异常处理
}
public class CustomerServiceAgent {
private AgentState currentState;
private SkillRegistry skillRegistry;
public Response handleRequest(Request request) {
try {
transitionState(AgentState.LISTENING);
ParsedInput input = parseRequest(request);
transitionState(AgentState.PROCESSING);
Skill matchedSkill = skillRegistry.findBestMatch(input);
transitionState(AgentState.RESPONDING);
return matchedSkill.execute(input);
} catch (Exception e) {
transitionState(AgentState.ERROR);
return fallbackResponse();
} finally {
transitionState(AgentState.IDLE);
}
}
}
1.3 Function Call与Skill的微妙差异
这两个概念经常被混用,但它们在工程实现上有本质区别:
| 维度 | Function Call | Skill |
|---|
