一、通过 API 调用大模型
1.1 基础调用
- 使用 OpenAI Python SDK,base_url 指向百炼兼容接口:
https://dashscope.aliyuncs.com/compatible-mode/v1
- 消息三角色:
system(系统指令)、user(用户输入)、assistant(模型回复)
- 模型选择:qwen-max / qwen-plus / qwen-turbo 等
1.2 多轮对话
-
关键:维护
conversation_history 列表,每次调用需传入完整历史
- 大模型 API 是无状态的,不会自动记住上一轮对话
- 对话历史占上下文窗口空间,过长需截断或摘要处理
- 生产环境需将对话历史持久化存储(如数据库),支持跨会话连续对话
1.3 流式输出
- 参数:
stream=True
- 效果:逐 token 增量返回,用户无需等待完整回复
- 本质:仅改变展示方式,不影响模型推理过程和最终答案质量
- ⚠️ 流式输出如使用负载均衡,可能需要禁用缓存和数据压缩
二、大模型工作原理(五阶段)
| 阶段 |
名称 |
核心过程 |
| 1 |
文本分词 (Tokenization) |
文本 → Token ID 序列;Token ≠ 词,是子词/字符片段 |
| 2 |
Token 向量化 (Embedding) |
Token ID → Embedding 矩阵查表 → 语义向量 + 位置编码 |
| 3 |
大模型推理 (Forward Pass) |
向量逐层穿过 Transformer 解码器 → 最后 token 的隐藏状态 → 线性投影 → Logits |
| 4 |
解码与自回归 |
Logits → Softmax 概率分布 → 选 token → 追加到输入 → 重复推理 |
| 5 |
输出文本 |
Token ID 序列 → 可读字符串;流式 = 逐 token 解码增量发送 |
-
自回归生成:每次生成一个 token,追加到输入,循环直至遇到 EOS / 达到最大长度 / 遇到停用词
-
不同模型 EOS 不同:Qwen3 =
<|im_end|>,LLaMA/Mistral = </s>,DeepSeek V3.2 = <|end▁of▁sentence|>,GPT-OSS = <|return|>
解码策略两大分类
| 分类 |
策略 |
特点 |
| 近似确定性解码 |
Greedy Decoding(贪心) |
每次选概率最高的 token |
|
Beam Search(束搜索) |
保留多个候选路径,选最优 |
| 随机采样解码 |
Top-p (Nucleus Sampling) |
按累计概率采样 |
|
Top-k Sampling |
从前 k 个 token 中随机选 |
三、随机性参数
| 参数 |
范围 |
默认值 |
作用 |
调参建议 |
| temperature |
[0, 2) |
0.7 |
控制概率分布尖锐程度;低→确定性强,高→多样性高 |
代码生成→0.1;创意文案→0.9 |
| top_p |
(0, 1] |
0.8 |
按累计概率筛选候选 Token 集合;低→窄选稳定,高→广选多样 |
明确答案→0.3;创意任务→0.9 |
| top_k |
≥1 |
— |
从概率前 k 的 token 中随机选择;k=1 等价贪心 |
— |
| seed |
整数 |
— |
相同 seed + 相同参数 → 最大可能返回相同结果,但无法完全一致 |
— |
- ⚠️ 不建议同时调整 temperature 和 top_p,优先调整其中一个
- ⚠️ 即使 temperature=0、top_p 极小、seed 相同,仍可能因分布式系统/优化引入微小随机性
-
确定性场景(结构化提取):temperature=0.1, top_p=0.3
-
创意场景(广告文案):temperature=0.7~0.9, top_p=0.9
拓展:enable_search 参数
- 千问支持
enable_search 参数,让大模型在生成回答时利用互联网搜索结果丰富回复内容
四、上下文工程 (Context Engineering)
为什么需要?
- 大模型知识来自训练数据,不包含私域知识
- 直接在提示词中喂入知识 → 上下文窗口有限 + 效率低 + 成本高 + 信息干扰
-
核心定义:在正确的时间,将最相关、最精准的知识,动态加载到大模型有限的上下文窗口中
四大核心技术
| 技术 |
作用 |
课程对应 |
| RAG |
从外部知识库检索信息,为模型提供精准依据 |
C2.2-C2.5 |
| Prompt |
精确引导模型思考和输出格式 |
C2.3 |
| Tool |
赋予模型调用外部工具能力 |
C3.1 |
| Memory |
跨对话理解历史上下文 |
C3.4 |
五、RAG(检索增强生成)
5.1 两阶段流程
| 阶段 |
步骤 |
说明 |
| 建立索引 |
文档解析 → 文本分段 → 文本向量化 → 存储索引 |
一次性完成,持久化到向量数据库 |
| 检索生成 |
问题向量化 → 相似度检索 → 提示词模板 → 大模型生成 |
每次查询时执行 |
-
检索是最重要的环节:如果检索不到正确的信息,后面的生成一定出错
5.2 文本向量化原理(扩展)
- Embedding 模型通过对比学习训练:相关文本对向量相似度高,不相关的低
- 检索时:问题向量与库中所有片段向量进行余弦相似度比较 → 返回最相似的 N 个
5.3 RAG 多轮对话
-
挑战:检索只基于当前问题,代词指代丢失上下文(如"他的主管是谁?"不知"他"是谁)
-
解决方案:问题改写
- 用大模型根据对话历史改写当前问题
- 例:「他的主管是谁?」→「张三的主管是谁?」
- 实现:LlamaIndex 的
CondenseQuestionChatEngine
5.4 LlamaIndex 核心用法
# 加载文档 → 创建索引 → 保存/加载 → 查询
documents = SimpleDirectoryReader('./docs').load_data()
index = VectorStoreIndex.from_documents(documents, embed_model=DashScopeEmbedding(...))
index.storage_context.persist("path") # 保存
index = load_index_from_storage(StorageContext.from_defaults(persist_dir="path"), embed_model=...) # 加载
query_engine = index.as_query_engine(streaming=True, llm=OpenAILike(...), similarity_top_k=5)
response = query_engine.query('问题')
六、提示词工程
6.1 提示词框架六要素
| 要素 |
含义 |
示例 |
| 任务目标 (Object) |
明确要求完成什么 |
"审查文档中的错别字" |
| 上下文 (Context) |
任务的背景信息 |
公司制度文件、操作流程 |
| 角色 (Role) |
大模型扮演的身份/语气 |
算法工程师 / 小学老师 |
| 受众 (Audience) |
针对的特定受众 |
零基础新员工 / 资深开发者 |
| 样例 (Sample) |
供大模型参考的案例 |
输入-输出对 |
| 输出格式 (Output Format) |
输出的格式/类型/枚举范围 |
JSON / Markdown / 枚举值 |
- 其他分析方法:SWOT分析法、5W2H分析法等也可辅助构建提示词
- 阿里云百炼提供提示词自动优化工具
6.2 六大提示词技巧
| 技巧 |
核心要点 |
适用场景 |
| 清晰表达 + 分隔符 |
用【】、###、XML标签分隔关键要素;避免与已有符号冲突 |
所有场景 |
| 限定角色和受众 |
角色决定语气风格,受众决定内容深度 |
回答风格差异化 |
| 规定输出格式 |
指定 JSON/Markdown/枚举,便于下游解析 |
结构化输出 |
| 少样本示例 (Few-shot) |
提供输入-输出样例让模型"模仿"风格和结构 |
风格/结构一致性 |
| 思维链 (CoT) |
加"请一步步推导",让模型输出中间推理步骤 |
复杂数学/逻辑推理 |
| Meta Prompting |
让大模型扮演"提示词教练"优化提示词;进阶:引入参考答案做差距分析 |
提示词迭代优化 |
-
超越 CoT:思维树(ToT)、思维图(GoT)等方法进一步扩展推理能力
-
发展趋势:大模型从 CoT 提示方法向多智能体(Agent)方向发展
6.3 Meta Prompting 的多角色协作架构
-
Critic(评估者):将生成答案与参考答案对比,输出差距分析报告
-
Optimizer(优化者):根据差距分析报告重写提示词
-
Grader(评分员):按量化标准(如友好度、清晰度、准确性 1-5 分)评分,输出结构化 JSON
- 迭代流程:生成 → Critic 对比 → Optimizer 重写 → Grader 评分 → 循环直到差距足够小
6.4 AI裁判
- 用大模型依据预设量化标准判断"通过/不通过"
- 训练流程类似机器学习:
- 准备标注样本(好答案与坏答案)
- 7:3 拆分训练集/评估集
- 迭代优化(Meta Prompting 改进裁判提示词)
- 监控两个准确率:训练集准确率 + 评估集准确率
- 过拟合检测:训练准确率持续提升但评估准确率停滞或下降 → 停止优化
- 样本质量问题:标注样本含糊或矛盾 → 先修复样本,再优化裁判
- 选择标准:采用评估集上表现最好的版本,而非训练集
- 用于自动化提示词优化流程的停止条件
6.5 推理模型 vs 通用模型
| 维度 |
推理模型 |
通用模型 |
| 设计目标 |
逻辑推理、多步求解 |
通用对话、文本生成 |
| 训练数据侧重 |
数学题解、代码逻辑、科学推理 |
百科、文学、对话等多领域 |
| 输出特征 |
含完整推导步骤 |
简洁直接 |
| 响应速度 |
较慢 |
较快 |
| 适用场景 |
模糊任务、大海捞针、代码调试/改进 |
明确通用任务、速度/成本敏感 |
推理模型提示词技巧:
- 保持简洁清晰 + 足够背景信息
-
避免添加"一步一步推理"(模型自带深度思考)
- 可补充角色/受众/输出格式
- 适合做 Meta Prompting 的"教练"
-
根据模型响应迭代调整:推理模型回含思考过程,天然适合分析推理逻辑;不断对话补充信息完善提示词;描述太抽象时可增加示例明确
-
混合分工策略:推理模型做"规划师"/"分析师"(提示词优化、复杂规划、代码调试),通用模型做执行者(信息提取、格式转换、简单问答),最佳性价比
6.6 提示词工程化最佳实践
- 提示词应做成可配置的,方便领域专家参与设计
- 阿里云百炼提供可视化大模型应用构建能力(页面编写提示词、流程可视化搭建)
七、自动化评测
7.1 为什么需要评测?
- 大模型输出有随机性 → 每次调整需量化验证
- 从"感觉变好了" → "指标提升了 X%"
-
评测先行的三大原因:
-
避免盲目优化:没有基线,不知道优化是否真的有效
-
量化改进效果:从"感觉变好了"变成"指标提升了X%"
-
防止跷跷板效应:一处优化可能导致另一处退步,评测发现整体是否提升
7.2 "Lost in the Middle" 与"知识浓度"
-
Lost in the Middle:关键信息被埋藏在海量无关信息中,大模型"视而不见"
-
知识浓度:上下文中相关信息密度高、噪音少、与问题直接关联
- RAG精度瓶颈往往不在大模型"聪明"与否,而在于上下文的"知识浓度"
7.3 评测维度与框架
RAG 评测四大维度:
- 召回质量(Retrieval Quality)
- 答案忠实度(Faithfulness)
- 答案相关性(Answer Relevance)
- 上下文利用率/效率(Context Utilization)
主流评测框架对比:
| 框架 |
核心特点 |
主要指标 |
适用场景 |
| Ragas |
专为 RAG 设计 |
Answer Correctness / Context Recall / Context Precision / Faithfulness / Answer Relevancy |
RAG 全链路评估(推荐) |
| TruLens |
可观测性与过程追踪 |
Groundedness / Answer Relevance / Context Relevance |
需要调试中间过程 |
| DeepEval |
TDD 理念 + CI/CD 集成 |
Faithfulness / Context Recall / Answer Relevance |
自动化测试流水线 |
| 自定义评测 |
领域专家深度参与 |
流程可操作性 / 政策合规性 / 情绪安抚度 / 问题解决完备度 |
业务特定指标 |
- LlamaIndex / LangChain 等主流 RAG 框架也内置评估工具
7.4 Ragas 指标分类
| 评测阶段 |
指标 |
衡量什么 |
| 整体回答质量 |
Answer Correctness |
生成答案与标准答案的准确度 |
| 生成环节 |
Faithfulness |
答案是否完全基于 contexts,无幻觉 |
|
Answer Relevancy |
答案是否直接回应问题 |
| 召回环节 |
Context Precision |
contexts 中相关片段的排序质量和信噪比 |
|
Context Recall |
ground_truth 观点在 contexts 中的覆盖率 |
7.5 Ragas 三大核心指标详解
| 指标 |
衡量什么 |
需要的数据 |
计算方式 |
| Answer Correctness |
生成答案与标准答案的准确度 |
question + answer + ground_truth |
0.25 × 语义相似度 + 0.75 × 事实F1 |
| Context Recall |
ground_truth 观点在 contexts 中的覆盖率 |
question + contexts + ground_truth |
被支持的观点数 ÷ 总观点数 |
| Context Precision |
contexts 中相关片段的排序质量和信噪比 |
question + contexts + ground_truth |
相关 context 的 precision 均值 |
-
事实 F1 计算:大模型将 answer 和 ground_truth 分解为观点列表 → 计算 TP/FP/FN → F1 = TP / (TP + 0.5×(FP+FN))
-
Faithfulness(忠实度):评估答案与检索参考资料的事实一致性(是否"胡编乱造"/幻觉)
-
Answer Relevancy(答案相关性):评估生成的答案是否与问题相关
-
低分诊断:
| 指标偏低 |
可能原因 |
优化方向 |
| Context Recall 低 |
知识库不全 / embedding 模型弱 / query 表达差 |
补充知识库 / 升级 embedding 模型 / Query 改写 |
| Context Precision 低 |
检索噪声多 / 排序不佳 |
引入 Rerank / 优化 chunk 切分策略 |
| Answer Correctness 低(但 Recall/Precision 高) |
生成阶段出错 |
优化 prompt / 调整 temperature / 更换更强 LLM / 微调 |
| Faithfulness 低 |
模型产生幻觉 |
强化 prompt 中"仅基于上下文回答"指令 / 使用更忠实的生成模型 |
7.6 Ragas 提示词模板可定制
- Ragas 默认提示词模板是英文的,可自定义中文模板以更符合中文问答场景
- Ragas 提示词中包含示例,也可更改示例适配业务场景
7.7 更多评价指标
| 指标 |
任务类型 |
说明 |
| ToolCallAccuracy |
Agent |
评估 LLM 识别和调用工具的表现 |
| DataCompyScore |
NL2SQL |
评估 SQL 检索结果的差异性 |
| LLMSQLEquivalence |
NL2SQL |
评估 SQL 语句的语义等价性(无需真正执行) |
| BleuScore |
微调/通用 |
基于 n-gram 评估相似度,无需大模型 |
7.8 评测运营体系
- 问题来源:真实用户场景(工单、反馈、高频问题)
- 标准答案:领域专家编写(技术人员无法判断业务正确性)
- 指标层级对齐:
| 层级 |
示例 |
说明 |
| 业务指标 |
用户满意度 > 90% |
最终目标 |
| 核心技术指标 |
召回准确率 > 85% |
可工程化衡量 |
| 算法指标 |
Context Precision > 0.8 |
自动化评测 |
- 评测先行动作:明确定义目标 → 构建评测集 → 建立自动化评测 → 针对性优化 → 评测验证 → 持续迭代
- 持续运营三举措:
- 让业务专家参与AI评测(如电商主管评测促销规则、物流专员评测运费时效)
- 从最终用户视角出发,评判答案的正确性、简洁性与可操作性
- 建立闭环机制:发现问题 → 改进优化 → 跟踪效果 → 迭代指标
八、RAG 优化
8.1 文档准备阶段
-
意图空间 vs 知识空间:
- 重叠区 → 优化内容质量 + 工程/算法
- 未覆盖意图 → 补充知识库
- 未利用知识 → 优化召回 + 剔除无关内容
- 建立持续收集用户意图的机制,领域专家参与评测
8.2 文档解析与切片
| 问题 |
策略 |
| 不支持的文档格式 |
开发解析器 / 转换格式 / DashScopeParse |
| 表格/图片等特殊内容 |
改进解析器 / 视觉模型辅助 |
| 主题接近的内容混淆 |
扩写标题 + 元数据打标 |
| 切片过长(噪声多) |
减小 chunk_size |
| 切片过短(信息截断) |
增大 chunk_size |
五种切片方法:
| 方法 |
特点 |
适用场景 |
| Token切片 |
按固定 Token 数截断 |
上下文长度受限 |
| 句子切片(默认) |
保持句子完整性 |
通用场景 |
| 句子窗口切片 |
检索小切片,返回时扩展前后文 |
需要保持上下文连贯 |
| 语义切片 |
按语义相关性自适应切分 |
逻辑性强的文档 |
| Markdown切片 |
按标题层级智能分割 |
Markdown 文档 |
- 句子窗口切片解决的核心矛盾:小 chunk 精准定位 vs 大 chunk 上下文完整
- 没有最好的方法,只有最适合场景的方法
- 借助百炼 DashScopeParse 将 PDF/Word 解析为 Markdown,可用大模型润色修正
8.3 向量化与存储
Embedding 模型选择:
- 新版通常更好(text-embedding-v3 > v2)
- 可通过相似度对比和 Ragas 评测验证效果
向量数据库选择:
| 方案 |
优点 |
缺点 |
适用 |
| 内存存储 |
快速上手 |
不持久化、受内存限制 |
开发测试 |
| 本地数据库(Milvus/Qdrant) |
功能完整 |
需自行运维 |
中小规模 |
| 云服务(DashVector/Milvus版) |
免运维/自动扩容/混合检索 |
按量付费 |
生产环境 |
8.4 检索召回优化
检索前策略:
| 策略 |
说明 |
示例 |
| 问题改写 |
大模型扩写问题,补充上下文 |
"张伟" → "公司所有叫张伟的员工及其部门" |
| 问题扩写 |
增加更多信息,让检索更全面 |
"张伟是哪个部门的" → +联系方式、职责 |
| 用户画像扩展 |
结合用户信息个性化 |
不同岗位问"工作注意事项"→不同回答 |
| 提取标签 |
标签过滤 + 向量检索组合 |
提取"人名:张伟"→先标签过滤再向量检索 |
| 反问用户 |
不明确时主动追问 |
"请问你想了解哪个岗位的工作职责?" |
| 多步检索规划 |
复杂问题拆解为多步检索 |
StepDecomposeQueryTransform + MultiStepQueryEngine |
| HyDE |
大模型生成假想答案文档→用假想文档向量检索真实文档 |
即使假想内容不准,结构和风格相似也有助检索 |
检索后策略:
| 策略 |
说明 |
| Rerank(重排序) |
先大数量召回(如 top_k=20),再用排序模型精选(如 top_n=3) |
| 滑动窗口检索 |
检索到切片后补充前后相邻切片,保持语义连贯 |
8.5 生成阶段优化
| 优化方向 |
具体措施 |
| 选择模型 |
简单查询→qwen-turbo;复杂推理→qwen-plus/max;长文档→qwen-long;法律→farui-plus |
| 优化提示词 |
①明确要求不编造答案 ②内容分隔标记 ③按问题类型调整模板 |
| 调整参数 |
固定输出→降 temperature/top_p + 设 seed;减少重复→提高 presence_penalty;控长度→调 max_tokens |
| 混合架构 |
蒸馏模型做预处理 → RAG 做知识查询 → 大模型做最终回答 |
8.6 进阶架构
模块化 RAG:
- 结合不同问题路由到不同的 RAG 应用,构建能力更强大的模块化 RAG 系统
GraphRAG:
- 结合检索增强生成(RAG)和查询聚焦摘要(QFS)的优点
- RAG 擅长精确细节信息,QFS 善于理解和总结整体内容
- GraphRAG 既能准确回答具体问题,又能处理需要深入理解的复杂查询