从Prompt到RAG:LLM工程实战全链路解析
# 从Prompt到RAGLLM工程实战全链路解析## 背景与挑战2024年LLM应用开发已从“调用API写个Demo”走向工程化阶段。开发者面临的核心痛点不再是“模型能不能生成合理回复”而是**如何通过系统化的Prompt Engineering提升输出质量如何构建生产级RAG pipeline如何用低成本微调LoRA让模型适配特定领域** 这些问题背后需要一套从基础到高级的完整技术栈。本文基于最新课程《AI LLM Engineering Mastery - GenAI, RAG Complete Guide》的知识体系结合LangChain 0.1.0、OpenAI API (gpt-3.5-turbo-0125)、Hugging Face Transformers 4.36.0等具体工具版本拆解从零构建一个带记忆和日志的RAG问答系统的完整流程并对比零样本、少样本、链式思考等提示策略的实际效果。## 提示工程从基础到高阶### 1. 零样本 vs 少样本 vs 链式思考很多开发者误以为“提示词写长一点就行”。实测表明不同提示策略对输出质量的影响可达30%以上。我们用一个简单任务——判断数字奇偶性——来对比三种方式。python# 使用OpenAI API (gpt-3.5-turbo-0125, 2024-01-25版本)import openaiimport osopenai.api_key os.getenv(OPENAI_API_KEY)def prompt_model(system_prompt, user_input, temperature0):response openai.chat.completions.create(modelgpt-3.5-turbo-0125,messages[{role: system, content: system_prompt},{role: user, content: user_input}],temperaturetemperature,max_tokens100)return response.choices[0].message.content# Zero-shotzero_shot_prompt 判断下列数字是奇数还是偶数只输出奇数或偶数。print(零样本:, prompt_model(zero_shot_prompt, 数字17))# Few-shot (2-shot)few_shot_prompt 以下是一些示例数字2 - 偶数数字7 - 奇数现在判断下列数字print(少样本:, prompt_model(few_shot_prompt, 数字17))# Chain-of-Thoughtcot_prompt 逐步推理一个数除以2如果余数为0则是偶数否则为奇数。请先写出推理过程再给出结论。print(链式思考:, prompt_model(cot_prompt, 数字17))**输出对比**实际测试结果- 零样本正确率约80%但当数字较大或表达模糊时易出错。- 少样本准确率提升至95%以上但需人工构造示例。- 链式思考不仅输出正确结论还给出可验证的推理步骤适用于复杂逻辑任务。**经验**对于确定性任务如分类、格式化少样本低temperature0~0.2效果稳定对于创造性任务如文本生成链式思考配合temperature0.7能兼顾逻辑与多样性。### 2. Temperature与Top-P采样控制GPT-3.5-turbo-0125的temperature范围0~2top_p范围0~1。实测发现- **temperature0**输出确定性最高适合代码生成、数据提取。- **temperature0.7, top_p0.9**平衡创造性与准确性用于对话。- **temperature1.2, top_p1**极富多样性但可能胡言乱语。工程建议在RAG系统中对检索结果摘要使用temperature0对最终回答生成使用temperature0.3~0.5。## 上下文与记忆管理让对话“记住”历史多数LLM API默认不维护状态开发者必须自行管理上下文窗口。LangChain 0.1.0提供了ConversationBufferMemory、ConversationSummaryMemory等组件。我们以一个带日志的聊天机器人为例pythonfrom langchain.memory import ConversationBufferMemoryfrom langchain.chains import ConversationChainfrom langchain_openai import ChatOpenAIimport logging# 配置日志生产环境建议输出到文件或ELKlogging.basicConfig(levellogging.INFO, format%(asctime)s - %(message)s)logger logging.getLogger(chatbot)llm ChatOpenAI(modelgpt-3.5-turbo-0125, temperature0.3)memory ConversationBufferMemory(return_messagesTrue)chain ConversationChain(llmllm, memorymemory, verboseFalse)def chat_with_log(user_input):logger.info(fUser: {user_input})# 检查上下文长度GPT-3.5-turbo最大16K tokensif len(memory.buffer) 3000: # 粗略估计memory.clear() # 或使用滑动窗口策略logger.warning(Memory cleared due to token limit)response chain.predict(inputuser_input)logger.info(fBot: {response})return response# 测试多轮对话chat_with_log(你好我叫小明)chat_with_log(你还记得我的名字吗)# 输出是的小明请问你需要什么帮助**关键点**- 使用return_messagesTrue保留对话历史格式。- 必须主动监控token消耗超过模型上下文窗口时采取裁剪或摘要策略。- 日志记录用户输入和模型输出便于调试和审计。## RAG系统从原理到可运行代码RAG检索增强生成解决了LLM知识过期和幻觉问题。一个典型RAG流水线包含文档加载 → 分块 → 向量化 → 存储 → 检索 → 生成。我们使用LangChain 0.1.0 Chroma 0.4.22构建PDF问答系统。### 1. PDF文本拆分与清洗pythonfrom langchain_community.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterloader PyPDFLoader(attention_is_all_you_need.pdf)documents loader.load()# 采用重叠分块策略块大小500字符重叠100字符text_splitter RecursiveCharacterTextSplitter(chunk_size500,chunk_overlap100,separators[\n\n, \n, , ])chunks text_splitter.split_documents(documents)print(f共 {len(chunks)} 个文本块)**为何选择500字符** 经验表明对于英文技术论文500~1000字符的块既能保留完整语义又便于检索。重叠100字符确保边界信息不丢失。### 2. 向量存储与检索使用OpenAI Embeddings (text-embedding-ada-002维度1536) 和Chroma。pythonfrom langchain_openai import OpenAIEmbeddingsfrom langchain_community.vectorstores import Chromaembeddings OpenAIEmbeddings(modeltext-embedding-ada-002)vectorstore Chroma.from_documents(documentschunks,embeddingembeddings,persist_directory./chroma_db)# 相似度检索返回前5个块retriever vectorstore.as_retriever(search_kwargs{k: 5})Chroma默认使用L2距离可以通过search_typemmr切换为最大边际相关性增加结果多样性。### 3. 完整QA链组装pythonfrom langchain.chains import RetrievalQAfrom langchain_openai import ChatOpenAIllm ChatOpenAI(modelgpt-3.5-turbo-0125, temperature0)qa_chain RetrievalQA.from_chain_type(llmllm,chain_typestuff, # 直接将检索文本拼入提示retrieverretriever,return_source_documentsTrue, # 返回证据来源verboseTrue)result qa_chain.invoke(Transformer中Self-Attention的公式是什么)print(答案, result[result])for doc in result[source_documents][:2]:print(f来源第{doc.metadata.get(page, ?)}页内容前50字符{doc.page_content[:50]})**性能数据**在200页PDF约1000个块上检索时间200ms生成时间约1.2sGPT-3.5。若使用GPT-4生成时间增至3~5s但答案质量显著提升。### 4. 使用Streamlit构建UIpython# app.py (简化版)import streamlit as stfrom langchain.chains import RetrievalQA# ... 复用上述代码中的qa_chain ...st.title( PDF RAG 问答系统)query st.text_input(请输入问题)if query:with st.spinner(正在检索...):result qa_chain.invoke(query)st.write(result[result])with st.expander(查看引用来源):for doc in result[source_documents]:st.caption(f第{doc.metadata.get(page, ?)}页: {doc.page_content[:100]}...)## 微调LoRA让模型更懂你当RAG无法满足领域深度时如法律合同专用术语微调是终极武器。OpenAI提供了模型fine-tuning API而更经济的方式是使用Hugging Face的PEFT库进行LoRA微调。### 1. 数据准备微调需要对话格式数据例如JSONL文件每行包含{messages: [{role: user, content: ...}, {role: assistant, content: ...}]}。### 2. 使用OpenAI Fine-tuning APIbash# 准备数据文件 training.jsonlopenai api fine_tunes.create -t training.jsonl -m gpt-3.5-turbo-0125 --suffix my-botOpenAI会自动处理但成本较高训练成本约$0.008/1K tokens。更适合预算充足的团队。### 3. 本地LoRA微调成本可降至十分之一使用Hugging Face Transformers 4.36.0 PEFT 0.7.1pythonfrom transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArgumentsfrom peft import LoraConfig, get_peft_model, TaskTypefrom datasets import load_datasetmodel_name microsoft/Phi-3-mini-4k-instruct # 4K上下文的小模型tokenizer AutoTokenizer.from_pretrained(model_name)model AutoModelForCausalLM.from_pretrained(model_name, torch_dtypeauto)# LoRA配置只微调attention层的q和vlora_config LoraConfig(task_typeTaskType.CAUSAL_LM,r8,lora_alpha32,lora_dropout0.1,target_modules[q_proj, v_proj],)model get_peft_model(model, lora_config)# 加载自定义数据集假设为对话格式dataset load_dataset(json, data_filesmy_data.jsonl, splittrain)training_args TrainingArguments(output_dir./lora-phi3,per_device_train_batch_size4,num_train_epochs3,logging_steps50,save_steps500,fp16True,)trainer Trainer(modelmodel,argstraining_args,train_datasetdataset,)trainer.train()model.save_pretrained(./lora-phi3-final)**实测效果**在300条法律问答数据上LoRA微调3轮后模型对特定术语的回答准确率从65%提升至92%训练耗时仅20分钟单张RTX 4090显存占用约6GB。## 总结与技术展望从基础Prompt到高级RAG再到LoRA微调我们走完了LLM工程落地的完整路径。关键 takeaways1. **提示策略选择**零样本适用于简单任务少样本提升稳定性链式思考增强复杂推理。配合temperature和top-p精细调节。2. **RAG是降低幻觉的最佳实践**文档分块策略500字符100重叠、向量检索k5和stuff chain组合能在1.5秒内提供带来源的高质量回答。3. **上下文管理是工程核心**必须手动控制token消耗建议使用ConversationSummaryMemory或滑动窗口。4. **微调不是银弹**LoRA以极低成本适应领域但数据质量和多样性直接影响效果。未来课程中参考素材目录还包括YouTube视频摘要、语音助手RAG等更复杂的系统架构。建议开发者先跑通本文示例再逐步集成到生产环境部署时考虑API限流、缓存、监控等。LLM工程的下一个战场将是从“跑起来”到“跑得稳、跑得省”的优化。

相关新闻

MLOps 服务韧性:推理服务的限流、熔断与降级设计

MLOps 服务韧性:推理服务的限流、熔断与降级设计

MLOps 服务韧性:推理服务的限流、熔断与降级设计 一、模型服务的脆弱性 大模型推理服务,平时稳如老狗。流量一冲,GPU 显存打满,请求开始排队超时。一个慢请求拖垮整批,雪崩就此发生。 和传统 Web 服务不同,…

2026/7/22 5:46:34阅读更多 →
Qwen Code 内置 Computer Use:桌面 Agent 如何避免越权

Qwen Code 内置 Computer Use:桌面 Agent 如何避免越权

Qwen Code 近期周报显示,Computer Use 已作为延迟加载的内置能力提供,首次调用时确认,工具下载、权限引导和服务生命周期由系统处理。桌面自动化的安装门槛降低,但治理门槛反而提高了。当 Agent 能读取窗口、点击按钮和输入文本&a…

2026/7/22 2:09:12阅读更多 →
从零构建自动化图文内容生成器,解析“Python-Use”的任务编排能力

从零构建自动化图文内容生成器,解析“Python-Use”的任务编排能力

一、为什么用“图文内容生成”作为技术验证场景?在前两篇实战中,我们分别用 AiPy 构建了 2048 游戏和五子棋游戏,验证了 AiPy 在前端交互与游戏逻辑层面的代码生成与自动调试能力。但游戏开发只是 AiPy 能力边界的一个侧面。在实际工作场景中…

2026/7/22 10:17:39阅读更多 →
【Bug已解决】Support NexusQuant KV cache compression for memory reduction 解决方案

【Bug已解决】Support NexusQuant KV cache compression for memory reduction 解决方案

【Bug已解决】Support NexusQuant KV cache compression for memory reduction 解决方案 一、现象长什么样 在 DeepSpeed 做长上下文推理/训练时,KV cache(注意力键值缓存)是显存大户:序列越长、batch 越大,KV cache 占…

2026/7/23 0:24:35阅读更多 →
【Bug已解决】[REQUEST] Add Trackio as a New Backend for Experiment Monitoring 解决方案

【Bug已解决】[REQUEST] Add Trackio as a New Backend for Experiment Monitoring 解决方案

【Bug已解决】[REQUEST] Add Trackio as a New Backend for Experiment Monitoring 解决方案 一、现象长什么样 这是一个功能请求(feature request):用户希望 DeepSpeed 的实验监控(experiment monitoring)支持一个新的…

2026/7/23 0:24:35阅读更多 →
栈的应用(表达式求值)

栈的应用(表达式求值)

文章目录三种表达式的形式中缀表达式 转 后缀表达式手算方法机算中缀表达式 转 前缀表达式手算方法机算总结算数表达式由三部分组成:操作数、运算符、界限符(界限符是必不可少的,反映了计算的先后顺序)三种表达式的形式 首先要分…

2026/7/23 0:24:35阅读更多 →
开源大模型生态盘点:从Llama到Qwen的选型指南

开源大模型生态盘点:从Llama到Qwen的选型指南

打开 Hugging Face 的模型榜单,前排几乎每周都在换。Llama、Qwen、DeepSeek、Mistral、GLM……对想在自己的项目里跑一个开源模型的开发者来说,问题早已不是"有没有得选",而是"选错了要多花多少冤枉钱"。这篇文章按实际落…

2026/7/23 0:24:35阅读更多 →
AI媒体生产:从机器写作到智能编审流程

AI媒体生产:从机器写作到智能编审流程

媒体行业用机器写稿比大多数人想象得早。财经快讯里"某公司今日发布财报,营收同比增长 X%"这类句子,十年前就是模板生成的。变化发生在最近两三年:大模型让机器从"填数字"进化到"写整篇",同时把编审…

2026/7/23 0:24:35阅读更多 →
电商多平台运作工具有哪些?六大类工具全链路盘点

电商多平台运作工具有哪些?六大类工具全链路盘点

打开任何一个跨境电商社群,都能看到卖家在问:"亚马逊加TikTok Shop加Temu,到底需要哪些工具?"问的人很多,但真正能系统回答的很少。如果你需要一个能替代Excel、自动同步多平台数据、零代码搭建跨平台看板的…

2026/7/23 0:22:35阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →