ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI 核心概念解析:从 LLM、Transformer 到 Prompt 与 RAG 的工程化落地

AI 核心概念解析:从 LLM、Transformer 到 Prompt 与 RAG 的工程化落地 1. 从四个术语到一条能跑的链路刚接触大模型应用开发时最容易卡住的地方不是某个概念本身而是这些概念在工程里到底对应哪一行配置。LLM、Transformer、Prompt、RAG 这四个词几乎出现在每一篇入门文章里但真正动手时你会发现模型名写在哪里、上下文长度怎么设、提示词模板放在哪个字段、检索增强又该从哪一层接进去这些问题光看概念解释是答不上来的。这篇内容面向刚接触大模型应用的开发者用一条可运行的本地配置链路把四个概念串起来。你会拿到两份可以直接复制的配置骨架一份settings.json负责模型接入与对话参数一份config.toml负责提示词模板与检索增强的工程化落地。每配完一段我都会给出对应的验证命令和检查点让你确认这个配置到底有没有生效而不是配完心里没底。需要先说明一点LLM 是负责生成语言的核心模型Transformer 是它背后的网络架构Prompt 是你驱动模型的指令RAG 是让模型在生成前先查资料再回答的机制。这四个概念在配置里分别对应模型标识、上下文窗口与推理参数、提示词模板、检索管线。下面按这个映射关系一步步搭。2. 前置准备拿到可用的模型接入凭证在写配置之前需要先有一个能调用的模型服务入口。我这边用的是 TaoToken 的接入方式它的 API 地址是https://taotoken.net/api兼容常见的对话补全接口格式配置起来比较直接。第一步是拿到 API Key。打开控制台页面登录后在 API Keys 管理里创建一个新的密钥。创建时建议给它起一个能区分用途的名字比如local-dev-rag方便后面排查是哪个环境在调用。密钥只会在创建时完整显示一次复制后先存到本地环境变量里不要直接写进会提交到 Git 的配置文件。export TAOTOKEN_API_KEYsk-你的密钥第二步是确认你要用的模型标识。不同模型在上下文窗口、推理速度、价格上差异很大入门阶段建议先选一个通用对话模型跑通链路后面再按任务替换。模型标识一般形如claude-sonnet-4-5或gpt-4o-mini这类字符串具体以控制台模型列表里显示的为准。第三步是确认接入文档里的请求路径和鉴权头格式。TaoToken 的接入文档里会写明Authorization: Bearer key这类标准写法以及对话补全的 endpoint 路径。把这两项记下来下一步写settings.json时要用。提示API Key 属于敏感凭证本地开发也建议用环境变量注入而不是硬编码。后面所有配置里的密钥字段都写成从环境变量读取的形式。3. 可复制配置一settings.json 串起 LLM 与推理参数settings.json负责的是模型接入层也就是 LLM 和 Transformer 这两个概念在工程里的落点。LLM 对应model字段Transformer 的上下文窗口对应max_context_tokens而解码策略对应temperature、top_p这些采样参数。{ provider: { name: taotoken, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, auth_header: Authorization, auth_scheme: Bearer }, model: { id: claude-sonnet-4-5, max_context_tokens: 200000, max_output_tokens: 4096 }, decoding: { temperature: 0.3, top_p: 0.9, top_k: 40, stream: true }, request: { timeout_seconds: 60, retry: { max_attempts: 3, backoff_seconds: 2 } } }这里几个字段值得展开说。max_context_tokens是上下文窗口的工程表达它决定了模型一次能看到多少 token包括系统提示、历史对话、检索结果和当前输入。设成 200000 是给长文档场景留余量但实际调用时如果输入很短并不会因此变慢或变贵计费按真实 token 数走。temperature设成 0.3 是偏保守的选择适合问答和检索增强这类需要稳定输出的场景。如果你在做创意写作可以调到 0.8 以上。top_p和top_k是配合 temperature 用的采样约束入门阶段保持默认即可不用急着调。stream打开后模型会边生成边返回前端体验更好也方便你在调试时看到第一个 token 的延迟。配置写完后先做一次语法校验确认 JSON 没有写错python -c import json; json.load(open(settings.json)); print(settings.json OK)如果输出settings.json OK说明结构没问题。这一步看起来简单但实际项目里因为多一个逗号导致配置加载失败的情况非常常见先校验再往下走能省不少时间。4. 可复制配置二config.toml 落地 Prompt 与 RAGconfig.toml负责的是应用层也就是 Prompt 和 RAG 这两个概念的工程化落点。Prompt 对应[prompt]段里的模板RAG 对应[rag]段里的检索管线配置。[prompt] system 你是一名严谨的技术助手。 回答必须基于提供的参考资料不要编造未在资料中出现的事实。 如果参考资料不足以回答直接说明资料中未提及不要猜测。 输出使用 Markdown代码块标注语言。 template ## 参考资料 {context} ## 用户问题 {question} 请基于以上参考资料回答用户问题。 max_context_chars 6000 [rag] enabled true top_k 5 rerank true rerank_top_n 3 chunk_size 512 chunk_overlap 64 embedding_model text-embedding-3-small vector_store local [rag.retrieval] score_threshold 0.35 dedup true[prompt]段里的system是系统提示词它定义了模型的角色和边界。这里明确要求基于参考资料回答和资料不足时说明未提及这两条是抑制幻觉的关键约束。template是用户轮次的模板{context}会被检索结果填充{question}会被用户输入填充。max_context_chars是给检索结果设的字符上限防止召回内容过多把上下文窗口撑爆。6000 字符大约对应 2000 到 3000 个 token配合max_output_tokens留出的空间整体不会超窗口。[rag]段里top_k 5表示向量检索先召回 5 条候选rerank true表示对这 5 条做重排rerank_top_n 3表示最终只取重排后的前 3 条拼进上下文。chunk_size和chunk_overlap控制文档切分粒度512 字符一块、重叠 64 字符是常见起点重叠是为了避免句子被切断导致语义丢失。score_threshold 0.35是相似度阈值低于这个分数的召回结果会被丢弃避免把不相关的内容塞给模型。这个值需要根据你的 embedding 模型和语料特点微调入门阶段先用 0.35 试。同样先做一次语法校验python -c import tomllib; tomllib.load(open(config.toml,rb)); print(config.toml OK)Python 3.11 以上自带tomllib如果是更早的版本用pip install tomli后把导入换成tomli即可。5. 验证请求确认四个概念对应的配置真的生效配置写完不等于生效下面用一条最小请求链路逐个验证。先验证 LLM 接入是否通。用 curl 发一个最简单的对话请求确认鉴权和模型标识都对curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 只回复两个字收到}], max_tokens: 16 } | python -m json.tool检查点返回 JSON 里choices[0].message.content应该包含收到。如果返回 401说明密钥或鉴权头有问题如果返回 404说明模型标识或路径写错了。再验证 Prompt 模板是否被正确渲染。写一个最小脚本把模板里的占位符替换后打印出来import json, tomllib, os settings json.load(open(settings.json)) config tomllib.load(open(config.toml, rb)) context TaoToken 提供兼容 OpenAI 格式的对话补全接口。 question TaoToken 的接口格式是什么 rendered config[prompt][template].format( contextcontext, questionquestion ) print(rendered)检查点输出里应该能看到## 参考资料和## 用户问题两个段落且{context}和{question}都已被替换。如果还残留花括号说明模板里有未转义的占位符。最后验证 RAG 检索链路。这一步需要你先准备一个小型本地知识库比如把几段文档存成 txt然后用 embedding 模型生成向量并写入本地向量库。检索时打印召回的 chunk 和分数# 伪代码示意检索检查点 results retriever.search(question, top_kconfig[rag][top_k]) for r in results: print(fscore{r.score:.3f} | {r.text[:60]}...)检查点召回结果的分数应该高于score_threshold且文本内容与问题语义相关。如果分数普遍很低说明 embedding 模型和语料不匹配或者 chunk 切分粒度不合适。把检索结果填进模板再发给模型就完成了 RAG 的完整闭环。这时候模型的回答应该能引用参考资料里的内容而不是凭空生成。6. 本篇常见错排查配置链路跑不通时问题往往集中在几个固定位置。下面按现象列一下排查方向。报 401 或鉴权失败先确认环境变量TAOTOKEN_API_KEY在当前 shell 里真的存在用echo $TAOTOKEN_API_KEY检查。如果是在 IDE 里运行注意 IDE 可能没有继承你终端里 export 的变量需要在运行配置里单独设置。报模型不存在模型标识是大小写敏感的且不同接入方对同一模型的命名可能不同。以控制台模型列表里显示的字符串为准不要凭记忆写。上下文超限报错检查max_context_chars和max_output_tokens之和是否超过了max_context_tokens。字符和 token 不是一比一关系中文大约 1 字符对应 0.6 到 1 个 token英文大约 4 字符对应 1 个 token估算时留足余量。RAG 召回内容不相关先看score_threshold是不是设得太低把不相关内容放进来了再看chunk_size是不是太大导致一块里混了多个主题。可以先把top_k调大、score_threshold调高观察召回质量的变化。模型回答不引用资料检查 system prompt 里有没有明确要求基于参考资料回答。如果约束不够强模型可能忽略检索结果直接凭参数知识回答。可以把约束写得更硬比如如果回答中使用了参考资料之外的信息必须明确标注。流式输出中断检查timeout_seconds是否太短长回答场景下 60 秒可能不够。另外确认网络环境稳定流式连接对中断比较敏感。7. 把配置跑通之后到这里LLM、Transformer、Prompt、RAG 四个概念已经分别落在了model.id、max_context_tokens、[prompt]模板和[rag]管线这四处配置上。你能用一条请求链路验证它们是否生效也能在出错时定位到具体是哪一层的问题。下一步可以做的方向有几个。一是把本地向量库换成持久化存储让知识库在重启后不丢失二是给检索加一层查询改写把用户的口语化问题转成更适合向量检索的形式三是把这条链路接进一个长期运行的编码或 Agent 场景这时候用 Coding Plan 会更合适它能覆盖多轮工具调用和长任务的额度需求。如果你在配置过程中想直接对比不同模型的输出效果可以打开模型对话页面手动试几轮把同样的 Prompt 和检索结果喂给不同模型观察它们在引用准确性和幻觉控制上的差异。接入文档里有完整的参数说明和示例请求遇到字段不确定时以文档为准。
返回列表