2026/4/1 3:35:49
网站建设
项目流程
怎么做存储网站,net源码的网站建设步骤,证件查询官网入口,举例说明网络营销的概念#x1f4d6;目录1. 引言#xff1a;当食谱比代码更可靠2. 为什么用提示词#xff1f;从食谱到代码的工程进化2.1 提示词 AI 交互的食谱2.2 为什么这不违背确定性原则#xff1f;3. 源码深度解析…目录1. 引言当食谱比代码更可靠2. 为什么用提示词从食谱到代码的工程进化2.1 提示词 AI 交互的食谱2.2 为什么这不违背确定性原则3. 源码深度解析提示词在框架中的角色3.1 工具描述DESCRIPTION的全面解析3.1.1 ReadFileTool.java - 文件读取工具3.1.2 WriteFileTool.java - 文件写入工具3.1.3 ListFilesTool.java - 文件列表工具3.2 系统提示DEFAULT_SYSTEM_PROMPT的全面解析3.2.1 TodoListInterceptor.java - 待办事项系统提示3.2.2 SubAgentInterceptor.java - 子代理系统提示3.3 工具模拟ToolEmulatorInterceptor的全面解析3.4 提示词在框架中的整体作用4. 提示词 vs 传统代码谁更适合5. 提示词管理的优化实践5.1 提示词外部化最佳实践5.2 提示词版本控制5.3 提示词测试6. 流程图提示词在 Spring AI Alibaba 中的生命周期7. 为什么这种设计值得深入理解8. 往期系列文章推荐9. 结语AI 时代的开发范式转变10. 推荐阅读11. 参考链接1. 引言当食谱比代码更可靠想象一下你是一位经验丰富的厨师正在教一位新学徒如何做一道复杂的菜。你会怎么做传统方式写一篇详细的代码文档告诉学徒每一步该做什么、如何处理各种边界情况实际方式给一份清晰的食谱包含关键步骤、注意事项和常见错误提示在 Spring AI Alibaba 框架中提示词就是那本食谱而不是硬编码的代码。这不是妥协而是对 AI 应用开发范式的深刻理解。2. 为什么用提示词从食谱到代码的工程进化2.1 提示词 AI 交互的食谱在 Spring AI Alibaba 中提示词不是随意添加的而是作为AI 交互的食谱。就像一份好的食谱会告诉厨师“将洋葱切碎放入热油中炒至透明然后加入大蒜和番茄继续翻炒2分钟最后加入盐和胡椒调味。”同样框架通过提示词告诉大模型“从文件系统中读取文件。您可以使用此工具直接访问任何文件。假设此工具能够读取机器上的所有文件。如果用户提供了一个文件路径请假定该路径是有效的。读取不存在的文件是可以的此时将返回一个错误。”对比传统代码如果用代码实现需要写一堆 if-else 判断参数、校验逻辑但这些逻辑本质上都是告诉大模型怎么用的规则。2.2 为什么这不违背确定性原则很多人担心提示词引入不确定性但 Spring AI Alibaba 通过以下方式确保可靠性机制说明作用结构化提示提示词包含明确的格式、参数要求和用例减少大模型输出的不确定性工具描述每个工具都有详细的DESCRIPTION确保大模型理解工具用途输入验证JsonProperty(required true)等注解确保参数符合预期输出解析ToolEmulatorInterceptor模拟工具调用处理大模型的非确定性输出正如我们使用提示词如promptTemplate 您正在模拟一个工具调用以进行测试。工具%s 描述%s 参数%s来引导大模型生成符合预期的响应。3. 源码深度解析提示词在框架中的角色3.1 工具描述DESCRIPTION的全面解析让我们深入分析框架中各个核心工具的提示词实现3.1.1ReadFileTool.java- 文件读取工具publicstaticfinalStringDESCRIPTION从文件系统中读取文件。您可以使用此工具直接访问任何文件。假设此工具能够读取机器上的所有文件。如果用户提供了一个文件路径请假定该路径是有效的。读取不存在的文件是可以的此时将返回一个错误。用法-file_path 参数必须是绝对路径而不是相对路径-默认情况下它从文件开头读取最多500行-**对于大文件和代码库探索非常重要**使用 offset 和 limit 参数进行分页以避免上下文溢出-第一次扫描read_file(path,limit100)以查看文件结构-读取更多部分read_file(path,offset100,limit200)读取接下来的200行-仅在必要时省略 limit读取整个文件进行编辑-指定 offset 和 limitread_file(path,offset0,limit100)读取前100行-任何超过2000个字符的行将被截断-结果将以 cat-n 格式返回行号从1开始-您可以在单个响应中调用多个工具。最好推测性地批量读取可能有用的多个文件。-如果您读取的文件存在但内容为空您将收到一个系统提醒警告而不是文件内容。-几乎总是应该在使用此工具之前使用 list_files 工具来验证文件路径。;提示词分析明确性详细说明了参数要求file_path 必须是绝对路径使用场景解释了在什么情况下使用大文件探索、代码库分析最佳实践提供了具体使用示例第一次扫描、读取更多部分边界条件说明了文件不存在、文件为空等特殊情况为什么用提示词如果用代码实现需要在apply方法中编写大量参数校验和逻辑但这些逻辑本质上是告诉大模型怎么用的规则而不是工具本身的功能。3.1.2WriteFileTool.java- 文件写入工具publicstaticfinalStringDESCRIPTION在文件系统中写入新文件。使用方法-file_path 参数必须是绝对路径不能是相对路径-content 参数必须是字符串-write_file 工具将创建一个新文件。-写入文件时内容将完全替换现有内容。;提示词分析简洁性用最简短的语言说明了核心功能关键约束强调了 file_path 必须是绝对路径行为定义明确了写入时会替换现有内容为什么用提示词这个提示词定义了工具的核心行为大模型在调用工具时会遵循这些规则而不需要在代码中实现这些规则。3.1.3ListFilesTool.java- 文件列表工具publicstaticfinalStringDESCRIPTION列出文件系统中的所有文件按目录筛选。使用方法-path参数必须是绝对路径不能是相对路径-list_files 工具将返回指定目录中的所有文件列表。-这对于探索文件系统和查找要读取或编辑的正确文件非常有用。-几乎在使用读取或编辑工具之前都应该使用此工具。;提示词分析使用场景明确指出了工具的使用时机在读取或编辑工具之前关键约束强调了 path 参数必须是绝对路径最佳实践建议了工具的使用顺序先列出文件再读取或编辑为什么用提示词这个提示词不是简单的描述而是指导大模型在何时、如何使用这个工具这比在代码中硬编码逻辑更灵活。3.2 系统提示DEFAULT_SYSTEM_PROMPT的全面解析3.2.1TodoListInterceptor.java- 待办事项系统提示privatestaticfinalStringDEFAULT_SYSTEM_PROMPT## write_todos你可以使用 write_todos 工具来帮助管理和规划复杂目标。对于复杂目标请使用此工具以确保跟踪每个必要步骤并让用户了解你的进度。此工具对于规划复杂目标以及将这些较大的复杂目标分解为更小的步骤非常有帮助。在完成一个步骤后立即将待办事项标记为已完成至关重要。不要在标记为已完成之前批量处理多个步骤。对于只需几个步骤的简单目标最好直接完成目标而**不**使用此工具。编写待办事项需要时间和token请在有助于管理复杂多步骤问题时使用它而不是用于简单的几步请求。## 重要待办清单使用注意事项-write_todos 工具不应并行调用多次。-不要害怕在过程中修订待办清单。新信息可能会揭示需要完成的新任务或者使旧任务变得无关紧要。;系统提示分析工具介绍清楚说明了工具的用途和价值使用场景明确指出了何时使用复杂目标和何时不使用简单目标最佳实践提供了具体的使用指导完成一个步骤后立即标记为完成错误预防指出了常见错误并行调用多次、不及时标记完成为什么用提示词系统提示是大模型的指导手册需要清晰描述使用场景和最佳实践这比硬编码在代码中更灵活。如果用代码实现需要在每个调用点编写重复的提示逻辑。3.2.2SubAgentInterceptor.java- 子代理系统提示privatestaticfinalStringDEFAULT_SYSTEM_PROMPT ## task(子代理生成器)您可以使用 task 工具来启动处理独立任务的短期子代理。这些代理是临时的——它们仅在任务期间存在并返回单个结果。 何时使用 task 工具-当任务复杂且多步骤并且可以完全独立地委托时-当任务与其他任务无关并且可以并行运行时-当任务需要集中推理或大量使用令牌/上下文这会膨胀协调线程时-当沙箱化提高可靠性时例如代码执行、结构化搜索、数据格式化-当您只关心子代理的输出而不关心中间步骤时例如进行大量研究然后返回综合报告进行一系列计算或查找以获得简洁的相关答案...;系统提示分析工具介绍清楚说明了子代理的生命周期和价值使用场景详细列出了何时使用 task 工具使用限制明确指出了何时不使用任务简单、需要中间步骤示例引导提供了具体使用场景的示例研究、代码分析等为什么用提示词子代理是复杂功能需要大模型理解何时、如何使用系统提示提供了这种指导比硬编码在代码中更有效。3.3 工具模拟ToolEmulatorInterceptor的全面解析privateStringpromptTemplate 您正在模拟一个工具调用以进行测试。 工具%s 描述%s 参数%s 根据这些参数生成该工具会返回的真实响应。 仅返回工具的输出不加解释或前言。 在您的响应中引入变化。;模拟提示词分析角色定义明确了大模型的角色模拟工具调用输入要求指定了需要哪些信息工具名称、描述、参数输出要求明确了输出格式仅返回工具输出不加解释质量要求要求引入变化以避免重复为什么用提示词模拟工具调用是测试的关键提示词确保大模型生成的模拟响应是符合预期的这比在代码中硬编码模拟逻辑更灵活。3.4 提示词在框架中的整体作用文件提示词类型作用为什么用提示词ReadFileTool.java工具描述告诉大模型如何使用文件读取工具无需在代码中硬编码参数校验WriteFileTool.java工具描述告诉大模型如何使用文件写入工具无需在代码中硬编码写入规则ListFilesTool.java工具描述告诉大模型如何使用文件列表工具无需在代码中硬编码路径校验TodoListInterceptor.java系统提示指导大模型如何使用待办事项工具提供最佳实践和使用场景指导SubAgentInterceptor.java系统提示指导大模型如何使用子代理工具提供复杂工具的使用指南ToolEmulatorInterceptor.java模拟提示指导大模型如何模拟工具调用确保模拟响应符合预期PythonTool.java工具描述告诉大模型如何使用Python代码执行工具无需在代码中硬编码执行规则GrepTool.java工具描述告诉大模型如何使用文件内容搜索工具无需在代码中硬编码搜索规则GlobTool.java工具描述告诉大模型如何使用文件模式匹配工具无需在代码中硬编码模式匹配规则关键洞察在 Spring AI Alibaba 中提示词不是简单的描述而是框架的核心交互协议。它定义了工具如何被使用、何时被使用、如何处理边界情况所有这些都通过提示词来实现而不是通过硬编码的逻辑。4. 提示词 vs 传统代码谁更适合维度提示词传统代码灵活性✅ 高可随时修改提示词❌ 低需重新编译可读性✅ 高自然语言描述❌ 低需要理解逻辑维护成本✅ 低只需修改提示词❌ 高需要修改代码不确定性✅ 通过工程化手段降低❌ 无确定性适用场景AI 交互、工具描述业务逻辑、核心计算关键结论在 AI 交互场景中提示词比传统代码更适合因为AI 交互本身是非确定性的我们需要通过提示词来约束大模型的行为提示词是自然语言更符合人类对工具的描述方式提示词可以独立于代码进行管理降低耦合度5. 提示词管理的优化实践Spring AI Alibaba 已经在框架层面合理使用了提示词但在实际应用中我们还可以进一步优化5.1 提示词外部化最佳实践将提示词从代码中提取到外部文件如 YAML、properties 或 JSON 文件# prompt-templates.yamlread_file:description:从文件系统中读取文件。您可以使用此工具直接访问任何文件。usage:- file_path 参数必须是绝对路径而不是相对路径note:第一次扫描read_file(path, limit100) 以查看文件结构然后在代码中加载这些提示词ResourceresourcenewClassPathResource(prompt-templates.yaml);YamlPropertiesFactoryBeanfactoryBeannewYamlPropertiesFactoryBean();factoryBean.setResources(resource);PropertiespropertiesfactoryBean.getObject();Stringdescriptionproperties.getProperty(read_file.description);优点提示词与代码解耦可独立修改无需重新编译。5.2 提示词版本控制为提示词添加版本号便于回溯和 A/B 测试read_file:version:1.2description:从文件系统中读取文件。...优点可以跟踪提示词的变更历史对比不同版本的效果。5.3 提示词测试为提示词编写测试用例验证其是否能引导大模型生成预期响应TestpublicvoidtestReadFileDescription(){Stringdescription从文件系统中读取文件。;StringpromptString.format(您正在模拟一个工具调用以进行测试。工具read_file 描述%s 参数{},description);StringresponsechatModel.call(newPrompt(newUserMessage(prompt)));assertTrue(response.contains(file_path));}优点确保提示词能有效引导大模型减少不确定性。6. 流程图提示词在 Spring AI Alibaba 中的生命周期提示词定义框架加载提示词大模型调用工具提示词引导大模型生成响应输出解析与后处理返回结构化结果流程说明提示词在框架中定义如DESCRIPTION框架加载提示词作为工具描述大模型调用工具时使用提示词作为输入提示词引导大模型生成符合预期的响应输出解析器将非确定性输出转化为结构化数据返回结构化结果给调用者7. 为什么这种设计值得深入理解在 AI 原生应用中提示词 代码而 Spring AI Alibaba 通过工程化手段让这种提示词即代码的模式变得可管理、可测试、可维护。这种设计不是妥协而是对 AI 开发范式的深刻理解“在传统软件中我们写代码来告诉计算机做什么在 AI 软件中我们写提示词来告诉大模型做什么。”8. 往期系列文章推荐如果你觉得这篇提示词设计哲学讲得透那说明你已经准备好深入 Spring AI Alibaba 的核心设计了本系列从基础到高级层层递进建议按顺序食用《Spring AI Alibaba从零开始构建智能对话系统》 https://blog.csdn.net/xiezhiyi007/article/details/155065315《Spring AI Alibaba 工具调用机制深度解析》 https://blog.csdn.net/xiezhiyi007/article/details/155203687《Spring AI Alibaba 的工具拦截器机制如何定制你的 AI 交互流程》 https://blog.csdn.net/xiezhiyi007/article/details/156113254《Spring AI Alibaba 中的子代理SubAgent让 AI 任务更高效》 https://blog.csdn.net/xiezhiyi007/article/details/156136405《Spring AI Alibaba 的大结果驱逐机制如何处理超大响应》 https://blog.csdn.net/xiezhiyi007/article/details/156432213《Spring AI Alibaba 的文件系统工具从读写到搜索的完整指南》 https://blog.csdn.net/xiezhiyi007/article/details/156488522阅读建议从基础到高级本系列帮助你全面掌握 Spring AI Alibaba 的设计哲学与工程实践。9. 结语AI 时代的开发范式转变在 AI 时代提示词是新的代码。Spring AI Alibaba 通过工程化手段让这种提示词即代码的模式变得可管理、可测试、可维护这不仅是框架设计的创新更是对 AI 开发范式的深刻理解。理解并掌握这种设计哲学是每个希望在 AI 时代构建可靠应用的开发者必须迈出的关键一步。10. 推荐阅读《Prompt Engineering for LLMs》- 作者J. B. K.一本深入浅出讲解提示工程的实用指南适合从入门到进阶的开发者。《Designing AI Systems》- 作者M. S. D.系统性地介绍了如何设计可靠的 AI 系统涵盖提示工程、模型选择、系统架构等关键方面。11. 参考链接Spring AI Alibaba 官方文档Spring AI 框架设计思想