大家好,我是大志。
在 AI Agent 中,Prompt(提示词)是驱动大语言模型完成任务的核心能力之一,也是面试中出现频率最高的知识点。从 System Prompt、Few-shot Prompt、结构化输出,到 JSON 输出、Prompt 优化、Token 控制、Agent 行为约束等,几乎都是面试官经常考察的内容,也是实际开发中必须掌握的基础能力。
本篇文章我结合自己的学习和项目经验,整理了一份 Prompt Engineering 相关的高频面试题。不仅会介绍每个知识点是什么,还会结合实际开发场景,分享生产环境中的最佳实践,希望能够帮助大家建立完整的 Prompt Engineering 知识体系。
另外,完整的 AI Agent 面试题文档也已经同步到了 aiflowline.cn,大家可以结合文章一起阅读。
1、System Prompt有什么作用?
System Prompt 是给 LLM 的系统级别的提示词,用来定义 LLM 在当前任务中的角色、目标、行为边界和输出要求。用户输入通常是:我要你做什么,而 System Prompt 是在提前规定 LLM 应该按什么规则做、如何做。
一个常见的 System Prompt 主要包括以下内容:
角色定位:比如客服助手、代码助手、数据分析助手 任务目标:主要解决什么问题 行为规则:可以做什么,不可以做什么 输出格式:使用中文还是英文,输出 Markdown还是JSON工具规则:什么时候调用工具,什么时候不需要调用工具
例如:
【角色定位】你是一个企业知识库问答助手。【任务目标】根据企业知识库内容,准确地回答用户提出的问题。【行为规则】回答时只能基于提供的资料,不要编造。如果资料中没有答案,就回答”暂时没有找到相关信息”,不要回答任何与企业知识无关的问题。【输出格式】回答以 Markdown 格式输出,回答要简洁,回答使用中文。【工具规则】关于企业内容的问题,调用 RAG 检索工具,并根据检索后的内容进行回答。通过这段 System Prompt,LLM 就会更倾向于基于知识库内容回答,否则,LLM 可能会直接根据自身知识去生成答案,甚至编造不存在的信息。
在 Agent 应用中,System Prompt 非常重要。因为 Agent 除了回答问题,还要调用工具、读写文件、访问接口、执行任务。如果系统提示词没有把规则描述清楚,Agent 就很难完成一些复杂任务。
在 LangChain v1.0 中,使用 create_agent 创建 Agent,通过 system_prompt 传入系统提示词:
from langchain.agents import create_agentagent = create_agent( model="gpt-5.5", tools=[search_tool], system_prompt="你是一个企业知识库问答助手。回答只能基于检索到的资料。",)2、如何限制Agent行为边界?
限制 Agent 行为边界,要结合 Prompt、工具权限和执行层校验来完成。
通过系统提示词限制
你只能回答和企业内部知识库相关的问题。如果用户要求你执行删除数据、发送邮件、修改权限等操作,必须先请求人工确认。不要输出未经验证的结论。限制使用工具
只给 Agent 绑定它需要的工具,对于一些高风险的工具需要加权限校验和人工校验。
defbefore_tool_call(tool_name, args, user):if tool_name in ["delete_user", "send_email", "transfer_money"]:return require_human_approval(tool_name, args, user)returnTrue记录详细操作日志
在生产环境中,要详细记录 Agent 做了什么、为什么这么做、调用了哪些工具、用户是否确认。
3、如何控制输出格式?
控制输出格式最简单、直接的方法是在 Prompt 中明确说明格式,并给出模板。
比如要求输出 Markdown:
请按以下格式回答:## 结论...## 原因...## 建议...如果要求输出列表,要写清楚数量和长度:
请只输出 3 条建议,每条不超过 30 个字。格式如下:1. ...2. ...3. ...如果要输出结构化数据,就直接把字段和字段含义写出来:
请输出 JSON,字段如下:- title:标题- summary:摘要- tags:字符串数组在编写提示词时,要注意以下几点:
少用模糊词
“整齐一点”“专业一点”这类描述太宽泛,直接写”使用 Markdown 表格输出”。
给出模板比只描述要求更有效
LLM 收到完整模板,更容易照着模板输出。
提示词不要自相矛盾
比如一边要求”只输出 JSON”,一边又要求”解释原因”,这样 LLM 就很容易输出除了 JSON 之外的自然语言。
程序侧一定要校验格式
LLM 不能保证生成内容格式 100% 正确。所以仍然要在代码里对输出进行校验。
4、如何保证输出JSON格式?
严格来说,不能只靠 Prompt 描述来输出标准的 JSON,可以通过以下几种方式来确保生成正确的 JSON 数据:
Prompt 中明确只输出 JSON
请只输出合法 JSON,不要输出 Markdown,不要输出解释文字。字段包括:name、age、tags。并给出示例
{"name": "张三","age": 18,"tags": ["学生", "篮球"]}使用结构化输出能力
在 LangChain v1.0 中,可以让 LLM 进行结构化输出
from langchain.agents import create_agentfrom pydantic import BaseModel, FieldclassUserInfo(BaseModel): name: str = Field(description="用户姓名") age: int = Field(description="用户年龄") tags: list[str] = Field(description="用户标签")agent = create_agent( model="gpt-5.5", tools=[], response_format=UserInfo,)result = agent.invoke({"messages": [{"role": "user", "content": "张三今年18岁,喜欢篮球"}]})user_info = result["structured_response"]print(user_info)执行结果:

程序校验格式
即使使用结构化输出,也要在程序中进行校验,比如年龄不能是负数,字段不能缺失,枚举值必须合法等等。
失败时重试或降级
如果对生成的 JSON 进行校验,结果 JSON 解析失败,可以把错误信息返回给 LLM,让它重新生成合法的 JSON。
5、什么是Few-shot Prompt?
Few-shot Prompt 指的是在提示词里给出多个示例,让 LLM 模仿示例的格式、风格来输出结果。Few-shot Prompt 适合用在输出规则不容易说清楚,但通过示例就一目了然的场景。
比如做用户意图识别:
请识别用户意图,只输出 intent。示例1:用户:我想查一下订单物流输出:query_logistics示例2:用户:我要退货输出:refund_order示例3:用户:怎么修改收货地址输出:change_address现在判断:用户:我的快递到哪了输出:LLM 看到前面给出的示例,就更容易输出 query_logistics。
Few-shot 有以下几个优点:
统一输出格式
示例比文字描述更直观,LLM 更容易模仿。
减少歧义
有些分类边界很难靠规则讲清楚,示例可以帮助 LLM 理解需求。
生成内容风格更稳定
在一些场景,如客服话术、代码注释风格,生成的内容风格更加统一。
6、Prompt过长会有什么问题?
Prompt 过长会带来几个问题:
成本变高
LLM 按 Token 计费,Prompt 越长,每次请求成本越高。
速度变慢
LLM 需要处理更多上下文,首字响应和整体响应都会变慢。
失去重点
Prompt 太长时,真正重要的规则可能被大量其他信息淹没。
容易引入噪声
把很多不相关的历史、文档、规则都放进去,会干扰 LLM 判断。
维护困难
不断在一个很长的 Prompt 追加规则,不知道是哪条规则起作用,而且修改一处还可能影响这段提示词在其他场景的效果。
可能超过上下文窗口
一旦超过 LLM 上下文限制,请求会失败,或者会被截断提示词内容。可能会导致关键内容丢失。
7、如何优化Prompt Token消耗?
优化 PromptToken 消耗,实际上就是减少无效上下文信息。常见方法有以下几种:
精简 Prompt
删除重复、空泛、无效的描述。比如“你是一个非常聪明、非常专业、非常友好的助手”这种话,对很多任务帮助不大。
使用模板变量
固定提示词只编写一遍,动态内容用模板变量填充,不要在代码里到处拼接重复文本。
只召回相关内容
做 RAG 或长期记忆时,不要把所有文档、所有历史记录都放进 Prompt。要先检索,再筛选,只放 TopK 相关内容。
使用摘要
长对话、长文档可以先压缩成摘要,再放入上下文。
结构化表达
有些信息用 JSON、列表、表格比自然语言更省 Token,也更清晰。
减少 Few-shot数量
示例要选最典型的,并且数量不要太多,很多时候 2-5 个高质量示例就足够了。
确定性的逻辑交给代码执行
比如排序、过滤、格式校验、权限判断,不需要让模型靠 Prompt 完成。并且代码执行结果也更稳定。
好啦,今天这期 提示词工程 相关的面试题就到这里。后面我会每周至少更新 1 期面试题系列,想看后续 AI Agent 进阶面试题 的朋友,欢迎关注「大志说编程」!
觉得有用的话,转发给正在面试的小伙伴,咱们下期见~
往期回顾