c677393d08
Deploy Wiki to Production / deploy (push) Has been cancelled
- 银行业Agent建设方案/报告/ 4 篇:建设方案 · 智能中台 · 意图识别 · 合规风险 - 研发型企业AI转型方案/报告/ 9 篇:角色矩阵(交互版) · 培训1-6课 · 角色矩阵 · 实操培训 · 培训路线图 - AI Agent 驾驭工程/报告/ 1 篇:Harness Engineering 全面解析 - 简历AI技术讲解.html + .md - Dify部署分析报告.html
522 lines
28 KiB
HTML
522 lines
28 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>简历 AI 技术讲解 — Agent · Skills · RAG · AI Coding</title>
|
||
<style>
|
||
:root {
|
||
--color-primary: #0078D4; --color-primary-hover: #106EBE; --color-primary-active: #005A9E; --color-primary-bg: #DEECF9;
|
||
--color-success: #107C10; --color-success-bg: #DFF6DD; --color-success-border: #A7E3A1;
|
||
--color-warning: #FF8C00; --color-warning-bg: #FFF4CE; --color-warning-border: #FFD335;
|
||
--color-error: #FF4D4F; --color-error-bg: #FDE7E9; --color-error-border: #EEACB2;
|
||
--bg: #FAF9F8; --bg-container: #FFFFFF; --bg-elevated: #F3F2F1;
|
||
--border: #E1DFDD; --border-light: #EDEBE9;
|
||
--text-primary: #201F1E; --text-secondary: #605E5C; --text-tertiary: #8A8886;
|
||
--radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
|
||
--shadow-sm: 0 0 2px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.14);
|
||
--shadow-md: 0 0 2px rgba(0,0,0,0.12), 0 2px 4px rgba(0,0,0,0.14);
|
||
--header-h: 64px; --sidebar-w: 260px;
|
||
}
|
||
*{margin:0;padding:0;box-sizing:border-box;}
|
||
body{font-family:'Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,BlinkMacSystemFont,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.57;font-size:14px;}
|
||
::-webkit-scrollbar{width:6px;height:6px;}
|
||
::-webkit-scrollbar-track{background:transparent;}
|
||
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
|
||
|
||
/* ===== Header ===== */
|
||
.header{position:fixed;top:0;left:0;right:0;height:var(--header-h);background:rgba(255,255,255,0.85);backdrop-filter:blur(24px) saturate(125%);border-bottom:1px solid var(--border-light);display:flex;align-items:center;padding:0 2rem;z-index:100;}
|
||
.header .menu-btn{width:36px;height:36px;border:none;background:none;cursor:pointer;border-radius:var(--radius-sm);display:none;align-items:center;justify-content:center;flex-shrink:0;padding:0;color:var(--text-secondary);margin-right:8px;}
|
||
.header .menu-btn:hover{background:var(--bg-elevated);}
|
||
.header .menu-btn svg{width:20px;height:20px;}
|
||
.header .back-link{margin-right:16px;font-size:13px;color:var(--color-primary);text-decoration:none;flex-shrink:0;}
|
||
.header .back-link:hover{text-decoration:underline;}
|
||
.header h1{font-size:18px;font-weight:700;background:linear-gradient(135deg,#0078D4 0%,#2B88D8 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;}
|
||
|
||
/* ===== Sidebar ===== */
|
||
.sidebar{position:fixed;top:var(--header-h);left:0;bottom:0;width:var(--sidebar-w);background:var(--bg-container);border-right:1px solid var(--border);overflow-y:auto;padding:1.25rem 0;z-index:90;}
|
||
.sidebar .toc-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-tertiary);padding:0 1.25rem;margin-bottom:.75rem;font-weight:600;}
|
||
.sidebar nav a{display:block;padding:.45rem 1.25rem;color:var(--text-secondary);text-decoration:none;font-size:13px;line-height:1.4;border-left:2px solid transparent;transition:all .15s;}
|
||
.sidebar nav a:hover,.sidebar nav a.active{color:var(--color-primary);background:var(--color-primary-bg);}
|
||
.sidebar nav a.active{border-left-color:var(--color-primary);font-weight:600;}
|
||
|
||
/* ===== Sidebar overlay (mobile) ===== */
|
||
.sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.3);z-index:85;}
|
||
|
||
/* ===== Main ===== */
|
||
.main{margin-left:var(--sidebar-w);margin-top:var(--header-h);padding:32px 40px 64px;max-width:1100px;}
|
||
|
||
h2{font-size:22px;line-height:30px;padding-bottom:8px;border-bottom:1px solid var(--border);margin:40px 0 20px;color:var(--color-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
|
||
h3{font-size:18px;line-height:26px;margin:28px 0 12px;color:var(--text-primary);scroll-margin-top:calc(var(--header-h) + 1rem);}
|
||
h4{font-size:15px;line-height:22px;margin:20px 0 8px;color:var(--text-secondary);font-weight:600;}
|
||
|
||
p{margin:8px 0 16px;color:var(--text-secondary);}
|
||
strong{color:var(--text-primary);}
|
||
|
||
blockquote{background:var(--color-primary-bg);border-left:4px solid var(--color-primary);margin:16px 0;padding:12px 20px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:14px;color:var(--text-primary);}
|
||
|
||
.table-wrap{overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:var(--radius-md);}
|
||
table{width:100%;border-collapse:collapse;font-size:13px;}
|
||
th,td{padding:10px 14px;border:1px solid var(--border);text-align:left;vertical-align:top;line-height:1.5;}
|
||
th{background:var(--bg-elevated);font-weight:700;color:var(--text-primary);white-space:nowrap;font-size:12px;}
|
||
td{background:var(--bg-container);color:var(--text-secondary);}
|
||
|
||
ul,ol{margin:8px 0 16px 20px;color:var(--text-secondary);}
|
||
li{margin-bottom:6px;line-height:1.6;}
|
||
ul ul,ol ol{margin-top:4px;margin-bottom:4px;}
|
||
|
||
code{font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;background:var(--bg-elevated);padding:2px 6px;border-radius:var(--radius-xs);font-size:12.5px;color:var(--color-primary);}
|
||
pre{background:#1E1E1E;color:#D4D4D4;padding:16px 20px;border-radius:var(--radius-md);overflow-x:auto;margin:16px 0;font-size:13px;line-height:1.6;font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;}
|
||
pre code{background:transparent;padding:0;color:inherit;font-size:inherit;}
|
||
|
||
.diagram{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 24px;margin:20px 0;font-family:'Cascadia Code','Fira Code','SF Mono',Consolas,monospace;font-size:12px;line-height:1.7;white-space:pre;overflow-x:auto;color:var(--text-secondary);}
|
||
|
||
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:16px;margin:20px 0;}
|
||
.card{background:var(--bg-container);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 24px;box-shadow:var(--shadow-sm);}
|
||
.card h4{font-size:15px;font-weight:700;margin:0 0 12px;color:var(--text-primary);}
|
||
.card p,.card li{font-size:13px;}
|
||
|
||
.tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:10px;font-weight:600;margin-right:4px;}
|
||
.tag-blue{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid #91CAFF;}
|
||
.tag-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border);}
|
||
|
||
.footer{text-align:center;padding:28px 0;color:var(--text-tertiary);font-size:13px;border-top:1px solid var(--border-light);margin-top:40px;}
|
||
|
||
/* ===== Tablet: narrower sidebar, smaller main ===== */
|
||
@media(max-width:1024px){
|
||
:root{--sidebar-w:220px;}
|
||
.main{padding:24px 28px 48px;max-width:100%;}
|
||
.card-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));}
|
||
}
|
||
|
||
/* ===== Mobile: hide sidebar, show hamburger ===== */
|
||
@media(max-width:768px){
|
||
:root{--sidebar-w:0;}
|
||
.header .menu-btn{display:flex;}
|
||
.sidebar{transform:translateX(-100%);transition:transform var(--fluent-duration-normal,167ms) cubic-bezier(0.8,0.0,0.2,1.0);}
|
||
.sidebar.open{transform:translateX(0);}
|
||
.sidebar-overlay.show{display:block;}
|
||
.main{margin-left:0;padding:20px 16px 40px;}
|
||
.card-grid{grid-template-columns:1fr;}
|
||
.header h1{font-size:15px;}
|
||
.diagram{font-size:10px;padding:14px 16px;}
|
||
pre{font-size:11px;padding:12px 14px;}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<header class="header">
|
||
<button class="menu-btn" id="menuBtn" aria-label="菜单" onclick="toggleSidebar()">
|
||
<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/></svg>
|
||
</button>
|
||
<a href="./index.html" class="back-link">← 返回知识库</a>
|
||
<h1>简历 AI 技术讲解</h1>
|
||
</header>
|
||
|
||
<!-- Sidebar overlay (mobile) -->
|
||
<div class="sidebar-overlay" id="sidebarOverlay" onclick="closeSidebar()"></div>
|
||
|
||
<!-- Sidebar -->
|
||
<aside class="sidebar" id="sidebar">
|
||
<div class="toc-label">章节导航</div>
|
||
<nav>
|
||
<a href="#s1">1. Agent 智能体</a>
|
||
<a href="#s2">2. Skills 编排系统</a>
|
||
<a href="#s3">3. RAG 知识库</a>
|
||
<a href="#s4">4. Function Calling</a>
|
||
<a href="#s5">5. Prompt Engineering</a>
|
||
<a href="#s6">6. AI Coding 工具链</a>
|
||
<a href="#s7">7. AI 视觉(YOLO)</a>
|
||
<a href="#s8">8. LangChain</a>
|
||
<a href="#s9">9. MCP 协议</a>
|
||
<a href="#s10">10. 技术组合全景</a>
|
||
</nav>
|
||
</aside>
|
||
|
||
<!-- Main content -->
|
||
<div class="main">
|
||
|
||
<p style="font-size:15px;margin-top:4px;">
|
||
本文针对<a href="./张德海_简历.html" style="color:var(--color-primary);">张德海简历</a>中涉及的 AI 相关经验,
|
||
深入讲解背后的技术原理、架构设计与落地实践。覆盖 Agent 智能体、Skills 编排、RAG 知识库、Function Calling、
|
||
Prompt Engineering、AI Coding 工具链、AI 视觉、LangChain 及 MCP 协议九大技术领域。
|
||
</p>
|
||
|
||
<!-- 1. Agent -->
|
||
<h2 id="s1">1. Agent 智能体</h2>
|
||
|
||
<h3>是什么</h3>
|
||
<p>
|
||
Agent(智能体)是能够<strong>自主感知环境、制定计划、调用工具、执行多步任务</strong>的 AI 程序。
|
||
与传统的"一问一答"式聊天机器人不同,Agent 具备<strong>自主决策能力</strong>——它在执行过程中自我反思、
|
||
调整策略,遇到错误时自动重试或换方案。
|
||
</p>
|
||
|
||
<h3>核心架构:ReAct 循环</h3>
|
||
<div class="diagram">
|
||
用户输入 → Agent 大脑(LLM) → 思考(Reasoning) → 选择工具(Tool Selection)
|
||
→ 执行(Action) → 观察结果(Observation) → 继续思考或输出最终答案</div>
|
||
<p>这是 <strong>ReAct(Reasoning + Acting)循环</strong>,Agent 在此循环中反复迭代,直到完成任务或达到终止条件。</p>
|
||
|
||
<h3>简历中的对应实践</h3>
|
||
<ul>
|
||
<li><strong>自主决策 Agent</strong>:让 LLM 不只是回答问题,而是像员工一样完成完整任务(例如"分析上季度供热能耗异常并出报告")</li>
|
||
<li><strong>多 Agent 协作</strong>:多个 Agent 像团队一样分工——一个负责任务拆解与分发,多个执行 Agent 并行工作,汇总 Agent 整合结果。冲突仲裁机制解决结论不一致问题</li>
|
||
<li><strong>Function Calling / Tool Use</strong>:Agent 通过调用外部 API/工具与真实世界交互——查数据库、发邮件、调摄像头、控制设备</li>
|
||
<li><strong>上下文管理与会话记忆</strong>:维护长对话的上下文窗口,通过摘要、压缩、向量记忆等技术让 Agent 记住之前的交互</li>
|
||
<li><strong>安全护栏(Guardrails)</strong>:限制 Agent 行为边界——不能删除生产数据、不能发送未经审核的外部邮件、预算上限控制</li>
|
||
</ul>
|
||
|
||
<!-- 2. Skills -->
|
||
<h2 id="s2">2. Skills 编排系统</h2>
|
||
|
||
<h3>是什么</h3>
|
||
<p>
|
||
Skills 编排是将<strong>业务能力封装为独立的、可插拔的"技能模块"</strong>,由 LLM 根据用户意图<strong>自动路由</strong>到对应 Skill 执行。
|
||
</p>
|
||
|
||
<h3>与 Agent 的关系</h3>
|
||
<div class="diagram">
|
||
Agent 智能体(大脑 / 决策层)
|
||
├── Skill 1: 数据查询(查 MySQL / 时序库)
|
||
├── Skill 2: 报表生成(生成 PDF / Excel)
|
||
├── Skill 3: 消息推送(企业微信 / 邮件 / 短信)
|
||
├── Skill 4: 审批流程(调用 OA 接口)
|
||
├── Skill 5: 视频分析(调用 YOLO 模型)
|
||
└── Skill 6: 能耗预测(调 ML 模型)</div>
|
||
<p>Agent 负责<strong>理解意图 + 决策调度</strong>,Skills 负责<strong>具体执行</strong>。</p>
|
||
|
||
<h3>简历中的对应实践</h3>
|
||
<ul>
|
||
<li><strong>可插拔 Skills 框架</strong>:新业务能力以 Skill 插件形式注册,支持热加载——不停机就能上线新能力</li>
|
||
<li><strong>LLM 自动路由与编排</strong>:用户说"查一下天津项目上个月的能耗",Agent 自动识别并编排"数据查询 Skill → 能耗预测 Skill → 报表生成 Skill"</li>
|
||
<li><strong>行业定制 Skill</strong>:医疗 DRGs(疾病诊断相关分组)分析、供热能耗预测等垂直领域 Skill</li>
|
||
</ul>
|
||
|
||
<!-- 3. RAG -->
|
||
<h2 id="s3">3. RAG 知识库(检索增强生成)</h2>
|
||
|
||
<h3>是什么</h3>
|
||
<p>
|
||
RAG(Retrieval-Augmented Generation)是让 LLM <strong>先检索相关文档,再基于检索结果生成回答</strong>的技术。
|
||
它解决了 LLM 的两大痛点:
|
||
</p>
|
||
<ul>
|
||
<li><strong>知识截止日期</strong>:模型训练数据有截止时间,不知道最新信息</li>
|
||
<li><strong>幻觉问题</strong>:没有知识支撑时容易编造,RAG 让回答有据可查</li>
|
||
</ul>
|
||
|
||
<h3>完整 Pipeline</h3>
|
||
<div class="diagram">
|
||
文档摄入 → 解析(PDF/Word/HTML) → 文本分块(Chunking) → Embedding 向量化 → 存入向量数据库
|
||
↓
|
||
用户提问 → Embedding 向量化 → 向量相似度检索 → 召回 Top-K 相关文档块 → 拼入 Prompt → LLM 生成回答</div>
|
||
|
||
<h3>简历中的对应实践</h3>
|
||
|
||
<h4>向量数据库选型</h4>
|
||
<div class="card-grid">
|
||
<div class="card">
|
||
<h4>Milvus <span class="tag tag-blue">生产级</span></h4>
|
||
<p>开源分布式向量数据库,支持十亿级向量检索,混合查询(标量+向量),适合大规模生产环境。</p>
|
||
</div>
|
||
<div class="card">
|
||
<h4>Chroma <span class="tag tag-green">轻量级</span></h4>
|
||
<p>轻量级向量数据库,Python 原生,嵌入式运行,适合原型开发和小规模场景。</p>
|
||
</div>
|
||
<div class="card">
|
||
<h4>FAISS <span class="tag tag-blue">算法库</span></h4>
|
||
<p>Meta 开源的向量相似度搜索库,纯算法层面,GPU 加速,支持多种索引类型(IVF/HNSW/PQ)。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<h4>混合检索(Hybrid Search)</h4>
|
||
<p>同时使用<strong>语义检索</strong>(向量相似度)+ <strong>关键词检索</strong>(BM25/Elasticsearch)+ <strong>元数据过滤</strong>(按日期、分类、来源筛选),取长补短,提升召回精度。</p>
|
||
|
||
<h4>实际场景</h4>
|
||
<ul>
|
||
<li><strong>制度问答</strong>:员工问"年假怎么算",RAG 从公司制度文档中检索并给出准确条款</li>
|
||
<li><strong>民政 AI 客服</strong>:市民问低保申请条件,从民政知识库检索婚姻/低保/养老/残疾/殡葬政策</li>
|
||
<li><strong>合同审查</strong>:上传合同 → 检索相关法规和先例条款 → AI 标注风险项</li>
|
||
<li><strong>辅助诊断</strong>:输入病症描述 → 检索相似病例和诊疗指南 → 辅助医生决策</li>
|
||
</ul>
|
||
|
||
<!-- 4. Function Calling -->
|
||
<h2 id="s4">4. Function Calling / Tool Use</h2>
|
||
|
||
<h3>是什么</h3>
|
||
<p>
|
||
让 LLM <strong>输出结构化的函数调用请求</strong>,而不是自然语言,从而实现与外部系统的精确对接。
|
||
</p>
|
||
|
||
<h3>工作原理</h3>
|
||
<div class="diagram">
|
||
用户: "帮我查一下张三的社保缴纳记录"
|
||
↓
|
||
LLM 输出(JSON 格式):
|
||
{
|
||
"function": "query_social_security",
|
||
"parameters": {
|
||
"name": "张三",
|
||
"date_range": "2024-01-01~2024-12-31"
|
||
}
|
||
}
|
||
↓
|
||
业务系统执行 → 返回结构化结果 → LLM 用自然语言呈现给用户</div>
|
||
|
||
<h3>与传统 API 调用的区别</h3>
|
||
<p>
|
||
传统方式是 <code>if-else 意图识别 + 槽位填充</code>,覆盖有限。Function Calling 让 LLM 自主决定
|
||
<strong>要不要调函数、调哪个函数、用什么参数</strong>,灵活度大幅提升。
|
||
</p>
|
||
|
||
<!-- 5. Prompt Engineering -->
|
||
<h2 id="s5">5. Prompt Engineering</h2>
|
||
|
||
<h3>是什么</h3>
|
||
<p>
|
||
<strong>提示工程</strong>——设计、优化和管理 LLM 的输入提示,以引导模型产出期望的输出。
|
||
这是一个<strong>工程化</strong>的过程,不是简单的"写好提示词"。
|
||
</p>
|
||
|
||
<h3>关键技术</h3>
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead><tr><th>技术</th><th>说明</th></tr></thead>
|
||
<tbody>
|
||
<tr><td><strong>Few-shot Prompting</strong></td><td>在 Prompt 中给出几个示例,让模型学会输出格式和风格</td></tr>
|
||
<tr><td><strong>Chain-of-Thought</strong></td><td>要求模型"一步步思考",显著提升推理任务准确率</td></tr>
|
||
<tr><td><strong>System Prompt 设计</strong></td><td>设定角色、行为约束、输出格式等系统级指令</td></tr>
|
||
<tr><td><strong>Prompt 模板化</strong></td><td>类似代码模板,变量替换 + 条件分支,工程化管理</td></tr>
|
||
<tr><td><strong>Prompt 优化与 A/B 测试</strong></td><td>不同 Prompt 效果对比,迭代优化</td></tr>
|
||
<tr><td><strong>Token 预算控制</strong></td><td>平衡上下文长度与成本——摘要压缩、动态裁剪</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<!-- 6. AI Coding -->
|
||
<h2 id="s6">6. AI Coding 工具链</h2>
|
||
|
||
<div class="card-grid">
|
||
<div class="card">
|
||
<h4>Claude Code</h4>
|
||
<p>Anthropic 出品的<strong>终端原生 AI 编程助手</strong>,运行在命令行环境:</p>
|
||
<ul>
|
||
<li>可直接读写文件、执行 Shell、操作 Git,不止是"建议代码"</li>
|
||
<li>Agent 模式:给定任务自主规划步骤、执行、验证</li>
|
||
<li>支持 MCP 协议接入外部工具和数据源</li>
|
||
<li>支持 Hooks 机制在特定事件触发自定义逻辑</li>
|
||
</ul>
|
||
</div>
|
||
<div class="card">
|
||
<h4>GitHub Copilot</h4>
|
||
<p>微软/GitHub 的 AI 编程助手,深度集成 IDE:</p>
|
||
<ul>
|
||
<li>代码补全:根据上下文实时建议下一行/下一段代码</li>
|
||
<li>Chat 面板:IDE 内对话式编程</li>
|
||
<li>Agent 模式:自主规划多文件编辑、运行终端命令</li>
|
||
<li>代码审查:PR 级别的 AI Review</li>
|
||
</ul>
|
||
</div>
|
||
<div class="card">
|
||
<h4>Cursor</h4>
|
||
<p>基于 VS Code 深度定制的 AI-first IDE:</p>
|
||
<ul>
|
||
<li>全文件上下文感知:不只是当前文件,而是整个项目</li>
|
||
<li>Composer:多文件协同编辑</li>
|
||
<li>Apply 模式:AI 修改直接应用到代码</li>
|
||
<li>Rules 系统:项目级/用户级行为约束</li>
|
||
</ul>
|
||
</div>
|
||
<div class="card">
|
||
<h4>Windsurf</h4>
|
||
<p>Codeium 出品的 AI IDE:</p>
|
||
<ul>
|
||
<li>Cascade:流式 AI 交互,边生成边应用</li>
|
||
<li>强调实时协作和上下文保持</li>
|
||
</ul>
|
||
</div>
|
||
<div class="card">
|
||
<h4>Aider</h4>
|
||
<p>开源命令行 AI 编程工具:</p>
|
||
<ul>
|
||
<li>Git 原生:每次修改自动 commit,形成干净的变更历史</li>
|
||
<li>多模型支持:可对接 OpenAI、Anthropic、本地模型</li>
|
||
<li>地图文件(Map):生成仓库结构图帮助 LLM 理解项目</li>
|
||
<li>多文件编辑:一次对话可修改多个文件</li>
|
||
</ul>
|
||
</div>
|
||
<div class="card">
|
||
<h4>AI 代码审查 & 自动测试生成</h4>
|
||
<ul>
|
||
<li><strong>AI Code Review</strong>:PR/MR 阶段由 AI 自动审查代码质量、安全漏洞、性能问题</li>
|
||
<li><strong>自动测试生成</strong>:AI 分析代码逻辑自动生成单元测试、集成测试用例,提升覆盖率</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 7. AI 视觉 -->
|
||
<h2 id="s7">7. AI 视觉(计算机视觉)</h2>
|
||
|
||
<h3>YOLO(You Only Look Once)</h3>
|
||
<p>实时目标检测算法,核心特点:</p>
|
||
<ul>
|
||
<li><strong>单次推理</strong>:一次前向传播同时完成目标定位 + 分类,速度极快</li>
|
||
<li><strong>版本迭代</strong>:YOLOv5 → YOLOv8 → YOLOv10/YOLO11,精度和速度持续提升</li>
|
||
<li><strong>实际场景</strong>:视频监控中的人/车/物检测、安防异常行为识别</li>
|
||
</ul>
|
||
|
||
<h3>简历中的应用</h3>
|
||
<ul>
|
||
<li><strong>视频智能识别</strong>:对接 GB/T 28181 国标视频流,实时分析监控画面</li>
|
||
<li><strong>自定义模型训练部署</strong>:针对特定场景(供热站仪表读数、工地安全帽检测)训练专属模型</li>
|
||
<li><strong>视频融合平台</strong>:国标视频接入 + AI 识别叠加,形成智能安防方案</li>
|
||
</ul>
|
||
|
||
<!-- 8. LangChain -->
|
||
<h2 id="s8">8. LangChain</h2>
|
||
|
||
<h3>是什么</h3>
|
||
<p>
|
||
LangChain 是 LLM 应用开发框架,提供标准化的<strong>链(Chain)</strong>、<strong>Agent</strong>、
|
||
<strong>工具(Tool)</strong>、<strong>记忆(Memory)</strong>、<strong>检索器(Retriever)</strong>等抽象。
|
||
它统一了不同 LLM 提供商(OpenAI/Anthropic/本地模型)的接口,简化了 RAG、Agent 等模式的实现。
|
||
</p>
|
||
|
||
<h3>核心组件</h3>
|
||
<pre><code># Chain:将多个步骤串联
|
||
chain = prompt | llm | output_parser
|
||
|
||
# Agent + Tools:让 LLM 学会用工具
|
||
from langchain.agents import AgentExecutor, create_react_agent
|
||
from langchain.tools import Tool
|
||
from langchain.memory import ConversationBufferMemory
|
||
from langchain.vectorstores import Milvus
|
||
|
||
agent = create_react_agent(llm, tools, prompt)
|
||
agent_executor = AgentExecutor(agent=agent, tools=tools)</code></pre>
|
||
|
||
<!-- 9. MCP -->
|
||
<h2 id="s9">9. MCP 协议(Model Context Protocol)</h2>
|
||
|
||
<h3>是什么</h3>
|
||
<p>
|
||
Anthropic 推出的<strong>开放标准协议</strong>,定义了 AI 模型与外部工具/数据源之间的统一通信方式。
|
||
可以理解为<strong>"AI 世界的 USB-C 接口"</strong>。
|
||
</p>
|
||
|
||
<h3>架构</h3>
|
||
<div class="diagram">
|
||
AI 应用(Host)
|
||
↓ MCP 协议
|
||
MCP 客户端(Claude Code / Cursor 等)
|
||
↓ JSON-RPC over stdio/SSE
|
||
MCP 服务器(工具提供方)
|
||
├── 数据库 MCP Server → PostgreSQL / MySQL
|
||
├── 文件系统 MCP Server → 本地文件
|
||
├── API MCP Server → GitHub / Jira / Slack
|
||
└── 自定义 MCP Server → 企业内部系统</div>
|
||
|
||
<h3>意义</h3>
|
||
<p>
|
||
在 MCP 之前,每个 AI 工具都要单独对接每个外部系统(M×N 的集成复杂度)。MCP 标准化后,工具只需实现一次 MCP Server,
|
||
所有支持 MCP 的 AI 应用都能使用(M+N 的复杂度)。
|
||
</p>
|
||
|
||
<!-- 10. 全景 -->
|
||
<h2 id="s10">10. 技术组合全景</h2>
|
||
|
||
<p>简历中的 AI 能力不是孤立的,它们在实际项目中形成一条完整链路:</p>
|
||
|
||
<div class="diagram" style="line-height:1.8;">
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 应用层(场景) │
|
||
│ 智能客服 │ 制度问答 │ 合同审查 │ 能耗预测 │ 视频安防 │
|
||
└─────────────────────────────────────────────────────────┘
|
||
↑
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Agent 智能体层(决策) │
|
||
│ 意图识别 → 任务规划 → Skills 路由 → 多 Agent 协作 │
|
||
│ Function Calling / Tool Use │
|
||
└─────────────────────────────────────────────────────────┘
|
||
↑
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Skills 编排层(执行) │
|
||
│ 数据查询 │ 报表生成 │ 消息推送 │ 审批流 │ 视频分析 │
|
||
└─────────────────────────────────────────────────────────┘
|
||
↑
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 知识 / 数据层(支撑) │
|
||
│ RAG 知识库(Milvus/Chroma) │ 向量检索 │ 混合检索 │
|
||
│ 时序数据库 │ 业务数据库 │ 文档 Pipeline │
|
||
└─────────────────────────────────────────────────────────┘
|
||
↑
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 基础设施层 │
|
||
│ LLM API │ Prompt Engineering │ LangChain │
|
||
│ AI Coding 工具链 │ MCP 协议 │ 模型训练 / 部署 │
|
||
└─────────────────────────────────────────────────────────┘</div>
|
||
|
||
<blockquote>
|
||
<strong>核心理念</strong>:让 AI 不只是"聊天",而是真正能干活——查数据、调系统、出报告、审合同、看监控。
|
||
这也正是简历中反复强调的"<strong>AI 应用落地</strong>"的含义。
|
||
</blockquote>
|
||
|
||
<footer class="footer">
|
||
基于 <a href="./张德海_简历.html" style="color:var(--color-primary);">张德海简历</a> AI 相关经验整理 · 2026-06
|
||
</footer>
|
||
|
||
</div>
|
||
|
||
<script>
|
||
/* ===== Scroll spy — highlight active sidebar link ===== */
|
||
(function(){
|
||
const navLinks = document.querySelectorAll('.sidebar nav a');
|
||
const headings = [];
|
||
navLinks.forEach(a => {
|
||
const id = a.getAttribute('href').slice(1);
|
||
const el = document.getElementById(id);
|
||
if (el) headings.push({ el, a });
|
||
});
|
||
|
||
function onScroll(){
|
||
let current = null;
|
||
const offset = 80; // header height + a bit
|
||
for (const { el, a } of headings) {
|
||
if (el.getBoundingClientRect().top <= offset) {
|
||
current = a;
|
||
}
|
||
}
|
||
navLinks.forEach(a => a.classList.remove('active'));
|
||
if (current) current.classList.add('active');
|
||
}
|
||
|
||
window.addEventListener('scroll', onScroll, { passive: true });
|
||
onScroll();
|
||
})();
|
||
|
||
/* ===== Mobile sidebar toggle ===== */
|
||
function toggleSidebar(){
|
||
const sidebar = document.getElementById('sidebar');
|
||
const overlay = document.getElementById('sidebarOverlay');
|
||
sidebar.classList.toggle('open');
|
||
overlay.classList.toggle('show');
|
||
}
|
||
function closeSidebar(){
|
||
const sidebar = document.getElementById('sidebar');
|
||
const overlay = document.getElementById('sidebarOverlay');
|
||
sidebar.classList.remove('open');
|
||
overlay.classList.remove('show');
|
||
}
|
||
|
||
/* Close sidebar when a nav link is clicked (mobile) */
|
||
document.querySelectorAll('.sidebar nav a').forEach(a => {
|
||
a.addEventListener('click', () => {
|
||
if (window.innerWidth <= 768) closeSidebar();
|
||
});
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|