Prompt / Context / Harness / Loop:四大 AI 工程范式详解

发布时间:2026/7/9 11:44:45

Prompt / Context / Harness / Loop:四大 AI 工程范式详解 一、为什么是这四个概念当我们从调 API 玩一玩走向做一个真正能用的 AI 产品会发现核心问题无非是四个概念本质回答的核心问题Prompt指令设计“怎么让模型听我的话”Context信息窗口管理“模型该知道什么、不该知道什么”Harness工程基础设施“怎么把这些零件组装成可靠的系统”Loop反馈与迭代闭环“模型怎么持续变好”这四个概念层层递进覆盖了从一次调用到持续运营的完整生命周期。下面逐一展开。下面这张图展示了这四个概念如何层层递进构成 AI 工程的完整生命周期持续优化Prompt指令设计Context信息窗口管理Harness工程基础设施Loop反馈与迭代闭环二、Prompt让模型听你的话2.1 什么是 PromptPrompt提示词是我们与大模型交互的唯一接口。好的 Prompt 决定模型输出的上限差的 Prompt 再强的模型也救不回来。# ❌ 模糊的 Prompt——模型输出不可控responsellm(翻译这段话)# ✅ 结构化的 Prompt——输出稳定可预期responsellm( 你是一个专业的技术文档翻译专家。请将以下英文技术文档翻译成中文。 要求 1. 保留所有技术术语必要时在括号中附上英文原文 2. 代码块保持原样不翻译 3. 语气正式适合技术博客发表 原文 {text} )2.2 Prompt 工程的常用技巧1. 角色设定Role Prompting你是一个 [角色]请 [任务]。SYSTEM_PROMPT你是一位拥有10年经验的高级后端工程师擅长 Python、Go 和系统架构设计。 你的风格 - 回答简洁直接给出最优解 - 代码遵循 PEP8 规范 - 优先考虑生产级方案而非玩具代码 2. 示例学习Few-Shot Learningmessages[{role:system,content:把用户输入的情感评论转为情感标签positive/negative/neutral},{role:user,content:这家餐厅的服务太差了菜品又贵又难吃。},{role:assistant,content:negative},# 示例 1{role:user,content:性价比还不错会再来。},{role:assistant,content:positive},# 示例 2{role:user,content:等了半小时还没上菜。},{role:assistant,content:negative},# 示例 3待预测]3. 思维链Chain-of-Thought, CoT让模型想清楚再回答对于复杂推理任务尤其有效# ❌ 直接问模型容易出错# Q: 小明有 5 个苹果小红给了他 3 个小明吃掉了 2 个还剩几个# ✅ 引导模型逐步推理responsellm( 问题小明有 5 个苹果小红给了他 3 个小明吃掉了 2 个还剩几个 请一步步推理给出计算过程和最终答案。 )4. 结构化输出Structured Output# 使用 JSON Mode 确保输出格式稳定responsellm(prompt提取文本中的人名、地名、日期,response_format{type:json_object,schema:{names:{type:array,items:{type:string}},locations:{type:array,items:{type:string}},dates:{type:array,items:{type:string}}}})2.3 Prompt 的常见反模式反模式表现后果过度工程化用几百行 Prompt 管理所有边界情况难以维护模型困惑指令冲突同时说要详细又说要简洁模型两难输出不稳定缺少边界不告诉模型什么情况该拒绝模型幻觉产生有害内容硬编码过多把答案直接写在 Prompt 里失去模型的泛化能力三、Context管理模型的知识窗口3.1 为什么 Context 这么重要大模型的聪明程度受限于 Context Window上下文窗口的大小。以 GPT-4o 为例上下文窗口约 128K tokens约合 10 万汉字。但实际问题不是窗口太小而是有效信息密度太低。核心矛盾Context 是最贵的资源。你的任务是把真正相关的信息塞进去把噪声踢出去。┌─────────────────────────────────────────────────────────┐ │ Context Window │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ System │ │ History │ │ RAG │ │ User │ │ │ │ Prompt │ │ 对话 │ │ 检索内容 │ │ 输入 │ │ │ │ 2K tokens│ │ 4K tokens│ │ 8K tokens│ │ 2K tokens│ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ 剩余空间可扩展: ~112K tokens │ └─────────────────────────────────────────────────────────┘3.2 RAG让模型查资料RAGRetrieval-Augmented Generation检索增强生成是最主流的 Context 管理范式。核心思想不要让模型凭记忆回答实时/私有信息而是先把相关资料检索出来放进 Context。# RAG 流程示意classRAGPipeline:def__init__(self,vector_db,llm):self.vector_dbvector_db# 如 ChromaDB、Milvus、FAISSself.llmllmdefquery(self,user_question:str,top_k:int5)-str:# Step 1: 把问题向量化query_embeddingself.embed(user_question)# Step 2: 从向量数据库检索相关文档docsself.vector_db.search(query_embedding,top_ktop_k)# Step 3: 构建 Contextcontext\n\n.join([doc.contentfordocindocs])# Step 4: 让模型基于 Context 回答promptf基于以下资料回答用户问题。 如果资料中没有相关信息请如实说明不要编造。 资料{context}问题{user_question}returnself.llm(prompt)RAG 的三大优化方向① 索引层优化Retrieval# 混合检索向量检索 关键词检索hybrid_results(vector_search(query_embedding,top_k10)# 语义相似.intersection(bm25_search(keywords,top_k10)# 关键词精确))② Chunk 层优化Chunking Strategy# 固定窗口 chunking通常效果最稳 chunk_size 500 tokens chunk_overlap 50 tokens # 保留边界上下文 # 语义 chunking按段落/句子切分更精确 chunks semantic_split(document, max_tokens500)③ 生成层优化Generation# Query 改写让检索更精准rewritten_queryllm(f 用户问了{user_question} 请把这个问句改写成一个更适合检索的表述 保留核心信息去掉口语化表达。 )3.3 Context 的工程陷阱❌ 陷阱1把所有文档都塞进去 → 模型被噪声淹没输出质量下降 ❌ 陷阱2检索结果与问题无关但硬塞 → 模型被误导产生错误回答 ❌ 陷阱3忘记 Context 长度限制 → 超长文档被截断丢失关键信息 ✅ 正确姿势检索 → 精排 → 截断 → 生成四、HarnessAI 工程的脚手架4.1 什么是 HarnessHarness套件/脚手架指的是把 Prompt、Context、工具调用等能力组织起来的工程框架。它的核心价值是让你从一次调 API走向构建可维护的系统。4.2 主流 Harness 框架对比框架定位优点缺点适合场景LangChain全功能链式框架功能最全生态丰富抽象复杂调试困难快速原型LangGraphDAG 有向图编排流程可视化支持分支/循环学习曲线陡复杂 Agent 流程LlamaIndex数据索引为中心RAG 体验最佳通用编排偏弱RAG 优先项目Dify零代码/低代码平台上手快可视化定制化受限快速上线 MVPCrewAI多 Agent 协作角色分工清晰成熟度一般多角色协作场景4.3 用 LangGraph 构建一个可控的 AI 助手以文章审核 Agent为例展示 Harness 的实际用法fromlanggraph.graphimportStateGraph,ENDfromtypingimportTypedDict,Annotatedimportoperator# 定义状态classReviewState(TypedDict):article_content:strreview_result:strneeds_human_review:boolfinal_decision:str# 节点函数definitial_review(state:ReviewState)-dict:LLM 做初步审核promptf审核以下文章判断是否有违规内容\n{state[article_content]}resultllm(prompt)is_safe违规notinresultreturn{review_result:result,needs_human_review:notis_safe}defauto_approve(state:ReviewState)-dict:return{final_decision:✅ 通过发布}defescalate(state:ReviewState)-dict:return{final_decision:⛔ 转人工审核}# 构建图workflowStateGraph(ReviewState)workflow.add_node(initial_review,initial_review)workflow.add_node(auto_approve,auto_approve)workflow.add_node(escalate,escalate)workflow.set_entry_point(initial_review)# 条件分支根据 needs_human_review 决定走向workflow.add_conditional_edges(initial_review,lambdas:escalateifs[needs_human_review]elseauto_approve,{escalate:escalate,auto_approve:auto_approve})workflow.add_edge(auto_approve,END)workflow.add_edge(escalate,END)appworkflow.compile()对应的流程图如下┌──────────────────┐ │ article_content │ (输入文章) └────────┬─────────┘ ▼ ┌──────────────────┐ │ initial_review │ LLM 初步审核 │ needs_human_ │ │ review ? │ └────────┬─────────┘ │ ┌────┴────┐ │ │ needs needs humanyes humanno │ │ ▼ ▼ ┌────────┐ ┌─────────┐ │escalate│ │auto_ │ │ │ │approve │ └───┬────┘ └────┬───┘ │ │ ▼ ▼ ┌────────┐ ┌────────┐ │⛔ 人工 │ │✅ 发布│ │ 审核 │ │ │ └───┬────┘ └───┬────┘ │ │ └─────┬─────┘ ▼ [END]4.4 Tool Calling让模型调用外部工具Tool Calling 是 Harness 的核心能力之一让大模型主动调用外部系统fromlangchain.toolsimporttooltooldefsearch_database(query:str)-str:在知识库中搜索相关文档returnvector_db.similarity_search(query,k3)tooldefsend_email(to:str,content:str)-str:发送邮件通知returnemail_client.send(toto,bodycontent)# 模型自动决定调用哪个工具llm_with_toolsllm.bind_tools([search_database,send_email])五、Loop构建持续进化的 AI 系统5.1 为什么需要 Loop一次调用的 AI 是问答机器有反馈循环的 AI 才称得上智能系统。Loop 的核心是让 AI 的输出影响输入形成自我改进的闭环。5.2 四种典型的 Loop 模式模式 1ReActReasoning Acting模型在推理过程中主动调用工具形成思考→行动→观察→再思考的循环用户查一下北京今天的天气 模型思考我需要先调用天气查询工具 ↓ 行动调用 weather_api(query北京今天天气) ↓ 观察返回 {temperature: 28°C, weather: 晴} ↓ 模型思考天气数据已获取现在组织回复 ↓ 最终回答北京今天晴气温28°CclassReActAgent:defrun(self,task:str,max_iterations:int5):history[]observationNoneforiinrange(max_iterations):# Reasoning: 让模型决定下一步reasoning_promptself._build_reasoning_prompt(task,history,observation)thoughtllm(reasoning_prompt)# 如果模型决定结束ifFINAL_ANSWERinthought:returnself._extract_final_answer(thought)# Acting: 执行工具tool_name,tool_argsself._parse_action(thought)observationself._execute_tool(tool_name,tool_args)history.append({thought:thought,observation:observation})模式 2Self-Correction自我纠正让模型检查自己的输出不断修正直到满意┌────────────┐ │ 初始输出 │ └─────┬──────┘ ▼ ┌────────────┐ 是 ┌────────────┐ │ 质量检查 │ ──────→ │ 修正输出 │ │ (LLM评估) │ └─────┬──────┘ └─────┬──────┘ │ │ 否 │ ▼ │ ┌────────────┐ │ │ 达到最大 │ │ │ 迭代次数 │ │ └──┬───────┘ │ │是 │ ▼ │ ┌────────────┐ │ │ 返回结果 │ ◀────────────┘ └────────────┘ (修正后重新检查)defself_correct(query:str,max_tries:int3)-str:outputllm(query)forattemptinrange(max_tries):feedbackllm(f 请评估以下回答的质量 问题{query}回答{output}请指出 1. 是否有事实错误 2. 是否完整回答了问题 3. 是否需要补充简洁回答OK或指出具体问题 )iffeedback.strip().upper()OK:returnoutput# 用反馈修正输出outputllm(f 原始问题{query}原始回答{output}反馈{feedback}请根据反馈修正回答。 )returnoutput# 达到最大次数返回当前最优结果模式 3Human-in-the-Loop人在回路将人类判断嵌入 AI 工作流关键节点由人做决策classHumanInLoopWorkflow:def__init__(self,human_approval_queue):self.queuehuman_approval_queueasyncdefprocess(self,user_request:str):# AI 生成初稿draftawaitself.llm.generate(user_request)# 判断是否需要人工审核risk_levelself.assess_risk(draft)ifrisk_levelhigh:# 高风险暂停等人工确认approvedawaitself.queue.submit(draft)ifnotapproved:return已根据反馈修改请重新提交return✅ 人工审核通过已执行elifrisk_levelmedium:# 中风险AI 自我修正后再确认draftawaitself.self_correct(draft)approvedawaitself.queue.submit(draft)return✅ 已修正并通过审核ifapprovedelse请参考反馈重新提交else:# 低风险直接执行returnawaitself.execute(draft)模式 4Evaluator-Optimizer评估器-优化器分离评判和生成两个模型形成互相促进的循环┌─────────────┐ 评分建议 ┌─────────────┐ │ Evaluator │ ─────────────→ │ Optimizer │ │ (评估模型) │ │ (生成模型) │ └──────┬──────┘ └──────┬──────┘ │ │ │ 生成文本 │ └────────────────────────────────┘ ↑ 评分建议# 示例优化文案质量defoptimize_copy(product_desc:str,n_iterations:int5):currentproduct_descforiinrange(n_iterations):# Evaluator 评分并给出改进建议evaluationllm(f 你是专业文案评估师。请评估以下产品文案{current}评估维度每项1-10分 1. 吸引力是否能引起读者兴趣 2. 清晰度产品价值是否表达清楚 3. 转化力是否有明确的行动引导 同时给出具体的改进建议中文3条以内。 )# Optimizer 依据评估结果改进currentllm(f 原始文案{current}评估结果{evaluation}请根据评估反馈改进文案。 )print(f迭代{i1}完成)returncurrent5.3 Loop 的工程要点要点说明终止条件必须有明确的停止条件最大迭代次数/质量分数阈值防止无限循环代价控制每次循环都消耗 token需要评估 ROI避免为微小提升付出过多成本可观测性记录每次循环的输入/输出/决策方便排查 Bad Case容错设计单次失败不应中断整个 Loop需要降级策略六、综合实践四个概念如何协同工作让我们用一个实际场景把四个概念串起来做一个客服 AI 系统。┌─────────────────────────────────────────────────────────┐ │ 用户输入 │ │ 我的订单什么时候发货 │ └───────────────────────┬─────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ PROMPT: 角色设定 Few-Shot 示例 │ │ 你是一个电商客服请基于订单系统数据回答用户问题 │ └───────────────────────┬─────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ CONTEXT: RAG 检索订单数据 用户历史对话 │ │ → 检索用户最近的 3 条订单记录 │ │ → 检索发货政策 FAQ │ │ → 构建结构化 Context │ └───────────────────────┬─────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ HARNESS: LangGraph 工作流 │ │ order_status → policy_lookup → generate_response │ │ │ │ │ └─→ [Human-in-the-Loop] 高风险问题时暂停等人工 │ └───────────────────────┬─────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ LOOP: Self-Correction │ │ 输出 → 质量检查 → 不合格则重新生成最多3次 │ └───────────────────────┬─────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ 最终回复 │ │ 您的订单#20240615001预计明天送达快递单号... │ └─────────────────────────────────────────────────────────┘七、总结概念核心问题工程重点Prompt怎么问模型才答得好结构化、Few-Shot、CoT、结构化输出Context模型该知道什么RAG、Chunking、精排、长度管理Harness零件怎么组装成系统框架选型LangChain/LangGraph、工具调用Loop系统怎么持续变好ReAct、自纠正、Human-in-Loop、评估优化一句话总结Prompt 是你和模型的对话方式Context 是模型思考的知识基础Harness 是把各种能力组装成可靠系统的工程框架而 Loop 则让整个系统能够自我改进、持续进化。四者缺一不可共同构成现代 AI 工程的核心能力。

相关新闻