核心概念关系图

先上干货,这张图让你从整体上理解这五个概念是如何分层递进的:

image

更多项目实战在Java突击队网:susan.net.cn

一句话概括

  • Prompt 是你跟AI说的“人话”
  • Function Call 让AI能“动手干活”
  • Agent 让AI会“思考规划”
  • Skill 是AI的“职业技能证书”
  • MCP 是AI世界的“USB接口”

下面我们一层一层拆开揉碎了讲,每层都有Java代码示例。

第一层:Prompt——和AI对话的“普通话”

1.1 什么是Prompt?

Prompt(提示词) 就是你输入给AI的文本指令。

它就像你去餐厅点菜时说的“来一份宫保鸡丁”,AI就是那个服务员,听懂你的话然后给你上菜。

在Java里,调用AI模型的第一步就是构造Prompt。

我用最简单的Spring AI示例来演示:

import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPrompt;
import org.springframework.ai.chat.prompt.UserPrompt;

@Service
public class AIService {
    
    private final ChatClient chatClient;
    
    public AIService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }
    
    public String askAI(String question) {
        // 构造Prompt:可以包含系统消息和用户消息
        Prompt prompt = new Prompt(
            new SystemPrompt("你是一个Java架构师,擅长用通俗的语言解释技术概念。"),
            new UserPrompt(question)
        );
        
        // 调用AI并返回结果
        return chatClient.call(prompt).getResult().getOutput().getContent();
    }
}

这里的SystemPromptUserPrompt就是最基础的Prompt形式。

它们决定了AI的身份和你要问的问题。

1.2 Prompt的高级玩法

光有基础Prompt还不够,在实际应用中我们经常需要提示词工程来引导AI做出更好的回答。比如:

public String generateJavaCode(String requirement) {
    String promptTemplate = """
        你是一个资深的Java开发工程师。
        请根据以下需求生成Java代码,代码要包含必要的注释,并考虑异常处理:
        
        需求:%s
        
        请输出完整的Java类代码。
        """;
    
    String prompt = String.format(promptTemplate, requirement);
    return chatClient.call(new Prompt(prompt)).getResult().getOutput().getContent();
}

Prompt的本质:它是人类意图与AI能力之间的“翻译官”。

Prompt写得好,AI才能干得好。

第二层:Function Calling——让AI从“说话”到“动手”

Prompt只能让AI“说话”,但AI想干点实事(比如查数据库、发邮件、调用第三方API)时,就无能为力了。

Function Calling(函数调用) 就是来解决这个问题的。

2.1 什么是Function Calling?

Function Calling允许开发者在调用大模型时,注册一系列函数(工具),模型在生成回复时如果判断需要调用外部工具,就会返回一个结构化的请求,由开发者执行真实的函数,再把结果返回给模型生成最终答案。

原理图如下:

image

2.2 Java实现Function Calling

我用LangChain4j来演示,因为它对Java开发者很友好。首先定义工具函数:

import dev.langchain4j.agent.tool.Tool;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class WeatherTool {
    
    @Tool("获取指定城市的实时天气")
    public String getWeather(String city) {
        // 这里应该是真实的API调用,为了演示我们模拟数据
        if ("北京".equals(city)) {
            return "北京当前天气:晴,温度25℃,湿度40%";
        } else if ("上海".equals(city)) {
            return "上海当前天气:小雨,温度22℃,湿度80%";
        } else {
            return "抱歉,暂不支持该城市天气查询";
        }
    }
    
    @Tool("获取当前时间")
    public String getCurrentTime() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}

然后创建AI服务并绑定工具:

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;

public class WeatherAssistant {
    
    interface Assistant {
        String chat(String userMessage);
    }
    
    public static void main(String[] args) {
        ChatLanguageModel model = OpenAiChatModel.builder()
            .apiKey(System.getenv("OPENAI_API_KEY"))
            .modelName("gpt-4")
            .build();
        
        Assistant assistant = AiServices.builder(Assistant.class)
            .chatLanguageModel(model)
            .tools(new WeatherTool()) // 注册工具
            .build();
        
        // 用户提问
        String response = assistant.chat("北京现在天气怎么样?");
        System.out.println(response);
        
        response = assistant.chat("现在几点了?");
        System.out.println(response);
    }
}

当用户问天气时,模型会判断需要调用getWeather函数,LangChain4j自动处理了函数调用的整个流程,最后把结果整合成自然语言返回。

2.3 Function Calling的核心价值

让AI从“静态知识”变成“动态能力”

没有Function Calling,AI只能回答训练数据里的内容;有了它,AI可以实时获取最新信息,甚至可以操作你的系统。

第三层:Agent——会思考、会规划的“智能体”

Function Calling让AI能调用工具,但它还是被动的一问一答。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐