558 lines
21 KiB
Plaintext
558 lines
21 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# 28_课程总结:从入门到实践的 AI 智能体学习路线\n",
|
||
"\n",
|
||
"## 学习目标\n",
|
||
"1. 回顾课程核心知识点,形成完整的知识体系\n",
|
||
"2. 了解 AI 智能体领域的前沿发展趋势和拓展方向\n",
|
||
"3. 规划后续自主学习路径和实践建议\n",
|
||
"\n",
|
||
"本节课不是学习一个全新的技术点,而是把前面学过的内容串起来,帮助大家形成一张完整的“AI 智能体知识地图”。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 1. 这门课到底学了什么\n",
|
||
"\n",
|
||
"如果用一句话总结这门课:\n",
|
||
"\n",
|
||
"> 我们学习了如何把大模型从“聊天机器人”升级为“能够使用工具、执行流程、完成任务的智能体”。\n",
|
||
"\n",
|
||
"普通大模型更像一个会回答问题的人,而智能体更像一个会办事的助手。它不只是生成文字,还可以:\n",
|
||
"\n",
|
||
"- 理解用户目标\n",
|
||
"- 拆解任务步骤\n",
|
||
"- 调用外部工具\n",
|
||
"- 读取和检索资料\n",
|
||
"- 根据中间结果继续决策\n",
|
||
"- 最终交付完整结果\n",
|
||
"\n",
|
||
"所以,智能体的核心不是“模型有多聪明”,而是“模型能否被组织进一个可靠的工作流程中”。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 2. AI 智能体的核心知识地图\n",
|
||
"\n",
|
||
"可以把整个课程内容分成 6 个层次:\n",
|
||
"\n",
|
||
"| 层次 | 核心内容 | 通俗理解 |\n",
|
||
"| --- | --- | --- |\n",
|
||
"| 大模型基础 | Prompt、模型调用、消息格式 | 让模型听懂我们的问题 |\n",
|
||
"| LangChain | 链、提示词、工具、RAG | 把模型能力组件化 |\n",
|
||
"| 工具调用 | 搜索、计算、文件读取、API | 让模型能使用外部能力 |\n",
|
||
"| RAG 知识库 | 文档切分、向量检索、基于资料回答 | 让模型先查资料再回答 |\n",
|
||
"| LangGraph | State、Node、Edge、条件分支 | 把智能体流程画成流程图 |\n",
|
||
"| 项目实战 | 知识库助手、多工具智能体 | 把知识点组合成完整应用 |\n",
|
||
"\n",
|
||
"学习时不要只记住某个库的 API,更重要的是理解这些模块分别解决什么问题。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 3. 回顾一:Prompt 是智能体的起点\n",
|
||
"\n",
|
||
"Prompt 可以理解为我们给大模型的任务说明书。\n",
|
||
"\n",
|
||
"一个好的 Prompt 通常会说明:\n",
|
||
"\n",
|
||
"1. 你是谁:模型要扮演什么角色\n",
|
||
"2. 你要做什么:具体任务是什么\n",
|
||
"3. 你依据什么:是否需要参考资料\n",
|
||
"4. 你怎么输出:输出格式有什么要求\n",
|
||
"\n",
|
||
"下面用一个简单函数模拟 Prompt 拼接。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def build_prompt(role, task, context, output_format):\n",
|
||
" prompt = f\"角色:{role}\\n\"\n",
|
||
" prompt += f\"任务:{task}\\n\"\n",
|
||
" prompt += f\"参考资料:{context}\\n\"\n",
|
||
" prompt += f\"输出格式:{output_format}\"\n",
|
||
" return prompt\n",
|
||
"\n",
|
||
"\n",
|
||
"prompt = build_prompt(\n",
|
||
" role=\"AI 智能体课程助教\",\n",
|
||
" task=\"解释什么是工具调用\",\n",
|
||
" context=\"工具调用是指模型根据任务选择并使用外部函数或 API。\",\n",
|
||
" output_format=\"用三句话通俗解释\",\n",
|
||
")\n",
|
||
"\n",
|
||
"print(prompt)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 代码解释\n",
|
||
"\n",
|
||
"这段代码用于复习 Prompt 的基本组成:\n",
|
||
"\n",
|
||
"1. `build_prompt` 是一个提示词构造函数。\n",
|
||
"2. `role` 表示模型扮演的角色,例如课程助教、数据分析师、代码助手。\n",
|
||
"3. `task` 表示模型要完成的具体任务。\n",
|
||
"4. `context` 表示参考资料,能够减少模型凭空发挥。\n",
|
||
"5. `output_format` 表示输出格式要求,可以让答案更稳定。\n",
|
||
"6. 函数内部通过字符串拼接生成完整 Prompt。\n",
|
||
"\n",
|
||
"真实项目中,Prompt 往往不是随便写一句话,而是要像写任务说明书一样清晰。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 4. 回顾二:工具调用让智能体拥有外部能力\n",
|
||
"\n",
|
||
"大模型擅长理解和生成语言,但不擅长所有事情。\n",
|
||
"\n",
|
||
"例如数学计算、实时搜索、文件读取、数据库查询等任务,更适合交给工具完成。\n",
|
||
"\n",
|
||
"工具调用的基本流程是:\n",
|
||
"\n",
|
||
"```text\n",
|
||
"用户问题 -> 判断是否需要工具 -> 选择工具 -> 执行工具 -> 整理结果\n",
|
||
"```\n",
|
||
"\n",
|
||
"下面用一个简化例子复习工具选择和调用。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def calculate(expression):\n",
|
||
" return eval(expression)\n",
|
||
"\n",
|
||
"\n",
|
||
"def search_knowledge(keyword):\n",
|
||
" knowledge = {\n",
|
||
" \"LangChain\": \"LangChain 用于构建大模型应用。\",\n",
|
||
" \"LangGraph\": \"LangGraph 用于编排多步骤智能体流程。\",\n",
|
||
" }\n",
|
||
" return knowledge.get(keyword, \"没有找到相关知识。\")\n",
|
||
"\n",
|
||
"\n",
|
||
"def simple_tool_agent(question):\n",
|
||
" if \"计算\" in question:\n",
|
||
" expression = question.replace(\"计算\", \"\").strip()\n",
|
||
" result = calculate(expression)\n",
|
||
" return f\"我使用了计算工具,结果是:{result}\"\n",
|
||
"\n",
|
||
" if \"LangGraph\" in question:\n",
|
||
" result = search_knowledge(\"LangGraph\")\n",
|
||
" return f\"我使用了知识查询工具,结果是:{result}\"\n",
|
||
"\n",
|
||
" return \"这个问题暂时不需要调用工具。\"\n",
|
||
"\n",
|
||
"\n",
|
||
"print(simple_tool_agent(\"计算 25 * 4 + 8\"))\n",
|
||
"print(simple_tool_agent(\"LangGraph 是什么?\"))\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 代码解释\n",
|
||
"\n",
|
||
"这段代码复习了工具调用的基本思想:\n",
|
||
"\n",
|
||
"1. `calculate(expression)` 是计算工具,负责执行数学表达式。\n",
|
||
"2. `search_knowledge(keyword)` 是知识查询工具,负责从字典中查找资料。\n",
|
||
"3. `simple_tool_agent(question)` 是一个简单智能体入口。\n",
|
||
"4. 如果问题中包含“计算”,就提取表达式并调用计算工具。\n",
|
||
"5. 如果问题中包含 `LangGraph`,就调用知识查询工具。\n",
|
||
"6. 最终返回时,会说明使用了哪个工具以及工具结果。\n",
|
||
"\n",
|
||
"这里为了复习写得很简单。真实项目中,不建议直接对用户输入使用 `eval`,应使用更安全的计算库或严格校验。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 5. 回顾三:RAG 让模型基于资料回答\n",
|
||
"\n",
|
||
"RAG 是构建知识库问答系统时非常重要的技术。\n",
|
||
"\n",
|
||
"它解决的问题是:大模型不知道你的私有资料,也可能记错公开知识。\n",
|
||
"\n",
|
||
"RAG 的思路很简单:\n",
|
||
"\n",
|
||
"1. 先把资料放入知识库\n",
|
||
"2. 用户提问时先检索相关资料\n",
|
||
"3. 再让模型基于检索资料回答\n",
|
||
"\n",
|
||
"下面用纯 Python 复习一个最小 RAG 流程。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"documents = [\n",
|
||
" \"RAG 的核心是先检索资料,再基于资料生成答案。\",\n",
|
||
" \"LangChain 提供文档加载、文本切分、检索器和链等能力。\",\n",
|
||
" \"LangGraph 适合构建有状态、多步骤、可分支的智能体流程。\",\n",
|
||
"]\n",
|
||
"\n",
|
||
"\n",
|
||
"def retrieve_by_keyword(question, documents):\n",
|
||
" scored_docs = []\n",
|
||
" for doc in documents:\n",
|
||
" score = len(set(question) & set(doc))\n",
|
||
" scored_docs.append((score, doc))\n",
|
||
"\n",
|
||
" scored_docs.sort(reverse=True, key=lambda item: item[0])\n",
|
||
" return scored_docs[0][1]\n",
|
||
"\n",
|
||
"\n",
|
||
"def rag_answer(question):\n",
|
||
" context = retrieve_by_keyword(question, documents)\n",
|
||
" return f\"问题:{question}\\n参考资料:{context}\\n回答:请优先根据参考资料作答。\"\n",
|
||
"\n",
|
||
"\n",
|
||
"print(rag_answer(\"RAG 的核心流程是什么?\"))\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 代码解释\n",
|
||
"\n",
|
||
"这段代码复习了 RAG 的最小流程:\n",
|
||
"\n",
|
||
"1. `documents` 模拟知识库中的资料。\n",
|
||
"2. `retrieve_by_keyword` 是简化检索器,会给每条资料计算相关度分数。\n",
|
||
"3. `set(question) & set(doc)` 表示问题和文档中共同出现的字符。\n",
|
||
"4. `scored_docs.sort(...)` 按分数从高到低排序。\n",
|
||
"5. `rag_answer(question)` 先检索最相关资料,再把资料作为参考内容组织成回答。\n",
|
||
"\n",
|
||
"真实 RAG 项目通常会把关键词检索换成向量检索,把简单回答拼接换成大模型生成。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 6. 回顾四:LangGraph 让流程更清晰\n",
|
||
"\n",
|
||
"当智能体只有一步时,普通函数就够了。\n",
|
||
"\n",
|
||
"但当智能体需要多步骤执行、条件判断、循环反思、工具协作时,就需要更清晰的流程编排。\n",
|
||
"\n",
|
||
"LangGraph 的核心概念可以简单理解为:\n",
|
||
"\n",
|
||
"| 概念 | 作用 | 通俗理解 |\n",
|
||
"| --- | --- | --- |\n",
|
||
"| State | 保存流程中的数据 | 任务档案袋 |\n",
|
||
"| Node | 一个处理步骤 | 流程图里的方框 |\n",
|
||
"| Edge | 节点之间的连接 | 流程图里的箭头 |\n",
|
||
"| Conditional Edge | 条件分支 | 根据情况走不同路线 |\n",
|
||
"\n",
|
||
"下面不用依赖 LangGraph,先用普通 Python 模拟这种状态流转思想。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def plan_node(state):\n",
|
||
" goal = state[\"goal\"]\n",
|
||
" state[\"plan\"] = [f\"理解目标:{goal}\", \"执行任务\", \"汇总结果\"]\n",
|
||
" return state\n",
|
||
"\n",
|
||
"\n",
|
||
"def execute_node(state):\n",
|
||
" state[\"result\"] = [f\"已完成:{step}\" for step in state[\"plan\"]]\n",
|
||
" return state\n",
|
||
"\n",
|
||
"\n",
|
||
"def summary_node(state):\n",
|
||
" state[\"answer\"] = \"\\n\".join(state[\"result\"])\n",
|
||
" return state\n",
|
||
"\n",
|
||
"\n",
|
||
"state = {\"goal\": \"复习 AI 智能体课程\"}\n",
|
||
"state = plan_node(state)\n",
|
||
"state = execute_node(state)\n",
|
||
"state = summary_node(state)\n",
|
||
"\n",
|
||
"print(state[\"answer\"])\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 代码解释\n",
|
||
"\n",
|
||
"这段代码用普通 Python 模拟 LangGraph 的状态流转:\n",
|
||
"\n",
|
||
"1. `state` 是一个字典,相当于工作流中的共享状态。\n",
|
||
"2. `plan_node(state)` 模拟规划节点,会根据目标生成计划。\n",
|
||
"3. `execute_node(state)` 模拟执行节点,会执行计划中的每个步骤。\n",
|
||
"4. `summary_node(state)` 模拟汇总节点,会把结果整理成最终答案。\n",
|
||
"5. 每个节点都接收 `state`,修改后再返回 `state`。\n",
|
||
"\n",
|
||
"LangGraph 做的事情更规范、更强大,但底层思想就是让数据沿着流程图一步步流动。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 7. 一个智能体项目的标准开发流程\n",
|
||
"\n",
|
||
"开发智能体项目时,可以按照下面的步骤推进:\n",
|
||
"\n",
|
||
"1. 明确用户需求:用户到底要解决什么问题\n",
|
||
"2. 设计输入输出:用户输入什么,系统输出什么\n",
|
||
"3. 拆分功能模块:需要模型、工具、检索还是工作流\n",
|
||
"4. 先做最小版本:用简单规则和模拟数据跑通流程\n",
|
||
"5. 替换真实能力:接入真实模型、数据库、搜索 API 等\n",
|
||
"6. 增加调试日志:观察每一步中间结果\n",
|
||
"7. 优化稳定性:处理异常、补充测试、改进提示词\n",
|
||
"\n",
|
||
"初学者最容易犯的错误是:一上来就想做完整系统。更推荐先做 MVP,再逐步升级。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 8. 智能体常见项目类型\n",
|
||
"\n",
|
||
"学完本课程后,可以尝试这些项目方向:\n",
|
||
"\n",
|
||
"| 项目类型 | 能力重点 | 示例 |\n",
|
||
"| --- | --- | --- |\n",
|
||
"| 知识库问答助手 | RAG、文档检索 | 课程资料问答、企业制度问答 |\n",
|
||
"| 多工具助手 | 工具选择、工具调用 | 搜索 + 计算 + 文件读取助手 |\n",
|
||
"| 自动报告生成器 | 任务分解、结果汇总 | 周报生成、调研报告生成 |\n",
|
||
"| 数据分析智能体 | 代码执行、图表生成 | 自动分析表格并输出结论 |\n",
|
||
"| 工作流智能体 | LangGraph、条件分支 | 审核流程、客服分流、任务调度 |\n",
|
||
"| 多智能体协作 | 角色分工、结果协同 | 产品经理 + 开发 + 测试协作 |\n",
|
||
"\n",
|
||
"建议从知识库问答和多工具助手开始,因为它们最容易理解,也最接近真实应用。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 9. AI 智能体的发展趋势\n",
|
||
"\n",
|
||
"AI 智能体还在快速发展,值得关注的方向包括:\n",
|
||
"\n",
|
||
"1. **更强的工具调用能力**:模型会更准确地选择工具、填写参数、处理工具错误。\n",
|
||
"2. **更可靠的工作流编排**:复杂任务会越来越依赖 LangGraph 这类流程框架。\n",
|
||
"3. **多模态智能体**:智能体不仅处理文字,还能理解图片、语音、视频和表格。\n",
|
||
"4. **企业级知识库**:RAG 会和权限控制、审计、数据治理结合得更紧密。\n",
|
||
"5. **多智能体协作**:多个角色智能体分工合作,完成更复杂的任务。\n",
|
||
"6. **本地化和私有化部署**:越来越多企业会关注数据安全和私有模型部署。\n",
|
||
"\n",
|
||
"但无论技术怎么变,底层能力仍然离不开:需求分析、任务拆解、工具设计、流程控制和结果验证。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 10. 后续学习路线建议\n",
|
||
"\n",
|
||
"可以按照下面路线继续学习:\n",
|
||
"\n",
|
||
"### 第一阶段:打牢基础\n",
|
||
"- 熟悉 Python 函数、类、字典、列表\n",
|
||
"- 掌握 API 调用和 JSON 数据格式\n",
|
||
"- 熟悉 Prompt 编写和调试\n",
|
||
"\n",
|
||
"### 第二阶段:掌握框架\n",
|
||
"- 学习 LangChain 的 Prompt、Chain、Tool、Retriever\n",
|
||
"- 学习 LangGraph 的 State、Node、Edge、条件分支\n",
|
||
"- 理解 RAG 的文档加载、切分、向量化、检索、生成\n",
|
||
"\n",
|
||
"### 第三阶段:完成项目\n",
|
||
"- 做一个个人知识库问答助手\n",
|
||
"- 做一个多工具协作助手\n",
|
||
"- 做一个带 LangGraph 工作流的任务调度智能体\n",
|
||
"\n",
|
||
"### 第四阶段:工程化\n",
|
||
"- 增加日志、测试和异常处理\n",
|
||
"- 接入数据库、缓存和权限控制\n",
|
||
"- 部署为 Web 服务或内部工具\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 11. 自我检查清单\n",
|
||
"\n",
|
||
"学完课程后,可以用下面的问题检查自己是否真正掌握:\n",
|
||
"\n",
|
||
"1. 我能否解释普通大模型应用和智能体应用的区别?\n",
|
||
"2. 我能否写出一个清晰的 Prompt 模板?\n",
|
||
"3. 我能否封装一个简单工具并让智能体调用?\n",
|
||
"4. 我能否说明 RAG 的完整流程?\n",
|
||
"5. 我能否用 State、Node、Edge 解释 LangGraph?\n",
|
||
"6. 我能否把一个复杂任务拆成多个节点?\n",
|
||
"7. 我能否通过日志定位智能体执行错误?\n",
|
||
"8. 我能否独立完成一个小型智能体项目?\n",
|
||
"\n",
|
||
"如果这些问题大部分都能回答清楚,说明你已经具备继续做项目的基础。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 12. 最后一个综合复习示例\n",
|
||
"\n",
|
||
"下面用一个小例子把 Prompt、工具调用、RAG 和流程编排思想合在一起。\n",
|
||
"\n",
|
||
"这个示例仍然是教学版,目标是帮助大家看清完整结构。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"course_docs = [\n",
|
||
" \"智能体可以调用工具完成搜索、计算、文件读取等任务。\",\n",
|
||
" \"RAG 可以让智能体基于知识库资料回答问题。\",\n",
|
||
" \"LangGraph 可以把智能体任务拆成多个节点并按流程执行。\",\n",
|
||
"]\n",
|
||
"\n",
|
||
"\n",
|
||
"def course_retriever(question):\n",
|
||
" best_doc = max(course_docs, key=lambda doc: len(set(question) & set(doc)))\n",
|
||
" return best_doc\n",
|
||
"\n",
|
||
"\n",
|
||
"def course_calculator(expression):\n",
|
||
" return eval(expression)\n",
|
||
"\n",
|
||
"\n",
|
||
"def final_review_agent(question):\n",
|
||
" if \"计算\" in question:\n",
|
||
" expression = question.replace(\"计算\", \"\").strip()\n",
|
||
" result = course_calculator(expression)\n",
|
||
" return f\"我判断这是计算任务,调用计算工具后得到:{result}\"\n",
|
||
"\n",
|
||
" context = course_retriever(question)\n",
|
||
" prompt = build_prompt(\n",
|
||
" role=\"AI 智能体课程总结助手\",\n",
|
||
" task=f\"回答问题:{question}\",\n",
|
||
" context=context,\n",
|
||
" output_format=\"先给结论,再给一句解释\",\n",
|
||
" )\n",
|
||
" return prompt\n",
|
||
"\n",
|
||
"\n",
|
||
"print(final_review_agent(\"RAG 有什么作用?\"))\n",
|
||
"print(\"-\" * 40)\n",
|
||
"print(final_review_agent(\"计算 18 * 6 + 2\"))\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 代码解释\n",
|
||
"\n",
|
||
"这个综合示例把多个知识点串联起来:\n",
|
||
"\n",
|
||
"1. `course_docs` 是一个小型课程知识库。\n",
|
||
"2. `course_retriever(question)` 根据问题从知识库中找最相关的资料。\n",
|
||
"3. `course_calculator(expression)` 是计算工具。\n",
|
||
"4. `final_review_agent(question)` 是综合复习智能体入口。\n",
|
||
"5. 如果问题中包含“计算”,智能体会调用计算工具。\n",
|
||
"6. 如果不是计算任务,智能体会先检索课程资料,再调用前面写过的 `build_prompt` 生成提示词。\n",
|
||
"7. 这个流程体现了智能体的基本思想:先判断任务类型,再选择合适能力,最后组织输出。\n",
|
||
"\n",
|
||
"真实项目中,可以把这里的 `return prompt` 换成真实大模型调用,让模型基于 Prompt 生成最终回答。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 13. 课程总结\n",
|
||
"\n",
|
||
"这门课的重点不是让大家记住所有 API,而是建立一套解决智能体问题的思维方式:\n",
|
||
"\n",
|
||
"1. 先理解用户目标,再决定系统流程。\n",
|
||
"2. 能用普通函数解决的,先用普通函数跑通。\n",
|
||
"3. 需要模型生成时,再接入大模型。\n",
|
||
"4. 需要外部能力时,封装成工具。\n",
|
||
"5. 需要资料依据时,使用 RAG。\n",
|
||
"6. 需要多步骤流程时,使用 LangGraph。\n",
|
||
"7. 需要稳定上线时,补充日志、测试、异常处理和监控。\n",
|
||
"\n",
|
||
"真正的智能体开发,不是把所有新技术堆在一起,而是根据问题选择最合适、最简单、最可靠的方案。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 14. 课后实践建议\n",
|
||
"\n",
|
||
"建议完成以下实践:\n",
|
||
"\n",
|
||
"1. 整理自己的学习笔记,做一个个人知识库问答助手。\n",
|
||
"2. 给知识库助手增加“显示参考来源”的功能。\n",
|
||
"3. 做一个多工具助手,至少支持搜索、计算和文件读取。\n",
|
||
"4. 用 LangGraph 重构多工具助手,把每一步拆成节点。\n",
|
||
"5. 给项目增加调试日志,记录每次工具选择和工具结果。\n",
|
||
"6. 尝试把项目封装成一个简单 Web 应用或命令行工具。\n",
|
||
"\n",
|
||
"完成这些练习后,你就不只是理解了 AI 智能体,而是已经具备了独立构建智能体应用的基础能力。\n"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"name": "python",
|
||
"version": "3.10.0"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|