Large Language Model
01_基础认知
1.1、术语及概念链接
1.2、模型_平台_推理引擎_API的区别
| 名称 | 作用 | 责任 | 示例 |
| 平台 | 平台是“把模型和推理能力包装成更容易使用的产品或运行环境”。 | 下载并管理模型,提供一定的参数配置能力 | Ollama/Open WebUI |
| API | API 是“调用接口”,负责让程序和模型服务通信。 | 接受请求,返回结构,链接前后端 | OpenAI API、Responses API |
| 推理引擎 | 推理引擎是“让模型跑起来的底层执行器”。 | 加载模型,调用GPU/CPU、优化速度/显存和吞吐 | vLLM,llama.cpp |
| 模型 | 模型是大脑本体 | 理解和生成 | DeepSeek,GPT等 |
应用通过 API 调用模型服务;API 通常由平台或服务层对外提供;平台内部会封装或调用推理引擎;推理引擎负责加载并运行大模型。
1.3、云端模型_vs_本地模型部署
02_OpenAI_API基础
2.1、API_SDK_Endpoint
2.2、Chat_Completions与Responses_API
目前OpenAI推出了两版接口,一种是Chat Completions。新版的是Responses API,把原来聊天、工具、多模态、结构化输出这些需求放进一个更通用的框架里。
OpenAI官方推荐新模型或者GPT5.4及以上,采用Responses API进行。Open Ai Developers
若跟我一样是初学者,建议Chat Completions + 本地部署。因为Responses API目前仅支持GPT的云端模型。
2.3、Streaming
03_Prompt与角色系统
3.1、Prompt基础
3.1.1、Prompt思想
Few-Shot:少样本推理。测试阶段学习过大量的样本后,在测试阶段,针对新类别只需要少量的数据就可以快速学习。可以理解为给模型一个参考答案或示例,模型使用少量样本去快速泛化。
Zero-Shot:迁移学习。训练阶段不存在与测试阶段完全相同的类别,但模型可以通过之前的训练数据推广并集中到测试阶段的类别上。可以理解为零样本,基于属性和语义去迁移到新的类别。
Few-Shot:给模型少量示例,引导模型对齐结果。例如给一个测试用例demo,参考demo的测试用例结构去生成。
Zero-Shot:无提示,语言描述任务,借用知识库回答问题。
3.1.2、Prompt角色及优先级
- system
系统角色,用来规定模型的总体行为、规则、语气、边界
例如:“你是一个专业的法律助手,回答时要简洁、严谨,不编造内容。” - developer(部分模型可能不支持)
开发者角色。用来设置应用级指令,定义某个应用场景下的产品规则和业务格式
优先级通常低于 system,高于 user
例如:“你是一个电商客服助手。回答时必须使用中文” - user/human
用户角色。提出具体任务
这是模型主要响应的对象
例如:“帮我写一封请假邮件。” - assistant/ai
助手角色。表示模型之前给出的回答
用于保持上下文连续性,让模型知道自己前面说过什么
例如:“当然可以,以下是一封简洁的请假邮件模板……” - tool/function
工具角色 / 函数角色。表示外部工具返回的结果,比如数据库查询、天气接口、搜索结果、代码执行结果等
模型可以根据这些结果继续生成回答
例如:“天气查询结果:北京今天多云,28℃。”
调用的顺序为:system->developer->user->assistant/user->user-..... ,一般禁止在同一次的对话中间进行system。
system,developer,user优先级。system是公司制度,developer是部门工作规范,user是个人需求。不太合适把user比做客户需求,因为工作场景中客户需求和部门工作规范冲突时,基本都是客户需求优先。
3.2、基于LangChain的Prompt模板设计
3.2.1、模板库
模板库本质上就是字典组成的列表,其中键question和answer必须和提示词模板保持一致。
person_prompt = [
{
"question": "乔治·华盛顿的外祖父是谁?",
"answer": """是否需要后续问题:是。
后续问题:乔治·华盛顿的母亲是谁?
中间答案:乔治·华盛顿的母亲是玛丽·鲍尔·华盛顿。
后续问题:玛丽·鲍尔·华盛顿的父亲是谁?
中间答案:玛丽·鲍尔·华盛顿的父亲是约瑟夫·鲍尔。
所以最终答案是:约瑟夫·鲍尔""",
},
{
"question": "巴拉克·奥巴马的父亲是谁?",
"answer": """是否需要后续问题:否。
所以最终答案是:巴拉克·奥巴马的父亲是巴拉克·侯赛因·奥巴马一世(Barack Hussein Obama Sr.),他出生于肯尼亚,曾在美国留学,后返回肯尼亚担任政府官员。""",
},
{
"question": "埃隆·马斯克的母亲是哪国人?",
"answer": """是否需要后续问题:否。
所以最终答案是:埃隆·马斯克的母亲是梅耶·马斯克(Maye Musk),她出生于加拿大,拥有加拿大国籍,同时也是一位模特和营养师。""",
},
]
3.2.2、有角色+有示例
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
from env_utils import API_KEY, BASE_URL, MODEL_NAME
from langchain_openai import ChatOpenAI
# 提示词示例模板
import Prompt_Template
# 单个示例模板(区分 human 和 ai 角色)
base_prompt_template = ChatPromptTemplate.from_messages([
("human", "{question}"),
("ai", "{answer}"),
])
# 创建 FewShot 提示词示例
few_shot_prompt = FewShotChatMessagePromptTemplate(
examples=Prompt_Template.person_prompt, # 提示词库
example_prompt=base_prompt_template, # 示例模板,key 必须和提示词库保持一致
)
# 最终模板,加入 system 角色
final_template = ChatPromptTemplate.from_messages([
("system", "你是一个专业的历史知识助手,回答要简洁准确。"), # system 角色
few_shot_prompt, # FewShot 示例插入这里
("human", "{input}"), # 用户实际问题
])
llm = ChatOpenAI(
model=MODEL_NAME,
api_key=API_KEY,
base_url=BASE_URL,
temperature=0.8
)
# 组装提示词和大模型链条
chain = final_template | llm
resp = chain.invoke({"input": "中国古代明朝的王守仁是谁?"})
print(resp)
3.2.3、有角色+无示例
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的历史知识助手,回答要简洁准确。"),
("human", "{input}"),
])
chain = prompt | llm
resp = chain.invoke({"input": "中国古代明朝的王守仁是谁?"})
3.2.4、无角色+无示例
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from env_utils import API_KEY, BASE_URL, MODEL_NAME
# 单个提示词模板(纯文本,无角色,无示例)
prompt = PromptTemplate.from_template("问题:{input}")
llm = ChatOpenAI(
model=MODEL_NAME,
api_key=API_KEY,
base_url=BASE_URL,
temperature=0.8
)
# 组装链条
chain = prompt | llm
resp = chain.invoke({"input": "中国古代明朝的王守仁是谁?"})
print(resp)
3.2.5、无角色+有示例
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
from env_utils import API_KEY, BASE_URL, MODEL_NAME
from langchain_openai import ChatOpenAI
# 提示词示例模板
import Prompt_Template
# 单个提示词模板
base_prompt_template = PromptTemplate.from_template("问题:{question}\n{answer}") #框架拿着模板里的 {question} 去字典里找 key 为 question 的值
# 创建flewshot提示词示例
final_template = FewShotPromptTemplate(
examples=Prompt_Template.person_prompt, #提示词库
example_prompt=base_prompt_template, #提示词模板,键必须和提示词库保持一致
suffix="问题:{input}", # 占位符声明,意思是"最终拼装好的提示词末尾,会在这里插入一个问题"。
input_variables=['input'] # 告诉框架:"我这个模板里有一个叫 input 的变量,你运行时等着接收它。"
)
llm = ChatOpenAI(
model=MODEL_NAME,
api_key=API_KEY,
base_url=BASE_URL,
temperature=0.8
)
# 组装提示词和大模型链条
chain = final_template | llm
resp = chain.invoke({"input": "中国古代明朝的王守仁是谁?"}) #把问题赋值给input变量传入大模型
print(resp)
整体的逻辑是:
- 链接收到输入:
input = "中国古代明朝的王守仁是谁?" - 输入被传入链的第一个环节(比如一个提示词模板),
{input}占位符被替换成实际问题 - 拼接好的完整提示词被发送给大模型(如 GPT、Claude 等)
- 模型返回回答
- 如果链后面还有处理步骤(如输出解析),继续执行
- 最终结果赋值给变量
resp
3.3、Prompt模板总结
FewShotChatMessagePromptTemplate = 有示例,ChatPromptTemplate= 有角色,PromptTemplate=无角色
具有少量示例的思想称为少样本学习,也叫ICL(In-context Learning)基于上下文学习。
3.4、MessagesPlaceholder
用于在模板中预留一个"坑",运行时动态填入一组消息。最典型的场景是多轮对话,历史消息数量不固定,无法写死。
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage, AIMessage
from langchain_openai import ChatOpenAI
from env_utils import API_KEY, BASE_URL, MODEL_NAME
# 模板中用 MessagesPlaceholder 预留历史消息的位置
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的历史知识助手,回答要简洁准确。"),
MessagesPlaceholder("chat_history"), # ← 运行时动态填入历史消息
("human", "{input}"), # ← 当前用户问题
])
llm = ChatOpenAI(
model=MODEL_NAME,
api_key=API_KEY,
base_url=BASE_URL,
temperature=0.8
)
chain = prompt | llm
# 第一次对话(无历史)
resp1 = chain.invoke({
"chat_history": [], # 没有历史消息
"input": "李白是哪个朝代的?"
})
print(resp1)
# 第二次对话(带入历史)
resp2 = chain.invoke({
"chat_history": [
HumanMessage(content="李白是哪个朝代的?"),
AIMessage(content=resp1.content), # 把上一轮的回答作为历史
],
"input": "杜甫呢?" # 模型知道上下文,知道你在问杜甫的朝代
})
print(resp2)
3.5、Prompt模板组合
from langchain_core.messages import HumanMessage
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate, ChatPromptTemplate,FewShotChatMessagePromptTemplate, MessagesPlaceholder
from env_utils import API_KEY, BASE_URL, MODEL_NAME
from langchain_openai import ChatOpenAI
# 提示词示例模板
import Prompt_Template
examples_data = [
{"input":"2&2","output":"4"},
{"input": "2&3", "output": "6"},
]
# 单个示例模板
base_template = ChatPromptTemplate.from_messages([
("human", "{input}"),
("assistant", "{output}"), #topic称为变量占位符
])
#产生示例库模板
few_shot_prompt=FewShotChatMessagePromptTemplate(
examples=examples_data, #示例库
example_prompt=base_template, #单个示例模板
)
final_template = ChatPromptTemplate.from_messages(
[
("system","你是一个智能AI机器人"),
few_shot_prompt, #示例库模板
MessagesPlaceholder("msgs")
]
)
#字符串模板组合,提示词模板可以动态组合
multi_final_template =(final_template+"要求用文字打印结果")
llm = ChatOpenAI(
model=MODEL_NAME,
api_key=API_KEY,
base_url=BASE_URL,
temperature=0.8
)
# 组装提示词和大模型链条
chain = multi_final_template | llm
resp = chain.invoke({"msgs":[HumanMessage(content="2&9")]})
print(resp)
输出解析器
模型返回的是 AIMessage 对象,输出解析器负责把它转成程序可以直接使用的格式。
结构化输出
示例选择器
partial 预填充
04_输入输出机制
Token
Context
Temperature
Structured_Output
JSON输出
Hallucination
Grounding
API / SDK
05_RAG与知识库
RAG基础
- RAG:Retrieval-Augmented Generation(检索能力增强),说的是模型回答时要不要先去检索外部知识
Embedding
向量库
Chunking
Retrieval
Hybrid_Search
Rerank
知识库实践
06_工具调用与工作流
Tool_Calling
Function_Calling
Workflow
Agent
LangChain
LangChain是一个开源大模型(LLM)应用开发框架,基本可以对接市面上所有大模型。除了常用的提示词模板接口、RAG、Agent和memory管理,此外还提供了Chian链式编排将提示词、模型、解析器等组件串联成流水线,按顺序执行任务。
提示词接口
查看代码
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
from env_utils import API_KEY, BASE_URL, MODEL_NAME
from langchain_openai import ChatOpenAI
# 提示词示例模板
import Prompt_Template
# 单个提示词模板
base_prompt_template = PromptTemplate.from_template("问题:{question}\n{answer}")
# 创建flewshot提示词示例
final_template = FewShotPromptTemplate(
examples=Prompt_Template.chat_prompt, #提示词例子,列表形式
example_prompt=base_prompt_template,
suffix="问题:{input}", # 问题模板的提示词前缀
input_variables=['input'] # 指定输入变量,告诉大模型有一个名字叫input的变量需要识别
)
llm = ChatOpenAI(
model=MODEL_NAME,
api_key=API_KEY,
base_url=BASE_URL,
temperature=0.8
)
# 组装提示词和大模型链条
chain = final_template | llm
resp = chain.invoke({"input": "中国古代明朝的王守仁是谁?"})
print(resp)
Agent
Chain式编排
Memory管理
模板标准化
Jira等系统接入
07_部署与工程化
本地部署_vs_云端调用
框架基础
如果把deepseek等大模型比作电影,软件平台就是播放大模型的放映设备。
个人端:
- Ollama:本地模型运行/管理工具与服务平台
- LM Studio:本地模型桌面应用/运行平台
企业端:
- vLLM:大模型推理引擎/服务框架。高效加载模型,高吞吐推理,对外提供接口。
-
SGLang:推理/服务编排框架,面向 LLM 程序组织、推理优化、复杂工作流
Ollama
LM_Studio
vLLM
Transformers
SGLang
LMDeploy
DeepSpeed
并发_吞吐_延迟
08_评估与成本
Evaluation
RAG评估
延迟
吞吐
成本
缓存
09_安全与治理
数据安全
权限控制
审计日志
合规治理
10_模型选择及微调
部分模型不支持Function Calling和json output,都是通过投喂大量高质量数据学习来的能力,比如deepseek-V3,但是R1版本是支持的。
本文来自博客园,作者:{张一默},转载请注明原文链接:https://www.cnblogs.com/YiMo9929/p/21894924

浙公网安备 33010602011771号