AI项目博客
记录 AI 工程实践与大模型应用

Spring AI Alibaba 33|上下文工程 · 模型上下文(Model Context):响应格式(Response Format)

使用结构化输出控制模型响应格式。

// 在Agent级别设置输出格式
ReactAgent agent = ReactAgent.builder()
  .name("structured_agent")
  .model(chatModel)
  .outputType(MyResponseClass.class) // 或 .outputSchema(jsonSchema)
  .build();

// 也可以在Interceptor中动态调整
class DynamicFormatInterceptor extends ModelInterceptor {
  @Override
  public ModelResponse interceptModel(ModelRequest request, ModelCallHandler handler) {
      // 根据请求内容决定输出格式
      String outputSchema = determineOutputSchema(request);

      // 在消息中添加格式说明
      List<Message> updatedMessages = addFormatInstructions(
          request.getMessages(),
          outputSchema
      );

      ModelRequest enhancedRequest = ModelRequest.builder(request)
          .messages(updatedMessages)
          .build();

      return handler.call(enhancedRequest);
  }

  private String determineOutputSchema(ModelRequest request) {
      // 实现输出格式决定逻辑
      return "";
  }

  private List<Message> addFormatInstructions(List<Message> messages, String schema) {
      // 实现格式说明添加逻辑
      return messages;
  }

  @Override
  public String getName() {
      return "DynamicFormatInterceptor";
  }
}

控制工具可以访问和修改的内容。

工具中访问状态

class StatefulTool implements Function<StatefulTool.Request, StatefulTool.Response> {
  public record Request(String query) {}
  public record Response(String result) {}

  @Override
  public Response apply(Request request, ToolContext toolContext) {
      // 从 Agent 持久状态读取信息
      OverAllState currentState = (OverAllState) toolContext.getContext().get("state");
      // 'messages' can be any key persisted in short memory
      Optional<Object> messages = currentState.value("messages");

      // 从 Agent 运行上下文读取信息
      RunnableConfig config = (RunnableConfig) toolContext.getContext().get("config");
      Optional<Object> userContext = config.metadata("user_context_key");

      // 使用状态信息处理请求
      String result = processWithContext(request.query(), messages, userContext);

      return new Response(result);
  }

  private String processWithContext(String query, Optional<Object> messages, Optional<Object> userContext) {
      // 实现处理逻辑
      return "处理结果";
  }
}

工具修改状态

class StateModifyingTool implements Function<StateModifyingTool.Request, StateModifyingTool.Response> {
  public record Request(String data) {}
  public record Response(String status) {}

  @Override
  public Response apply(Request request, ToolContext toolContext) {
      // 从 Agent 持久状态读取信息
      Map<String, Object> extraState = (Map<String, Object>) toolContext.getContext().get("extraState");

      // 处理数据
      String processed = process(request.data());

      // extraState 是一个特殊设计,更新到 extraState 中的值会被持久化到 State 状态中,并被后续的 Loop 节点看到。
      extraState.put("processed_data", processed);

      return new Response("数据已处理并保存到状态");
  }

  private String process(String data) {
      // 实现处理逻辑
      return "处理后的数据";
  }
}

本文整理自 Spring AI Alibaba 官方文档《上下文工程》:https://java2ai.com/docs/frameworks/agent-framework/advanced/context-engineering

赞(0)
未经允许不得转载:AI项目博客 » Spring AI Alibaba 33|上下文工程 · 模型上下文(Model Context):响应格式(Response Format)

评论 抢沙发

AI项目博客

专注 AI 工程化落地 —— 覆盖智能体、大模型、Java AI 与 Python 的学习笔记,以及 AI 平台的项目实战记录。

关于本站文章归档

登录

找回密码

注册