BeginAI Learn Data Day 0
最近一直在学 AI 全栈开发。关于全栈,略懂一二;关于 AI,则完全是个新手。 说到底我还没学完全栈,后端的内容比如 Redis 根本没学,只知道是个什么东西,教学视频太长看不下去。然后转到 AI 这边,或许因为是新方向的缘故,网上连一篇成体系的 AI 教程都很难找到。只能自己硬着头皮,一点一点地学。
说回正题,既然找不到成体系的教程,那我就自己写一写,作为学习记录。
这里我们采用自顶而下的学习方式。
原帖地址:https://www.cnblogs.com/Reisentyan/p/20312914
需要学习的东西
使用 AI,相信大部分人都会,毕竟是每天都在用的工具。但要把它融入开发,就我目前的进度,大概需要学习如下内容。
- AI 对话的原理
- AI 工作流平台(如 Dify)
- Skill(技能调用)
- MCP(模型上下文协议)
- RAG(检索增强生成)
- AI 进阶工作流(如 LangGraph)
更多的我就没学了
| 核心模块 | 核心作用 / 原理解释 |
|---|---|
| 对话原理 | 你必须知道一次 AI 对话底层究竟发生了什么(上下文机制与 Token 消耗)。 |
| 工作流平台 | 用于可视化编排工作流,限制 AI 的自由发挥,让其按预定逻辑产出。 |
| Skill | 赋予大模型调用外部单一工具(如代码计算、查天气)的能力。 |
| MCP | 提供全局标准化的外部能力接入协议,让 AI 深入操作系统或企业级私有系统进行复杂交互。 |
| RAG | 外挂知识库,通过向量检索让 AI 基于海量私有数据进行精准回答,避免幻觉并降低 Token 成本。 |
| LangGraph | 构建复杂的、支持多智能体协作与循环图状逻辑的底层代码框架。 |
学习这些内容需要扎实的编程基础。就拿 Skill 来说,你必须熟悉 Python,否则连环境都配不好;用 MCP,你需要懂网络通信、至少得有一台云服务器,还得会点 Linux 运维;用 RAG,更少不了数据结构、数据库(如 PostgreSQL)和 Docker 容器化部署的知识。
ai全栈的门槛很高,当然,使用Agent可以完成你的目标。但是这完全没有意义。Agent又不可能替你坐牢,出事之后自负后果。
以上。希望大家学习ai全栈开发之前,先学全栈。
对话的原理
一次对话的原理其实很简单:把文本信息发给模型,然后模型返回文本数据。
但大模型本身是没有记忆的,为了让它"记住"之前的聊天内容,唯一的解决办法就是:把历史对话记录打包,连同新问题一起发过去。 这听起来好像有点傻逼,但极其有效,目前也基本只有这一种主流做法。
这样,引出一个问题,token 消耗会很大。我们的目标是又快又好又便宜 ,于是,优化是必要的。
ai工作流平台
为什么我用 Dify?因为我目前只会用 Dify(笑)。这个平台得用**,并且前端写的很垃圾。
不过是免费的,而且很好用,于是推荐这个了。
你需要有某个模型的api,这里推荐dpsk,因为便宜好用还快。
新手挑战:尝试自己做一个"思考型"工作流。
- 获取用户输入。
- 并行调用两次大模型,给出两种不同的解决方案。
- 将两种方案汇总给第三个大模型节点,让它分析利弊并得出最优解。
- 将最终结果输出给用户。
写完这个流程,你就会深刻理解:最好的工作流,就是通过限制和拆解任务,让 AI 在每个节点只做最擅长的小事,从而达到"又快又好又便宜"的目标。
skill
让模型调用工具。使用Python,因为又简单又方便。
Skill 的本质: 它是一种高内聚、强耦合的轻量级扩展。我们将外部服务的 API 封装好,告诉大模型:"我这里有个计算器,你需要的时候告诉我"。
这里给出一段基本的调用代码:
py
import json
import math
from openai import OpenAI
# ================= 1. 定义本地 Skill =================
def calculate_gcd(a: int, b: int) -> int:
"""这是我们本地的 Skill,用于计算最大公约数"""
return math.gcd(a, b)
# ================= 2. 配置 DeepSeek =================
client = OpenAI(
api_key="sk-5426a5dbb29e4a6a888c5966c1f4208c", # 【请在这里填入你的API KEY】
base_url="https://api.deepseek.com" # DeepSeek的官方接口
)
# ================= 3. 告诉模型有这个 Skill =================
# 这是标准的 JSON Schema 格式,用来向 AI 描述工具长什么样
tools = [{
"type": "function",
"function": {
"name": "calculate_gcd",
"description": "计算两个整数的最大公约数 (GCD)",
"parameters": {
"type": "object",
"properties": {
"a": {"type": "integer", "description": "第一个整数"},
"b": {"type": "integer", "description": "第二个整数"}
},
"required": ["a", "b"]
}
}
}]
# ================= 4. 开始演示流程 =================
print("🧑 用户提问: 帮我算一下 11451400000 和 191981000000 的最大公约数是多少?\n")
# 把问题发给 DeepSeek,并附带工具列表
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "帮我算一下 11451400000 和 191981000000 的最大公约数是多少?"}],
tools=tools
)
# 获取 DeepSeek 的回复
message = response.choices[0].message
# 判断 AI 是否决定调用工具 (Skill)
if message.tool_calls:
tool_call = message.tool_calls[0]
# AI 告诉我们需要调用的函数名和解析出的参数
func_name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
print(f"🤖 AI 决定调用 Skill: {func_name}")
print(f"📥 AI 自动提取的参数: a={args['a']}, b={args['b']}")
# 触发真正的本地函数
if func_name == "calculate_gcd":
result = calculate_gcd(args['a'], args['b'])
print(f"✅ 本地 Skill 执行完毕,最终 GCD 结果为: {result}")
else:
print("🤖 AI 没有调用 Skill,直接回答了:", message.content)
模型具有逻辑判断能力,它能根据用户输入的内容,自行决定提取参数并调用你写好的函数。
如果不用skill。那你只能让模型给你算一卦了。
有了工具库,当本地代码计算出准确结果后,模型就能把这个精确的数字包装在自然语言里反馈给用户。
MCP
MCP(Model Context Protocol)和 Skill 有着本质的系统级差异。
- Skill 就像是为你当前写的代码专门定制的非标准零件,直接嵌入在当前环境里。
- MCP 则是行业标准的通用底层协议(C/S 架构)。
它的工作原理是这样的:AI 会获取 MCP 服务器 上的可用技能列表 ,并将它们放进当前对话上下文 中。当模型需要时,就会自主发起调用 。这种方式下,诸如递归调用 或图状调用 等复杂操作会开启新的通信流程 ,虽然会消耗更多的 Token,但它能完成极度复杂的系统级任务,扩展性和自由度远超简单的 Skill。
这里同样展示一段最基本的mcp服务器代码:
py
import math
from mcp.server.fastmcp import FastMCP
# 1. 创建 MCP 服务器实例
mcp = FastMCP("GCD_Server")
# 2. 使用 @mcp.tool() 装饰器将函数注册为大模型可调用的工具
@mcp.tool()
def calculate_gcd(a: int, b: int) -> int:
"""计算并返回两个整数的最大公约数 (GCD)"""
return math.gcd(a, b)
# 3. 启动服务器,通过标准输入输出 (stdio) 与 AI 客户端通信
if __name__ == "__main__":
mcp.run()
服务器启动之后,只需让大模型客户端连接这个服务即可。至于更加具体的,我也不会。
因为我也是初学者
RAG
RAG 不是一个东西
RAG 的全称是「Retrieval-Augmented Generation」,翻译过来就是 「检索增强生成」
试想一个场景:公司里有一份 10GB 大小的内部文档,每天有 100 万次的查询需求。你不可能精准记住所需资料的具体位置,只能进行"模糊查询",这时候向量数据库 就该出手了。
它的核心依赖于 Embedding(嵌入)模型 。Embedding 模型能将一段文本转化为一串高维向量,然后在向量数据库中计算向量间的距离,从而找到语义最相似的文本片段。这就实现了真正意义上的"模糊查找"。
至于嵌入模型是怎样把文本转换为高维向量,您可能需要先学习深度学习
如果你已经学过深度学习了,那么肯定就不用教就能看懂了。
为什么要用这个东西?直接把文档喂给聊天大模型,让聊天大模型自己去找不就好了吗?
这样很方便,但是代价就是:10GB 的文档,一天查询 100 万次,意味着每天要消耗上千 T 的 Token,您的老板一分钟就倒闭了。
通过向量数据库,我们可以精准截取最相关的几段文本喂给模型,从而极大节约成本。
这里讲述如何进行一次基础的检索。
- 准备一个嵌入模型。
- 部署一个向量数据库(例如 PostgreSQL 的 pgvector 插件)。
- 准备数据集(比如 wiki-cn 数据集就不错)。
- 切分:编写代码将长文档切分成合适大小的文本块。
- 向量化:将这些文本块通过嵌入模型转化为向量。
- 入库:把向量及对应的原文写入向量数据库。
- 检索与生成:当用户输入查询(如"什么是民族?"),先把用户的提问也向量化,在数据库中查询距离最接近的文本片段,最后交给大模型总结输出给用户。
这就是最基本的流程。看似简单,但实际落地时有无数个可以优化的地方等待你去发掘。
LangGraph
目前还没深入学,大概知道它类似于 Dify,但属于纯代码层面的进阶工作流框架,能提供远超可视化界面的定制化能力。
至于更多
由于没学,这里请 AI 帮我补充
RAG 的进阶优化方向
要真正落地一个工业级的 RAG 系统,业界通常会关注以下几大痛点与优化手段:
- RAG 七层架构:摄入(Ingestion) → 解析(Parsing) → 切片(Chunking) → 索引(Indexing) → 检索(Retrieval) → 精排(Reranking) → 生成(Generation)。每个环节都可能成为系统瓶颈。
- 切片三剑客:掌握语义切片、父子切片(Parent-Child Chunking)、命题切片,这比简单的按字数切分效果好得多。
- 混合检索与改写:单一的向量检索容易遗漏关键词,使用「向量 + BM25(词频检索)」的混合检索,配合 Query 改写技术,能让召回率提升 50% 以上。
- 精排 (Rerank):这是性价比最高的优化手段。召回粗略结果后,用专用模型重新打分排序,准确率能轻松提升 10%-20%。
- 评估驱动:构建系统必须看重 4 个核心指标,并经常进行消融实验(Ablation Study)来验证每一步优化的实际效果。
深度剖析:Skill 与 MCP 的架构差异
在大语言模型能力扩展的架构体系中,技能(Skill) 与**模型上下文协议(MCP)**均扮演着核心角色。虽然两者都建立在"函数调用"机制之上,旨在打破模型预训练数据的静态壁垒,但它们在系统架构和生态通用性上存在根本差异:
- 定位与耦合度:
- 可移植性与复用:
- 执行环境与核心安全边界:
总结:Skill 是连接应用与公共互联网的便捷桥梁,而 MCP 则是大模型迈向"自主智能体 (Agent)"、实现与物理环境及复杂私有系统深度交互的底层基础设施规范。根据业务场景的安全敏感度与调用深度,开发者可在两者之间做出最符合工程效益的战略选择。