尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

大模型应用开发实战:从认知模型到可落地的工程架构

大模型应用开发实战:从认知模型到可落地的工程架构 这里写自定义目录标题欢迎使用Markdown编辑器一、先厘清一个本质问题大模型应用到底在开发什么二、模型接入永远不要写死鸡蛋放在一个篮子里四、从单次问答到闭环应用评估与观测五、一个完整的落地范式对话→检索→工具→行动六、写在最后地基决定高度新的改变功能快捷键合理的创建标题有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能丰富你的文章UML图表流程图FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好 这是你第一次使用# 大模型应用开发实战从认知模型到可落地的工程架构一、先厘清一个本质问题大模型应用到底在开发什么不少初学者拿到大模型 API 的第一反应是跑通一个对话接口就完事于是做出了大量只能演示、不能上线的原型。要避免这种弯路必须先回答一个根本问题大模型应用开发和传统软件开发到底差在哪里传统软件的行为是确定性的——给定同样的输入必然得到同样的输出开发者的任务是穷举所有可能的分支把每一种异常都写进代码里。而大模型应用的行为本质上是概率性的模型基于海量训练数据学习到的统计规律在给定上下文后预测最可能的输出序列。同一个提示词换一个温度参数、换一次随机种子结果可能完全不同。这种不确定性是横在所有工程化手段面前的核心矛盾也是整个应用架构设计的出发点。理解这一点能帮你避免两类典型误区。第一类是把大模型当万能黑箱什么问题都往里塞结果输出不可控、质量参差不齐第二类是用传统软件的思路去穷举大模型的每一种行为试图靠 if-else 把输出兜死结果代码臃肿且永远兜不全。正确的姿态是把不确定性当作需要被管理的资源而不是需要被消灭的缺陷——通过评估、观测、护栏把不确定性收敛到业务可接受的范围内。从架构分层来看一个完整的大模型应用通常包含四层接入层模型 API 网关或本地推理服务负责统一不同供应商的接口、做故障切换与成本路由编排层提示词工程、工具调用、流程控制决定模型在什么时候、以什么方式、调用什么能力数据层业务数据库、向量知识库、缓存为模型提供外部事实与记忆应用层面向用户的产品界面、会话管理、权限控制。理解这四层的职责边界远比记住某个框架的 API 重要。因为框架会更新换代而分层思想几乎不变。当你面对一个新框架时先问自己它主要解决的是哪一层的哪类问题答案是接入“编排还是数据”决定了你该在它身上投入多少精力。二、模型接入永远不要写死鸡蛋放在一个篮子里模型接入是开发的第一步也是最容易被低估的一步。很多团队图省事把模型调用直接散落在业务代码里一旦供应商调价、升级模型版本或者限流整个应用就跟着遭殃。这个教训在业界反复上演某模型服务商突然宣布旧版本下线或者某一夜之间价格翻倍而那些把模型调用写死在代码里的团队只能熬夜连夜改代码。工程化的做法是抽象一层模型网关。这层网关至少要承担三件事第一统一接口抽象。无论是 OpenAI 的 GPT 系列、Anthropic 的 Claude还是国产的 DeepSeek、通义千问、文心一言都对上层暴露一套一致的调用语义。业务代码不感知底层模型是谁切换模型只是改一行配置。这带来的隐性收益是当某个模型能力不足或者厂商政策变动时你可以几乎零成本地迁移到替代方案而不是被某一家供应商绑架。第二故障切换与超时兜底。生产环境的模型服务可用性远没有想象中高。一次限流、一次网络抖动、一次上游变更都可能导致线上报错。网关层需要内置超时控制、重试退避和降级策略——主模型失败时自动切到备用模型保证用户体验不断档。这里有个容易被忽略的细节超时时间要根据任务类型分别配置。简单文本分类 5 秒内就该返回而长文生成可能要 60 秒甚至更久用同一套超时参数会两头不讨好。第三成本与配额管理。不同模型的单价可能相差一个数量级。通过网关把请求按任务复杂度路由简单任务走便宜的小模型复杂推理才动用旗舰模型。这是控制推理成本最有效、也最容易被忽视的手段。很多团队算成本账时只盯着调用了多少次却忽略了每次都调了哪个价位的模型——实际上后者才是成本差异的大头。下面是一个极简的模型网关示例PythonclassModelGateway:def__init__(self):self.providers{fast:create_client(deepseek-chat),# 便宜、快速strong:create_client(gpt-4o),# 能力最强local:create_local_client(qwen2.5-7b)# 本地部署}defchat(self,messages,task_typefast):primaryself.providers.get(task_type,self.providers[fast])try:returnprimary.chat(messages,timeout15)exceptException:# 故障降级主模型失败切备用returnself.providers[strong].chat(messages,timeout30) 这个例子虽然简单却体现了接入层的核心思想把用哪个模型从业务逻辑中剥离出来让它成为一个可配置、可观测、可治理的问题。在此基础上你还可以加上用量统计、配额上限、按部门计费等能力让模型成本变得透明可控。## 三、提示词工程被低估的结构化编程很多人觉得提示词工程就是把话说明白其实它更像一门结构化编程。一个高质量的提示词通常需要显式地包含五个要素-**角色Role**给模型一个明确的身份和立场约束其回答视角比如你是一位拥有十年经验的资深 Java 架构师--**任务Task**用一句话说清楚要完成什么避免模糊指令--**上下文Context**提供完成任务所需的背景信息比如接口文档、业务规则--**格式Format**指定输出结构如 JSON、Markdown、表格--**示例Few-shot**给出少量输入输出对让模型照着样子做。 其中格式约束往往被新手忽略但它在工程上极其重要。让模型稳定地输出 JSON配合 Pydantic 之类的校验器做类型检查是让大模型应用可控的第一步。相比让模型输出自由文本、再用正则去解析直接要求结构化输出能显著降低下游解析的出错率。 pythonfrompydanticimportBaseModelclassSummaryResult(BaseModel):title:strkey_points:list[str]risk_level:str# high / medium / lowpromptf你是一位资深分析师。请分析以下文本并严格输出 JSON{text}JSON 结构必须为: {{title: str, key_points: [str], risk_level: str}} 这里要提醒一个实践技巧不要只在提示词里请求JSON还要在代码层做强制校验和重试。当模型偶尔输出不合法 JSON 时捕获解析异常、把错误信息回传给模型让它自我修正比单纯加大提示词力度更可靠。这一招在工程上被称作自纠错循环是让概率性输出变得稳定可控的常用手段。需要注意的是提示词工程有明确的边界。它擅长调整模型的行为风格、约束输出结构却不擅长往模型脑子里注入新知识——那是检索增强RAG的职责。判断什么时候该升级手段比学习每个手段本身更重要当模型因为不知道而出错时给它更好的提示词没有用应该给它接入数据。四、从单次问答到闭环应用评估与观测真正让大模型应用能上线的不是写代码那一下而是有没有一套评估和观测体系。大模型的输出是概率性的所以不能像传统软件那样测试通过就完事。生产实践通常需要三层保障一是离线评估集。准备一批覆盖典型场景的黄金问答对每次改动提示词或更换模型后都跑一遍评估集量化指标准确率、格式合规率、幻觉率是否回退。这是防止越改越差的关键。很多团队在迭代中遇到这个版本感觉更好用了但也说不出哪里变了根源就是缺少一套可量化的回归基准。评估集规模不用很大几百条精心构造的样本往往就足够拦住大多数质量回退。二是链路追踪。记录每次请求的完整链路用户输入→检索了哪些文档→用了哪个提示词→模型原始输出→后处理结果。一旦线上出现质量问题能快速定位是检索环节、提示词环节还是模型本身的锅。目前这类观测可以通过 Langfuse、LangSmith 等开源或商业工具落地。一个务实的建议是从第一天就埋好 trace 日志不要等出了问题再补——补日志的成本远高于从一开始就埋。三是质量护栏。对关键业务可以加一层二次校验让模型先给答案再让一个独立的校验模型或规则引擎检查答案是否偏离事实、是否包含违规内容。虽然多花一次调用但能显著降低失控风险。尤其是涉及医疗、金融、法律等敏感场景这层护栏几乎是必需品。五、一个完整的落地范式对话→检索→工具→行动如果把大模型应用按复杂度排一条进阶路线大致是单轮问答 → 多轮对话记忆 → 检索增强RAG → 工具调用Function Calling → 自主智能体Agent。每个阶段解决一类新问题也带来一类新成本。对大多数业务而言前四个阶段已经能覆盖 80% 的需求。真正要谨慎的是直接跳到全自主智能体——它引入的调试复杂度、失控风险呈指数级上升。一个务实的建议是先用人在环上的半自动模式跑通业务闭环验证真实价值后再逐步放宽自动化边界。关于多轮对话记忆值得单独说一句。默认的对话式模型 API 是无状态的每次调用都需要把完整历史拼进上下文。工程上通常有三种记忆方案直接把历史塞进 prompt简单但费 token、用向量库检索相关历史适合长会话、用摘要压缩历史适合超长会话。方案的选择取决于会话长度和成本预算不存在放之四海皆准的最优解。关于工具调用核心是 Function Calling 或工具描述机制。模型并不真正执行工具而是根据工具的描述和参数 schema 决定该调哪个工具、传什么参数真正的执行由你的代码完成。这带来了一个安全红线工具执行结果必须经过校验尤其是涉及写操作、支付、删除等动作时绝不能直接信任模型的意图就放行。六、写在最后地基决定高度回顾整篇文章我们其实在反复强调同一件事大模型应用开发不是调 API 的活而是一整套关于不确定性管理、可观测性和成本治理的工程学问。模型网关、提示词模板、评估集、链路追踪、质量护栏——这些看似琐碎的基础能力才是让应用从能跑走向能上线、能维护、能赚钱的关键。当你的团队把这几块基础能力都补齐之后再去看市面上各种花哨的框架和范式就都能很快判断它们补的是哪一块短板、值不值得引入。技术永远在变但管理不确定性、保持可观测、控制成本这三条主线是这门手艺里不变的东西。Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持除了标准的Markdown编辑器功能我们增加了如下几点新功能帮助你用它写博客全新的界面设计将会带来全新的写作体验在创作中心设置你喜爱的代码高亮样式Markdown将代码片显示选择的高亮样式进行展示增加了图片拖拽功能你可以将本地的图片直接拖拽到编辑区域直接展示全新的KaTeX数学公式语法增加了支持甘特图的mermaid语法1功能增加了多屏幕编辑Markdown文章功能增加了焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置等功能功能按钮位于编辑区域与预览区域中间增加了检查列表功能。功能快捷键撤销Ctrl/CommandZ重做Ctrl/CommandY加粗Ctrl/CommandB斜体Ctrl/CommandI标题Ctrl/CommandShiftH无序列表Ctrl/CommandShiftU有序列表Ctrl/CommandShiftO检查列表Ctrl/CommandShiftC插入代码Ctrl/CommandShiftK插入链接Ctrl/CommandShiftL插入图片Ctrl/CommandShiftG查找Ctrl/CommandF替换Ctrl/CommandG合理的创建标题有助于目录的生成直接输入1次#并按下space后将生成1级标题。输入2次#并按下space后将生成2级标题。以此类推我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。如何改变文本的样式强调文本强调文本加粗文本加粗文本标记文本删除文本引用文本H2O is是液体。210运算结果是 1024.插入链接与图片链接: link.图片:带尺寸的图片:居中的图片:居中并且带尺寸的图片:当然我们为了让用户更加便捷我们增加了图片拖拽功能。如何插入一段漂亮的代码片去博客设置页面选择一款你喜欢的代码片高亮样式下面展示同样高亮的代码片.// An highlighted blockvarfoobar;生成一个适合你的列表项目项目项目项目1项目2项目3计划任务完成任务创建一个表格一个简单的表格是这么创建的项目Value电脑$1600手机$12导管$1设定内容居中、居左、居右使用:---------:居中使用:----------居左使用----------:居右第一列第二列第三列第一列文本居中第二列文本居右第三列文本居左SmartyPantsSmartyPants 是一个文本转换工具主要功能是将普通的 ASCII 标点符号自动转换为更美观的印刷体标点符号。例如原始符号转换后说明引号“引号”直引号变弯引号单引号‘单引号’直单引号变弯单引号--–两个连字符变短破折号---—三个连字符变长破折号...…三个点变省略号创建一个自定义列表MarkdownText-to-HTMLconversion toolAuthorsJohnLuke如何创建一个注脚一个具有注脚的文本。2注释也是必不可少的Markdown将文本转换为HTML。KaTeX数学公式您可以使用渲染LaTeX数学表达式 KaTeX:Gamma公式展示Γ ( n ) ( n − 1 ) ! ∀ n ∈ N \Gamma(n) (n-1)!\quad\forall n\in\mathbb NΓ(n)(n−1)!∀n∈N是通过欧拉积分Γ ( z ) ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) \int_0^\infty t^{z-1}e^{-t}dt\,.Γ(z)∫0∞​tz−1e−tdt.你可以找到更多关于的信息LaTeX数学表达式here.新的甘特图功能丰富你的文章2014-01-072014-01-092014-01-112014-01-132014-01-152014-01-172014-01-192014-01-21已完成进行中计划一计划二现有任务Adding GANTT diagram functionality to mermaid关于甘特图语法参考 这儿,UML图表可以使用UML图表进行渲染例如下面产生的一个序列图王五李四张三王五李四张三李四想了很长时间, 文字太长了不适合放在一行.你好李四, 最近怎么样?你最近怎么样王五我很好谢谢!我很好谢谢!打量着王五...很好... 王五, 你怎么样?关于UML图表语法参考 这儿,流程图链接长方形圆圆角长方形菱形关于Mermaid语法参考 这儿,FLowchart流程图我们依旧会支持flowchart.js的流程图语法Created with Raphaël 2.3.0开始我的操作确认结束yesno关于Flowchart流程图语法参考 这儿.导出与导入导出如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到文章导出生成一个.md文件或者.html文件进行本地保存。导入如果你想加载一篇你写过的.md文件在上方工具栏可以选择导入功能进行对应扩展名的文件导入继续你的创作。mermaid语法说明 ↩︎注脚的解释 ↩︎
返回列表