File tree Expand file tree Collapse file tree 4 files changed +110
-29
lines changed
Expand file tree Collapse file tree 4 files changed +110
-29
lines changed Original file line number Diff line number Diff line change 77## 底层结构
88``` go
99type hchan struct {
10- // chan 里元素数量
11- qcount uint
12- // chan 底层循环数组的长度
13- dataqsiz uint
14- // 指向底层循环数组的指针
15- // 只针对有缓冲的 channel
16- buf unsafe.Pointer
17- // chan 中元素大小
18- elemsize uint16
19- // chan 是否被关闭的标志
20- closed uint32
21- // chan 中元素类型
22- elemtype *_type // element type
23- // 已发送元素在循环数组中的索引
24- sendx uint // send index
25- // 已接收元素在循环数组中的索引
26- recvx uint // receive index
27- // 等待接收的 goroutine 队列
28- recvq waitq // list of recv waiters
29- // 等待发送的 goroutine 队列
30- sendq waitq // list of send waiters
31- // 保护 hchan 中所有字段
32- lock mutex
10+ qcount uint // 当前队列中元素数量
11+ dataqsiz uint // 缓冲区大小(容量)
12+ buf unsafe.Pointer // 指向环形缓冲区的指针
13+ elemsize uint16 // 元素类型大小
14+ closed uint32 // 关闭标记(0-未关闭,1-已关闭)
15+ sendx uint // 发送索引(缓冲区位置)
16+ recvx uint // 接收索引(缓冲区位置)
17+ recvq waitq // 接收等待队列(sudog 链表)
18+ sendq waitq // 发送等待队列(sudog 链表)
19+ lock mutex // 互斥锁(保护并发操作)
3320}
3421```
3522
23+ # 发送与接收流程
24+
25+ ## 加锁
26+ - 操作前获取 ` hchan.lock ` 互斥锁。
27+
28+ ## 快速路径
29+ - ** 发送** :缓冲区未满时直接写入 ` buf ` ,更新索引。
30+ - ** 接收** :缓冲区非空时直接读取 ` buf ` ,更新索引。
31+
32+ ## 阻塞路径
33+ - ** 发送阻塞** :缓冲区满时,Goroutine 封装为 ` sudog ` 加入 ` sendq ` 队列,并进入等待状态。
34+ - ** 接收阻塞** :缓冲区空时,Goroutine 封装为 ` sudog ` 加入 ` recvq ` 队列,并进入等待状态。
35+
36+ ## 唤醒机制
37+ - 当对端操作完成(如接收方读取数据),检查等待队列并唤醒对应的 Goroutine。
38+
39+ ---
40+
41+ ## 关闭
42+
43+ ## 关闭标记
44+ - 设置 ` hchan.closed = 1 ` 。
45+
46+ ## 唤醒所有等待的 Goroutine
47+ - ** 接收方** 被唤醒后读取剩余数据,后续返回零值和 ` false ` 。
48+ - ** 发送方** 被唤醒后触发 panic(向已关闭 Channel 发送数据)。
49+
3650#### 通道死锁
3751
3852- 当无缓存通道,不具备同时写入和读取就绪的情况下,写入数据或者读取数据
3953- 全部取出的管道,再取会出现死锁
4054- 已经塞满的管道,在塞也会死锁
55+ - 重复关闭
Original file line number Diff line number Diff line change @@ -6,18 +6,18 @@ iface 和 eface 都是 Go 中描述接口的底层结构体,区别在于 iface
66## iface
77``` go
88type iface struct {
9- tab *itab
10- data unsafe.Pointer
9+ tab *itab // 接口类型和方法表
10+ data unsafe.Pointer // 指向实际数据的指针
1111}
1212type itab struct {
13- inter *interfacetype
14- _type *_type
13+ inter *interfacetype // 接口的类型信息
14+ _type *_type // 动态类型(具体类型的元信息)
1515 link *itab
16- hash uint32 // copy of _type.hash. Used for type switches.
16+ hash uint32 // 类型哈希值(用于类型断言)
1717 bad bool // type does not implement interface
1818 inhash bool // has this itab been added to hash?
1919 unused [2 ]byte
20- fun [1 ]uintptr // variable sized
20+ fun [1 ]uintptr // 方法地址数组(动态派发入口)
2121}
2222```
2323- iface包含两个字段:tab 是接口表指针,指向类型信息;data 是数据指针,则指向具体的数据。它们分别被称为动态类型和动态值。而接口值包括动态类型和动态值。
Original file line number Diff line number Diff line change 1+ # 医疗AI
2+
3+ ## 如何基于大模型构建一个医疗AI
4+ - 医学知识库构建
5+ - 大模型训练与微调
6+ - 基座模型选择:
7+ - 中文场景:DeepSeek-67B(医疗语料增强版)
8+ - 英文场景:PubMedGPT 或 BioMedLM
9+ - 训练策略:
10+ - DAPT:领域自适应预训练
11+ - SFT:监督微调
12+ - 诊断推理引擎
13+ - 多阶段推理:
14+ - 症状编码:将患者主诉映射到SNOMED CT标准术语
15+ - 贝叶斯网络:计算疾病先验概率(基于流行病学数据)
16+ - 大模型推理:生成鉴别诊断列表
17+ - 决策验证:对比UpToDate最新指南
18+ - 置信度控制:
19+ - <0.8:建议做什么检查。
20+ ``` mermaid
21+ graph TD
22+ A[患者输入] --> B(症状解析模块)
23+ B --> C{是否需要追问}
24+ C -->|是| D[智能追问引擎]
25+ C -->|否| E(医学知识检索)
26+ E --> F[诊断推理引擎]
27+ F --> G[鉴别诊断生成]
28+ G --> H[输出诊断建议]
29+ H --> I[风险预警与转诊建议]
30+ ```
31+
32+ ## 问诊系统步骤
33+ 1 . 症状解析
34+ 2 . 动态追问
35+ 3 . 检索增强
36+ 4 . 生成诊断
37+ 5 . 输出格式化
38+ - 安全护栏
39+
40+ ## 本地知识库
41+
42+ - [ ragflow] ( https://github.com/infiniflow/ragflow )
43+
44+ RAG(检索增强生成)引擎。它的作用是可以让用户创建自有知识库,根据设定的参数对知识库中的文件进行切块处理,用户向大模型提问时,RAGFlow先查找自有知识库中的切块内容,接着把查找到的知识库数据输入到对话大模型中再生成答案输出。
45+
46+
47+ ## Agent
48+ 传统大模型像“百科全书式学者”,只能根据输入生成文本;而 Agent 更像“具备执行能力的助手”,能拆解任务、调用工具(如搜索、计算、写代码)并迭代优化结果。
49+ - 关键能力:
50+ - 任务分解:将复杂问题拆解为可执行的子任务(如“订机票→查天气→推荐行李”)。
51+ - 工具调用:使用外部 API、数据库、代码解释器等扩展能力边界。
52+ - 记忆与反思:保留历史交互记录,通过自我纠错提升表现。
53+ - 代表框架与工具:
54+ - AutoGPT:开源自主 Agent,可联网搜索、读写文件、持续迭代任务。
55+ - LangChain Agent:支持自定义工具链(如 Wikipedia + Python REPL)。
56+ - MetaGPT:多角色协作 Agent,模拟软件公司工作流程(产品经理→工程师→测试员)。
57+ - OpenAI API Function Calling:通过函数描述让模型自主选择调用工具。
58+
59+ ## ui
60+ -[ open-webui] ( https://github.com/open-webui/open-webui/pkgs/container/open-webui )
Original file line number Diff line number Diff line change 1+ # 模型蒸馏
2+
3+ ## 方式
4+ - 数据蒸馏:大模型(老师)生成Q&A,来SFT小模型。
5+ - Logits蒸馏:学生模型被训练以模仿教师的 logits,而不仅仅是其最终预测结果,从而保留了教师模型更多的信息。
6+ - 特征蒸馏:蒸馏教师模型的中间层。
You can’t perform that action at this time.
0 commit comments