尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LLM工程化:提示工程、RAG、Agent与结构化输出实战

LLM工程化:提示工程、RAG、Agent与结构化输出实战 # LLM工程化提示工程、RAG、Agent与结构化输出实战## 1. 背景从“聊天”到“生产级组件”的鸿沟2024年以来GPT-4o、Claude 3.5 Sonnet等模型在对话、代码生成上表现出众但当开发人员试图将LLM集成到生产系统时很快发现**仅靠一条“Chat: ”指令远远不够**。典型痛点包括- **幻觉**模型回答脱离事实尤其在缺少检索上下文时。- **输出不可解析**返回自由文本下游无法用代码处理。- **无工具调用能力**模型无法查询数据库、执行API、发送邮件。- **行为不可复制**同样的输入在不同请求下结果不一致。根源在于生产级AI系统需要将LLM变成**可编程、可评估、可部署的软件组件**而不仅仅是聊天机器人。这催生了现代Prompt Engineering的四个核心支柱**系统提示System Prompt、RAG上下文注入、结构化输出Structured Outputs和Agent编排**。截至2026年6月主流框架LangChain v0.3.14、OpenAI SDK v1.56、Pydantic v2.9已将上述能力标准化。本文将以实际代码演示如何组合这些技术构建生产就绪的LLM应用。## 2. 技术架构四层协同的AI工程模型一个可靠的LLM应用通常包含以下层次| 层次 | 职责 | 关键组件 ||------|------|----------|| 系统提示层 | 定义模型角色、约束、行为红线 | 角色描述、禁止事项、输出规则 || 上下文层 | 注入外部知识减少幻觉 | RAG检索器、文档分块、重排序 || 结构与工具层 | 强制输出格式、暴露函数接口 | JSON Schema、Tool Definition || 编排层 | 多步推理、条件跳转、工具调用循环 | Agent循环、记忆、错误重试 |### 2.1 系统提示LLM的“宪法”系统提示是每次请求都附加的指令块。它定义了模型“是什么”、“做什么”、“不能做什么”。好的系统提示应包含- **角色与任务**例如“你是客户支持助手基于文档回答”。- **上下文注入位置**通常用{context}占位符由RAG填充。- **输出约束**如“如果信息不足回答‘我不知道’”。- **引用要求**强制输出时附带来源文档名称。### 2.2 RAG让模型“知道”而非“猜对”RAGRetrieval-Augmented Generation通过外部知识库注入事实。2026年主流做法是1. 文档分块chunk_size512 tokensoverlap20%2. 向量化text-embedding-3-large维度30723. 检索Top-K5使用Cohere重排序4. 注入到系统提示的{retrieved_context}位置### 2.3 结构化输出从“文本”到“数据”OpenAI从2025年11月开始提供structured_outputstrue参数直接返回符合JSON Schema的响应。这避免了传统“先用LLM生成文本再用正则解析”的脆弱方案。Claude 3.5同样支持tools模式定义输出结构。### 2.4 Agent编排多步推理与工具调用Agent将LLM作为“大脑”配合工具如数据库查询、计算器、邮件API执行复杂任务。典型的ReAct循环包括思考→行动→观察→思考……直到完成。## 3. 实践从简单提示到生产级Agent### 3.1 基础RAG系统提示模板以下代码展示了使用OpenAI Python SDK v1.56构建一个带有RAG上下文的客服助手。注意系统提示中使用{company_name}和{context}占位符并通过messages结构注入。pythonimport openai # v1.56.0from typing import Listdef build_rag_messages(company_name: str,retrieved_docs: List[str],user_question: str):# 组装检索到的文档context \n---\n.join([fSource: {doc[source]}\n{doc[content]}for doc in retrieved_docs])system_prompt fYou are a helpful support assistant for {company_name}.Answer questions using only the documentation provided below.If the documentation does not contain sufficient information to answer the question,respond: I dont have enough information from the available documentation to answer this question.Always cite the source document name at the end of your answer.[CONTEXT — Retrieved documentation]{context}return [{role: system, content: system_prompt},{role: user, content: user_question}]# 实际调用response openai.chat.completions.create(modelgpt-4o, # 或 gpt-4o-2026-05messagesbuild_rag_messages(company_nameAcme Corp,retrieved_docs[{...}],user_questionHow to reset password?),temperature0.0,max_tokens512)### 3.2 结构化输出从邮件中提取字段生产场景中常常需要从非结构化输入中提取结构化数据。以下代码利用Pydantic v2.9定义Schema并通过OpenAI的response_format参数强制输出JSON。pythonfrom pydantic import BaseModel, Field # v2.9.0import openaiclass EmailExtract(BaseModel):sender_name: str Field(descriptionName of the person sending the email)company: str Field(descriptionCompany name)team_size: int Field(descriptionNumber of team members)deadline: str Field(descriptionDeadline date (format: YYYY-MM-DD))budget: str Field(descriptionBudget amount and currency)contact_email: str Field(descriptionContact email address)# 使用结构化输出OpenAI v1.56def extract_email_info(email_text: str) - EmailExtract:response openai.beta.chat.completions.parse(modelgpt-4o,messages[{role: system, content: Extract fields from the email and return as structured JSON.},{role: user, content: email_text}],response_formatEmailExtract, # OpenAI自动转换为JSON Schematemperature0.0)return response.choices[0].message.parsed # 直接返回Pydantic对象# 测试email Hi, Im Sarah from Acme Corp. We need a data analytics platform for our team of 12 by September 2026. Budget: ₹8 lakhs. Please contact sarahacme.coresult extract_email_info(email)print(result.model_dump_json(indent2))# 输出: {sender_name:Sarah,company:Acme Corp,team_size:12,...}**关键数据**在LangSmith的基准测试中使用response_format的结构化输出比传统temperature0 正则解析模式字段提取准确率从76%提升至99.4%且解析耗时降低50%。### 3.3 Agent编排结合RAG与工具真实场景往往需要将以上技术组合。例如一个“销售线索生成Agent”收到邮件后先调用结构化提取再RAG查询公司背景然后调用CRM API创建记录。以下是使用LangChain v0.3.14的简化实现。pythonfrom langchain_openai import ChatOpenAI # v0.3.14from langchain.agents import create_tool_calling_agent, AgentExecutorfrom langchain.tools import toolfrom langchain.memory import ConversationBufferMemorytooldef search_company_info(company_name: str) - str:搜索公司信息模拟RAGreturn fContoso: AI startup, 50 employees, founded 2022tooldef create_crm_lead(name: str, company: str, email: str) - str:在CRM中创建销售线索# 实际调用CRM APIreturn fLead created: {name} from {company}llm ChatOpenAI(modelgpt-4o, temperature0.0)agent create_tool_calling_agent(llmllm,tools[search_company_info, create_crm_lead],system_message你是销售线索处理助手。首先从邮件中提取字段然后搜索公司信息最后创建CRM线索。按步骤执行。)agent_executor AgentExecutor(agentagent, tools[search_company_info, create_crm_lead], verboseTrue)# 运行agent_executor.invoke({input: email})# 可见到多步推理与工具调用## 4. 总结与展望从2024到2026年LLM应用开发已经从“写提示”进化到“编排系统”。核心三点- **结构化**用Schema代替自然语言输出使结果可编程。- **可评估**每个组件RAG召回、工具调用、输出格式均应有自动化评估。- **可部署**利用LangChain等框架将提示、RAG、Agent封装为模块便于CI/CD。未来趋势**多模型协同**如用小模型做路由、大模型做推理和**自修复Agent**Agent检错后自动重试将进一步降低幻觉风险。对于工程师掌握上述四层技术栈是构建可靠LLM产品的必修课。**参考**本文示例代码兼容OpenAI API 2025-11以后版本、LangChain v0.3.14、Pydantic v2.9。建议在LangSmith平台上进行生产级评估与监控。
返回列表