Fork me on GitHub

Large Language Model

01_基础认知

1.1、术语及概念链接

大模型术语速查表 | LLMGuide

大模型相关概念 | 菜鸟教程

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、模板库

模板库本质上就是字典组成的列表,其中键questionanswer必须和提示词模板保持一致。

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)

整体的逻辑是:

  1. 链接收到输入:input = "中国古代明朝的王守仁是谁?"
  2. 输入被传入链的第一个环节(比如一个提示词模板),{input} 占位符被替换成实际问题
  3. 拼接好的完整提示词被发送给大模型(如 GPT、Claude 等)
  4. 模型返回回答
  5. 如果链后面还有处理步骤(如输出解析),继续执行
  6. 最终结果赋值给变量 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版本是支持的。

posted @ 2026-07-28 22:14  张一默  阅读(14)  评论(0)    收藏  举报