目录
[创建AI + Web3 学习仓库](#创建AI + Web3 学习仓库)
先有本地项目
先有远程仓库
[LLM 基础概念](#LLM 基础概念)
[🎯 核心问题](#🎯 核心问题)
[✅ 今天学到的关键理解](#✅ 今天学到的关键理解)
[1. LLM 的运作机制](#1. LLM 的运作机制)
[2. Control Layers 层级体系](#2. Control Layers 层级体系)
[3. Tokenizer 分词机制](#3. Tokenizer 分词机制)
[4. Multimodal 现状](#4. Multimodal 现状)
[5. Hallucination 幻觉的本质](#5. Hallucination 幻觉的本质)
[6. Schema Validation 校验机制](#6. Schema Validation 校验机制)
初学问题
[learning agent答案](#learning agent答案)
第一个问题
第二个问题
第三个问题
第四个问题
第五个问题
第六个问题
额外提升
前言
经过第一天的learning agent部署,以及当晚的co-learning,我了解到许多新颖的知识,并且我认识到我所部署的hermes只是初级阶段,还能进一步提升,我决心加快基础学习,尽快享受其高阶玩法!
今天主要是根据learning agent提示的学习仓库创建(锻炼git的操作流程)、并加以整理,以及AI基础的LLM和Prompt
创建AI + Web3 学习仓库
此步骤不再过多赘述,只记录几点新知识:
- License和.gitignore部分的作用
- 以及github远程仓库的操作能由终端直接完全代替(这是高阶玩法)
git两种工作流
理解并掌握这两种方式,几乎可以应对大部分场景了!!!
先有本地项目
创建项目文件夹
- 初始化仓库 git init
- 连接远程仓库 git remote add origin <repository_url>
- 切换并命名分支 git branch -M main
- 添加提交文件 git add .(作用只限于当前目录,这个可以涵盖整个仓库的改变git add -A)
- 提交说明 git commit -m ‘Your commit message here!’
- 首次推送 git push -u origin main(后面只需要 git push)
先有远程仓库
流程:远程 → 下载到本地 → 修改 → 推送
git clone 仓库地址
# 后续就是同样的操作了
git add .
git commit -m "说明"
git push
LLM 基础概念
LLM = Large Language Model (大语言模型)
🎯 核心问题
核心问题、今天学到的关键理解是由我的learning agent总结的(非常全面)
LLM 的本质是什么?它能做什么?不能做什么?
✅ 今天学到的关键理解
1. LLM 的运作机制
- 不是”理解意图”,而是”概率性续写”
- Token 序列预测下一个 Token,重复直到结束
- Context Window = 工作内存(Qwen3.5 = 128K tokens)
- Temperature = 随机性控制杆(0=确定,1+发散)
2. Control Layers 层级体系
- Prompt:人类全控,适合一次性问答
- Workflow:预定义流程,中间可插人工审核
- Agent:模型自主决策,需要人类验证输出
3. Tokenizer 分词机制
- 不是按输入顺序编号,是预训练的词表
- 中文常见字 ≈ 1 token,生僻字可能切更细
- 代码/JSON/长标识符吃 token 是因为未针对编程优化
- 词汇表约 50k-100k 项
4. Multimodal 现状
- 早期:多模态输入被编码成文本代理
- 现在:原生多模态模型(像素/音波直接进入统一空间)
- 本质不变:最终都是 Token 序列,预测下一个 Token
5. Hallucination 幻觉的本质
- 不是道德欺骗,是训练目标 ≠ 追求真相
- 必须输出一个答案时选最可能的模式
- 解决方案:显式降级(承认不知道)
6. Schema Validation 校验机制
- JSON Schema / Pydantic 校验结构
- Function Calling 参数合法性检查
- 不校验直接运行 = 高风险!
初学问题是第一遍都文档学习所疑惑的地方;
初学问题
我认为应该记忆的内容,不过我目前大脑比较混乱疲惫,故留下后续记忆。我觉得LLM的概念非常好,但我更好奇是如何实现的,把超多的文本、代码等数据和多模态信号压进概率模型,听起来像是把一个个相似的东西在一条线上放置,看谁离这条线近。我也不确定我的理解对不对。
- 模型负责理解用户意图,还是生成内容?它只是在回答问题,还是能调用工具?它的错误会停留在文本里,还是会进入真实工作流?
- 把输出变成可检查对象
- 把不确定性前移暴露中:让系统显式降级
- 什么是tokenizer(分词器)?
- 代码、JSON、长标识符、表格和混合语言文本经常比普通段落更吃 token是因为模型参数问题吗?
- Multimodal其实还是依据文本内容进行分析的吗?(各种形式的输入)
learning agent答案
看到其回答,我是彻底接受了LLM是概率模型,不是事实!!!
第一个问题
模型负责理解用户意图,还是生成内容?它只是在回答问题,还是能调用工具?它的错误会停留在文本里,还是会进入真实工作流?
我一开始有疑惑,是因为我停留在LLM是概率模型的问题中,并未认识到有数据层、编排层、执行层、安全层。
总之一个公式解释LLM的本质:
给定已有序列(上下文窗口里的所有 Token) → 预测下一个最可能的 Token → 把新 Token 拼到序列末尾 → 重复直到结束
Hermes提到:其既不”理解意图”,也不”生成内容”——它只是在做概率性的序列续写。
其中让我真的接受其是概率模型的是它给出的一个例子:
打个比方:
你以为它在:
"用户想了解 Token → 我理解了这个需求 → 我解释 Token"
实际上它在:
"用户说了'什么是Token' → 我最常接的模式是解释 Token 的文章开头 →
输出 'Token是模型的最小文本单位...' → 接下来最可能接什么..."
最常接的模式???什么是最常接? 不应该是最直接嘛!!!
而且对于真实工作流,我联想到day 1 的co-learning中老师提到的一些安全问题,恰如模型调用工具时输出的参数错误,未成功校验便被当作参数传入工具,传回的数据必然不可信,再进入真实工作流必然会出现安全问题。
第二个问题
把输出变成可检查对象
首先我对于可检查/校验是十分清楚的,我疑惑的地方是:模型输出如何去校验?像JS中数据类型给schema校验?
Hermes给出的解释是举例:
不好的用法: 好的用法:
"帮我解释Token" "帮我解释 Token,输出 JSON 格式:
→ 自然语言段落展示 {concept: "...", mechanism: "...",
✓ 但不可检查 analogy: "..."}
→ 可以程序化检查每个字段是否合理"
确实,按照概率模型来讲没办法保真,只是靠近更接近,输出又不是一对一定义格式的让你校验!
疑问终结:说对了,还真就是1v1定义格式校验,只不过分的更大,规格更多。不过我对此保持观望,因为模型最后的校验必须包含很多安全问题。
第三个问题
把不确定性前移暴露中:让系统显式降级
这个问题能解决,只不过有一些特殊的疑惑,先看Hermes给出的答案:
# 伪代码
def agent_respond(query):
confidence = model.evaluate_confidence(query)
if confidence > 0.9:
return model.generate_answer(query)
elif confidence > 0.5:
return model.generate_answer(query) + "\n⚠️ 建议验证以下来源..."
else:
return "我不确定这个问题,建议你参考官方文档..."
首先我能理解,就是看概率模型参数了,概率高就是你了,概率低自然而然是可信度更低的数据,直接强制输出后三行类似即可!
但是我的特殊疑惑:
- 如果没有显式降级,为什么模型会给出虚假、甚至欺骗的回答(或者说输出参数)?
疑问终结:模型问题,因为用户输入必须要回应,如果没有相关的数据,也会按照最接近的数据输出,导 致出现错误,犯错多了,总结最后发现是其出现类似幻觉/欺骗,并不是真的幻觉/欺骗!
- 难道模型参数概率低到一定程度必然会出现这种情况?(想必是设定了)
疑问终结:概率模型,要深刻理解其本质(输出必须相关,没有最最低,只有最高,即便是0.0001%)
第四个问题
什么是tokenizer(分词器)?(主要是为了理解什么是token)
显而易见,就是把输入参数分开。
Hermes的答案:
原始文本:"我是一个AI助手"
↓
Tokenizer(分词器)
↓
Token序列:[我] [是] [一] [个] [AI] [助] [手]
(3 tokens) (2 tokens) (2 tokens)
↓
每个 Token 对应一个数字 ID
↓
模型看到的是:[1123] [4567] [8901] [2345] [6789] [9876] [5432]
这一点我能理解,但是最后一行,如何排列?还是一定参数模型先排列吗?从第一个输入参数到最后一个输入参数,依次分配数字ID吗?
疑问终结:不是如何排列、也不是依次分配ID;要明白其是概率模型,即已经设定好了 “词表” ,输入数据会被tokenizer切分后自动按照对应 “词表” 相应数字ID,然后再去进行选择!
第五个问题
代码、JSON、长标识符、表格和混合语言文本经常比普通段落更吃 token是因为模型参数问题吗?
Hermes答案:
因为代码里有大量的标识符、特殊符号、空格缩进,Tokenizer 没有为这些优化,所以它们比自然语言”密”很多。
模型上下文窗口 = 128K tokens
自然语言 = 可以放 ~10 万字的书
代码 = 可能只能放几千行
混合语言 = 中间地带
所以这就是为什么大家疯狂使用编程模型消耗token大的原因了(0.0怪不得要花这么多钱才能体会更高的代码体验)
依旧又产生新的疑问:为什么不对编程方面进行调整,譬如说:自然语言先行处理,输出的参数直接校验转换提供给实际编程模型,再对编程模型进行tokenizer优化,那岂不是0.0(而且开源代码这么多,你懂的(~ ̄▽ ̄)~)
疑惑终结:
- Tokenizer 对编程语言的优化不足?→ Code-specific Tokenizer 已有项目尝试
- 为什么不分离自然语言和编程处理?→ Plan-Execute 架构正在探索中
第六个问题
Multimodal其实还是依据文本内容进行分析的吗?(各种形式的输入)
这个问题我彻底明白了
无论是文本还是图片、视频等,从自然语言、代码等到图片视频类的编码,不再是单一的参数比对输出。
Qwen3.5 / GPT-4o 等模型:
┌──────────────────────┐
│ 文本 Token → 统一 │
│ 图片 Token → 编码空间 │
│ 语音 Token → │
└──────────────────────┘
↓
放在一起做自回归预测
模型真正在看"像素"和"音波"了
额外提升
这里给出一个额外问题和答案:
问:模型怎么实现的?
答:(新词:表征学习)
是一个几百到几千维的"超大空间"
每个概念(Token、词、句子)在这个空间里有一个位置
相似的概念距离近: "猫" 🐱 ──── "狗" 🐶 (近)
不相似的概念距离远: "猫" ────────────────── "量子力学" (远)
"国王 - 男人 + 女人 ≈ 女王" 这个经典例子就是空间向量运算
结语
LLM 生成的是概率上合理的输出,而不是天然可信的事实。(这句话真棒!!!)
📝 LLM收获汇总
- ✅ 模型不关心真假,只是预测下一个 token
- ✅ 显式降级是为了让模型承认”我不知道”而不是瞎编
- ✅ Tokenizer 是预训练的词表,不是按输入顺序编号
- ✅ 代码吃 token 多是因为没有为代码优化的 Tokenizer
- ✅ 解决方案已经存在(Code-specific Tokenizer、Plan-Execute 架构)
- ✅ 校验靠 Schema(JSON Schema、Pydantic 等)