安徽省建设厅人员名单官方网站品牌建设的原理

张小明 2026/1/15 15:15:12
安徽省建设厅人员名单官方网站,品牌建设的原理,网站ping怎么做,房产加盟I 智能体指的是一种软件实体#xff0c;它能够利用自然语言处理、机器学习或推理系统等人工智能技术#xff0c;自主感知、推理和行动#xff0c;以实现特定目标。我为 Telex 开发了一个 AI 智能体#xff0c;该智能体接收一个正则表达式模式#xff0c;并就该模式所匹配的…I 智能体指的是一种软件实体它能够利用自然语言处理、机器学习或推理系统等人工智能技术自主感知、推理和行动以实现特定目标。我为 Telex 开发了一个 AI 智能体该智能体接收一个正则表达式模式并就该模式所匹配的字符串类型提供易于理解的解释。开发此智能体的灵感源于我在此之前开发的一个 API您可以在此处查看该项目在该 API 中我必须使用正则表达式进行一些自然语言处理。尽管我之前学习过正则表达式但感觉像是第一次见到它。正则表达式就是这样。因此当 Telex 为其平台寻求更多 AI 智能体时我决定开发这个智能体。以下是我使用 Java、Spring AI 和 Spring Boot 实现它的过程。初始设置1. Spring Boot 项目初始化我使用 Spring 提供的初始化工具来初始化项目。请注意我在依赖项中包含了 Spring Web 和 Open AI。初始化 Spring 项目2. 设置 API 凭证在我的 application.properties 文件中我设置了 Spring AI 以使用我的 API 凭证我的 API 密钥。我通过 Google AI Studio 获得了一个免费的 Google Gemini API 密钥。我的 application.properties 文件设置如下spring.config.importclasspath:AI.propertiesspring.application.nameregexplainspring.ai.openai.api-key ${GEMINI_API_KEY}spring.ai.openai.base-url https://generativelanguage.googleapis.com/v1beta/openaispring.ai.openai.chat.completions-path /chat/completionsspring.ai.openai.chat.options.model gemini-2.5-pro第一行导入了包含我 API 密钥的文件。重要的是不要将您的 API 密钥暴露给公众。该文件与 application.properties 位于同一文件夹中。3. 首次项目运行使用我的包管理器Maven我安装了所需的依赖项。然后我运行了我的主类以确保一切正常。如果您到目前为止一切都做对了您的项目应该可以无错误运行。如果遇到任何错误请在 Google 上查找解决方法。A2A 请求和响应模型在深入实现之前让我们先谈谈符合 A2A 标准的请求和响应的结构。A2A 协议遵循标准的 JSON-RPC 2.0 结构来处理请求和响应。所有方法调用都封装在一个请求对象中其结构如下{jsonrpc: 2.0,method: String,id: String | Integer,params: Message}响应对象有些类似{jsonrpc: 2.0,id: String | Integer | null,result?: Task | Message | null,error?: JSONRPCError}响应中的 ID 必须与请求中的 ID 相同。有关 A2A 协议的更多信息请查阅 A2A 协议文档。以上就是请求和响应的通用结构。我开发这个智能体是为了在 Telex 平台上使用因此我的部分实现可能特定于 Telex。现在进入实现部分。我创建了一个名为 model 的文件夹用于存储我的模型。请求模型类 A2ARequest 如下所示public class A2ARequest {private String id;private RequestParamsProperty params;public A2ARequest(String id, RequestParamsProperty params) {this.id id;this.params params;}// getters and setters}RequestParamsProperty 类代表了 params 中包含信息的结构。它如下所示public class RequestParamsProperty {private HistoryMessage message;private String messageId;public RequestParamsProperty(HistoryMessage message, String messageId) {this.message message;this.messageId messageId;}// getters and setter}HistoryMessage 类如下所示JsonIgnoreProperties(ignoreUnknown true)JsonInclude(JsonInclude.Include.NON_NULL)public class HistoryMessage {private String kind;private String role;private ListMessagePart parts;private String messageId;private String taskId;public HistoryMessage() {}public HistoryMessage(String role, ListMessagePart parts, String messageId, String taskId) {this.kind message;this.role role;this.parts parts;this.messageId messageId;this.taskId taskId;}// getters and setters}注解的作用是让 Spring 知道在请求和响应的 JSON 表示中包含什么。如果请求中不存在某个属性它应该忽略它并在类中将其设置为 null。如果某个属性设置为 null则不应将其包含在响应中。MessagePart 类如下所示JsonIgnoreProperties(ignoreUnknown true)JsonInclude(JsonInclude.Include.NON_NULL)public class MessagePart {private String kind;private String text;private ListMessagePart data;public MessagePart(String kind, String text, ListMessagePart data) {this.kind kind;this.text text;this.data data;}// getters and setters}以上就是表示从 Telex 接收的请求结构所需的所有类。现在需要为我的响应创建一个模型以及表示响应所需的所有支持类。A2AResponse 类JsonInclude(JsonInclude.Include.NON_NULL)public class A2AResponse {private final String jsonrpc;JsonInclude(JsonInclude.Include.ALWAYS)private String id;private Result result;private CustomError error;public A2AResponse() {this.jsonrpc 2.0;}public A2AResponse(String id, Result result, CustomError error) {this.jsonrpc 2.0;this.id id;this.result result;this.error error;}//getters and setters}Result 类public class Result {private String id;private String contextId;private TaskStatus status;private ListArtifact artifacts;private ListHistoryMessage history;private String kind;public Result() {}public Result(String id, String contextId, TaskStatus status, ListArtifact artifacts, ListHistoryMessage history, String task) {this.id id;this.contextId contextId;this.status status;this.artifacts artifacts;this.history history;this.kind task;}// getters and setters}CustomError 类public class CustomError {private int code;private String message;private MapString, String data;public CustomError(int code, String message, MapString, String data) {this.code code;this.message message;this.data data;}// getters and setters}TaskStatus 类JsonInclude(JsonInclude.Include.NON_NULL)public class TaskStatus {private String state;private Instant timestamp;private HistoryMessage message;public TaskStatus() {}public TaskStatus(String state, Instant timestamp, HistoryMessage message) {this.state state;this.timestamp timestamp;this.message message;}// getters and setters}Artifact 类public class Artifact {private String artifactId;private String name;private ListMessagePart parts; // 稍后复查此类型public Artifact() {}public Artifact(String artifactId, String name, ListMessagePart parts) {this.artifactId artifactId;this.name name;this.parts parts;}// getters and setters}A2A 协议还包含一个称为智能体卡片的东西。我也为它创建了一个模型。public class AgentCard {private String name;private String description;private String url;private MapString, String provider;private String version;private MapString, Boolean capabilities;private ListString defaultInputModes;private ListString defaultOutputModes;private ListMapString, Object skills;public AgentCard() {this.provider new HashMap();this.capabilities new HashMap();this.skills new ArrayList();}// getters and setters}模型部分就这些了。继续...服务类我的智能体的作用是获取一个正则表达式字符串然后使用预定义的提示词将其发送到 OpenAI 的 API。服务类负责与 OpenAI 通信发送提示词并接收响应。我创建了另一个名为 service 的文件夹我的服务类就放在这里。我是这样编写我的服务类的Servicepublic class RegExPlainService {private ChatClient chatClient;RegExPlainService(ChatClient.Builder chatClientBuilder) {this.chatClient chatClientBuilder.build();}Tool(name regexplain, description An agent that explains what type of string a regex pattern matches)public String generateResponse(String regex) {return chatClient.prompt(Give me a simple explanation of the type of string matched by this regex pattern: %s. No validating statements from you. Just straight to the point.formatted(regex)).call().content();}}Service 注解允许 Spring Boot 将服务注入到您的控制器中。Tool 注解将该方法标记为一个智能体工具如果将来要扩展该智能体以包含该功能它可以被自主调用。不过目前并不需要它。控制器控制器通过 REST API 暴露该智能体。在这个案例中我有两个端点一个 GET 端点和一个 POST 端点。我在一个名为 controller 的文件夹中创建了我的控制器。实现如下RestControllerpublic class RegExPlainController {private final RegExPlainService regexplainService;AutowiredRegExPlainController (RegExPlainService regexplainService) {this.regexplainService regexplainService;}GetMapping(/a2a/agent/regexplain/.well-known/agent.json)public ResponseEntityAgentCard getAgentCard () {AgentCard agentCard new AgentCard();agentCard.setName(regexplain);agentCard.setDescription(An agent that provides a simple explanation of the type of string a regex pattern matches);agentCard.setUrl(regexplain-production.up.railway.app/api);agentCard.setProvider(Bituan, null); // 假设 setProvider 处理 Map 的填充agentCard.setVersion(1.0);agentCard.setCapabilities(false, false, false); // 假设 setCapabilities 处理 Map 的填充agentCard.setDefaultInputModes(List.of(text/plain));agentCard.setDefaultOutputModes(List.of(application/json, text/plain));agentCard.setSkill(skill-001, Explain Regex, Provides a simple explanation of the type of string a regex pattern matches,List.of(text/plain), List.of(text/plain), List.of());return ResponseEntity.ok(agentCard);}PostMapping(/a2a/agent/regexplain)public ResponseEntityA2AResponse explainRegex (RequestBody A2ARequest request) {String regexRequest;String responseText;// 如果参数无效返回 403try {regexRequest request.getParams().getMessage().getParts().get(0).getText();} catch (Exception e) {CustomError error new CustomError(-32603, Invalid Parameter, Map.of(details, e.getMessage()));A2AResponse errorResponse new A2AResponse(null, null, error);return ResponseEntity.status(HttpStatusCode.valueOf(403)).body(errorResponse);}// 如果调用服务失败返回错误 500try {responseText regexplainService.generateResponse(regexRequest);} catch (Exception e) {CustomError error new CustomError(-32603, Internal Error, Map.of(details, e.getMessage()));A2AResponse errorResponse new A2AResponse(null, null, error);return ResponseEntity.internalServerError().body(errorResponse);}// 构建响应A2AResponse response new A2AResponse();response.setId(request.getId());// 构建响应 - 构建结果Result result new Result();result.setId(UUID.randomUUID().toString());result.setContextId(UUID.randomUUID().toString());result.setKind(task);// 构建响应 - 构建结果 - 构建状态TaskStatus status new TaskStatus();status.setState(completed);status.setTimestamp(Instant.now());// 构建响应 - 构建结果 - 构建状态 - 构建消息HistoryMessage message new HistoryMessage();message.setRole(agent);message.setParts(List.of(new MessagePart(text, responseText, null)));message.setKind(message);message.setMessageId(UUID.randomUUID().toString());// 构建响应 - 构建结果 - 构建状态 (续)status.setMessage(message);// 构建响应 - 构建结果 - 构建工件ListArtifact artifacts new ArrayList();Artifact artifact new Artifact();artifact.setArtifactId(UUID.randomUUID().toString());artifact.setName(regexplainerResponse);artifact.setParts(List.of(new MessagePart(text, responseText, null)));artifacts.add(artifact);// 构建响应 - 构建结果 - 构建历史记录ListHistoryMessage history new ArrayList();// 构建响应 - 构建结果 (续)result.setStatus(status);result.setArtifacts(artifacts);result.setHistory(history);// 构建响应 (续)response.setResult(result);return ResponseEntity.ok(response);}}GET 端点使用的路由路径是 A2A 协议标准中用于获取智能体卡片的部分。智能体卡片是对智能体及其功能的描述。POST 端点接收一个符合 A2A 标准的请求执行智能体然后返回适当的响应。结论就是这样。这就是我编写 Regexplain 的过程。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站运营怎么样网站如何加后台

PyWebIO框架为企业级Web应用开发提供了革命性的Python全栈解决方案,让开发者无需前端技术背景即可快速构建生产就绪的Web系统。本文将从技术演进、架构设计和性能优化三个维度,深入探讨PyWebIO在企业环境中的实际应用价值。 【免费下载链接】PyWebIO Wri…

张小明 2026/1/12 0:24:06 网站建设

做视频网站带宽要求东营二手房出售信息网

文末联系小编:获取源码地址本文介绍搞嵌入式、上位机开发的,谁没被调试折磨过?数据实时显示、波形画不明白、参数调起来费劲、命令触发还得靠板子上的实体按键……想当年刚入行,只能用原始串口助手,靠发字符串看数据&a…

张小明 2026/1/10 18:40:08 网站建设

高级网站开发工程师怎么注册自己公司的网址

做过微信运营、客户管理的人都懂,“多号并行”的痛点,手里管理多个微信账号,既要运营客户、维护关系,又要定时发朋友圈,还要频繁切换账号,多个账号窗口堆在桌面,点错、漏发更是常事。而我们一直…

张小明 2026/1/12 14:29:17 网站建设

网站上地图怎么做的无锡企业推广

解放生产力:Clipmenu剪贴板管理工具深度体验 【免费下载链接】clipmenu Clipboard management using dmenu 项目地址: https://gitcode.com/gh_mirrors/cl/clipmenu 在数字工作环境中,剪贴板管理工具正成为提升工作效率的秘密武器。今天&#xff…

张小明 2026/1/12 11:55:25 网站建设

创意做美食视频网站设计公司logo制作

Part1 前言 大家好,我是ABC_123。本篇文章继续讲解美国苹果手机"三角测量"攻击行动,该后门代码的兼容性暗示其使用了长达10年之久,今天我们重点讲解该行动在验证器后门阶段和三角测量后门TriangleDB阶段展现出的隐蔽手法&#xff0…

张小明 2026/1/13 6:11:05 网站建设