网页免费制作网站代理小程序怎么赚钱
2025/12/31 21:05:35 网站建设 项目流程
网页免费制作网站,代理小程序怎么赚钱,seo是什么时候开始的,php网站开发实用技术练习题文章详细介绍了LangChain框架#xff0c;它是连接大语言模型和现实世界的桥梁。通过组件化设计#xff0c;LangChain解决了大模型的三大局限性#xff1a;知识过期、无记忆能力和缺乏工具使用能力。文章从环境搭建开始#xff0c;逐步介绍了基础工作流、记忆功能、RAG检索增…文章详细介绍了LangChain框架它是连接大语言模型和现实世界的桥梁。通过组件化设计LangChain解决了大模型的三大局限性知识过期、无记忆能力和缺乏工具使用能力。文章从环境搭建开始逐步介绍了基础工作流、记忆功能、RAG检索增强生成、Agents工具使用以及使用Streamlit构建网页界面最后通过LangGraph展示了复杂的流程编排。这篇教程为开发者提供了完整的实战路径帮助构建自己的AI应用。前排提示文末有大模型AGI-CSDN独家资料包哦在做AI应用开发的时候大模型都有一个通病虽然强大但它不知道你公司的私有文档记不住之前的对话更不会主动上网搜索最新信息。大模型就像一个博学但与世隔绝的学者——知识丰富却无法连接现实世界。LangChain 正是为了解决这个问题而生。它是由 Harrison Chase 开发的开源框架专门用来构建基于大语言模型(LLM)的应用程序。简单来说LangChain 就是连接大脑(LLM)和现实世界(数据库、搜索引擎、私有文档)的桥梁。这篇文章将手把手带你从零开始掌握 LangChain每个步骤都提供完整的可运行代码。你不需要有 Python 基础只要跟着操作就能构建出自己的 AI 应用。希望对你有所启发。PART 01 - 技术背景与挑战大模型的三大局限性当我们直接调用 GPT 或其他大模型的 API 时会遇到三个根本性问题知识过期- 模型只知道训练时的数据不知道昨天刚发生的新闻也不知道你公司的内部文档。就像一个 2023 年就冬眠的人醒来后对 2024 年的世界一无所知。无记忆能力- 每次 API 调用都是全新的开始。你问它我叫什么它回答了下次再问它完全忘记了。这不是模型笨而是 API 的调用机制决定的——每次请求都是独立的没有状态保持。缺乏工具使用能力- 问它现在比特币多少钱它只能胡乱猜测让它帮我算一下 23423 × 82342大概率算错。大模型天生不擅长精确计算和实时数据获取。LangChain 的解决方案组件化与链式调用LangChain 的核心哲学是组合优于继承。它把 AI 应用开发拆解成一个个独立的积木Models统一的模型接口兼容 100 种 LLM 提供商Prompts可复用的提示词模板Memory开箱即用的记忆管理组件Chains将多个组件串联成工作流Agents能自主决策、使用工具的智能体这种设计的精妙之处在于数据流向清晰组件职责单一。每个组件只做一件事并且做好——这正是优秀架构的标志。PART 02 - 核心架构解析从企业架构的角度看LangChain 的设计完美符合 TOGAF 框架的四层模型业务架构层- LangChain 能构建哪些 AI 应用答案是AI 对话系统、知识库问答、智能客服、代码助手等。关键是它降低了门槛——以前需要 AI 团队才能做的事现在几十行代码就能实现。应用架构层- 核心组件包括 Models(模型抽象)、Chains(链式调用)、Agents(智能体)、Toolkits(工具集)。这一层的设计哲学是可组合性你可以像搭乐高一样组合这些组件而不是从零开始写代码。数据架构层- 包含 Memory(记忆管理)、Vector Stores(向量数据库)、Document Loaders(文档加载器)、Text Splitters(文本切割器)。重点是数据的流转和转换原始文档如何变成 AI 能理解的向量对话历史如何高效存储和检索技术架构层- 底层涉及 API Integration(多模型兼容)、Prompt Engineering(提示词工程)、Embeddings(向量化)、LLM Provider(模型提供商集成)。这一层解决的是如何让不同技术栈无缝协作。核心设计State、Node、Edge从 LangGraph(LangChain 的进阶版)可以看出架构设计的精髓State(状态) - 就像一个货箱在各个处理节点间传递数据。它不是简单的变量而是结构化的数据容器清晰定义了这一步需要什么数据输出什么数据。Node(节点) - 每个节点是一个独立的处理单元比如分类器、“数学专家”、“编辑审核”。节点的职责单一边界清晰这样才能组合出复杂的流程而不失控。Edge(边) - 定义数据流向。普通边是固定路径条件边可以根据状态动态决定下一步去哪里(就像交通路口的红绿灯)。这种设计的天才之处在于把流程控制从代码逻辑中抽离出来变成可视化的图结构。你画一个流程图就能直接翻译成代码。LangChain 基础工作流用户输入QueryPrompt 模板TemplateLLM 调用Model输出 解析Parser结果 返回ResponsePART 03 - 环境准备与安装在开始实战之前我们需要搭建开发环境。以下步骤适用于 macOS、Linux 和 Windows 系统。步骤 1安装 Python确保你的电脑已安装 Python 3.8 或更高版本。打开终端(Terminal 或 CMD)输入python3 --version如果显示版本号如Python 3.12.11说明已安装。否则请访问 https://www.python.org 下载安装。步骤 2安装 LangChain 核心库在终端中执行以下命令pip install langchain langchain-openai如果下载速度慢可以使用国内镜像源pip install langchain langchain-openai -i https://pypi.tuna.tsinghua.edu.cn/simple步骤 3获取 API Key本教程使用**智谱 AI(ChatGLM)**作为示例因为它完美兼容 OpenAI API 格式中文能力强价格实惠约为 GPT-4 的 1/3访问 https://open.bigmodel.cn 注册账号并获取 API Key通常是一串以.分隔的字符。重要提示代码中所有你的_API_KEY都需要替换成你的真实 API Key。PART 04 - 四阶段实战路线图第一步Hello World - 打通引擎目标让 AI 开口说话验证环境配置正确。核心洞察LangChain 的模型接口抽象得非常巧妙。它兼容 OpenAI 格式的 API这意味着你写的代码可以无缝切换到 DeepSeek、Moonshot 等其他模型——只需要改两行配置。创建文件lesson1.py复制以下代码# 1. 导入必要的工具包# ChatOpenAI 是 LangChain 用来连接符合 OpenAI 标准接口的模型智谱就是其中之一from langchain_openai import ChatOpenAI# 2. 初始化模型 (配置大脑)# 这里我们配置了三个关键参数# - model: 我们用的是智谱的 GLM-4 模型# - openai_api_key: 你的通行证# - openai_api_base: 告诉 LangChain 不要去连 OpenAI 的服务器而是连智谱的服务器llm ChatOpenAI( modelglm-4, openai_api_key你的_API_KEY, # 记得在这里填入你的 Key openai_api_basehttps://open.bigmodel.cn/api/paas/v4/)# 3. 直接调用模型# invoke 就是调用的意思我们发给它一句话print(正在思考中...)response llm.invoke(你好请用鲁迅的语气夸我一下学编程很快。)# 4. 打印结果# response.content 才是模型真正回复的内容print(--- 回复内容 ---)print(response.content)运行方法python3 lesson1.py预期输出你会看到智谱 AI 用鲁迅的语气夸奖你类似正在思考中...--- 回复内容 ---哦你这位君子编程之道竟也能游刃有余...架构洞察这看似简单实则蕴含深意——接口标准化是可移植性的前提。想象一下如果没有统一的插座标准每换一个电器就要重新布线那将是灾难。LangChain 通过统一接口让你的代码可以在不同模型间自由迁移。第二步给 AI 加上记忆 - Memory目标让 AI 记住上下文实现多轮对话。问题分析现在的 AI 像一条金鱼记忆只有 7 秒。如果你告诉它我叫小明然后再问我叫什么它会一脸茫然。因为每次运行都是一次全新的开始。解决方案LangChain 的思路很简单——把之前的聊天记录打包一起发给它。创建文件lesson2.pyfrom langchain_openai import ChatOpenAI# 1. 导入三种消息类型# SystemMessage: 系统指令 (比如你是一个猫娘...)# HumanMessage: 用户说的话# AIMessage: AI 回复的话from langchain_core.messages import HumanMessage, AIMessage, SystemMessage# 2. 初始化模型 (配置和之前一样)llm ChatOpenAI( modelglm-4, openai_api_key你的_API_KEY, # 别忘了替换 Key openai_api_basehttps://open.bigmodel.cn/api/paas/v4/)# 3. 初始化记忆条# 我们用一个列表来保存所有的对话历史# 先给它定个调子你是一个资深的 Python 助教messages [ SystemMessage(content你是一个幽默的 Python 助教说话喜欢带点 emoji。)]print( 助教已上线(输入 exit 退出))# 4. 开启循环对话while True: # 获取用户输入 user_input input(\n 你: ) # 如果输入 exit 就结束 if user_input.lower() exit: print(再见) break # A. 把用户说的话包装成 HumanMessage存入记忆列表 messages.append(HumanMessage(contentuser_input)) # B. 把整个记忆列表 (包含之前的对话) 发给 AI print(Thinking...) response llm.invoke(messages) # C. 打印 AI 的回复 ai_reply response.content print(f 助教: {ai_reply}) # D. 关键一步把 AI 的回复也存入记忆列表 messages.append(AIMessage(contentai_reply))运行方法python3 lesson2.py测试记忆力你: 你好我叫张三助教: 你好张三 很高兴认识你...你: 你知道我叫什么名字吗助教: 当然知道你叫张三 架构洞察记忆的本质是什么不是什么黑科技而是把之前的对话记录打包一起发给模型。就像开会时你不能只告诉老板我同意你得先复述一遍前面讨论了什么老板才知道你同意的是什么。如果去掉代码中的 A 和 D 步骤messages列表里就永远只有那句系统指令AI 每次都看不到之前的对话。记忆的本质就是不断把新的聊天记录追加到清单里再重新发给模型。第三步与你的数据对话 - RAG检索增强生成目标让 AI 基于你提供的文档回答问题这是目前最火的应用场景。问题分析现在的 AI 虽然博学但它有两个大问题知识过期它不知道昨天刚发生的新闻私有数据盲区它不知道你们公司的内部文档解决方案RAG (检索增强生成) 就是给 AI 搞一场开卷考试。我们先把资料给它当你问问题时它先去资料里翻书检索找到答案后再总结给你生成。比喻RAG 就像给 AI 配了一个外接移动硬盘。模型本身的参数是内存RAG 是硬盘——内存有限但速度快硬盘容量大但需要检索。步骤 1安装额外依赖pip install langchain-community faiss-cpu步骤 2准备知识文档在你的代码文件夹里新建一个文本文件knowledge.txt写入一些只有你知道的秘密知识LangChain秘密档案1. 这里的程序员其实都是猫变的他们最爱吃的不是bug是猫条。2. 学习LangChain的秘诀是每天对着电脑大喊三声奥力给。3. 2025年的最佳编程语言是喵喵语。步骤 3创建 RAG 程序创建文件lesson3.pyimport osfrom langchain_openai import ChatOpenAI, OpenAIEmbeddingsfrom langchain_community.document_loaders import TextLoaderfrom langchain_text_splitters import CharacterTextSplitterfrom langchain_community.vectorstores import FAISSfrom langchain_core.prompts import ChatPromptTemplate# --- 配置 ---API_KEY 你的_API_KEY # 记得填 KeyBASE_URL https://open.bigmodel.cn/api/paas/v4/# 1. 配置大脑 (负责回答)llm ChatOpenAI( modelglm-4, openai_api_keyAPI_KEY, openai_api_baseBASE_URL)# 2. 配置眼睛 (Embeddings - 负责把文字变成数字方便搜索)# 智谱也提供了 embedding 模型我们这里用 embedding-2embeddings OpenAIEmbeddings( modelembedding-2, openai_api_keyAPI_KEY, openai_api_baseBASE_URL)print( 正在加载并处理文档...)# --- 第一步加载文档 ---loader TextLoader(knowledge.txt, encodingutf-8)documents loader.load()# --- 第二步切割文档 ---# 如果文档太长模型吃不消所以要切成小块text_splitter CharacterTextSplitter(chunk_size500, chunk_overlap0)docs text_splitter.split_documents(documents)# --- 第三步存入向量数据库 (建立书架) ---# 这一步会把文字变成向量存起来这样才能进行语义搜索vectorstore FAISS.from_documents(docs, embeddings)print(✅ 知识库建立完成)# --- 第四步检索与问答 ---# 这是一个特殊的 Chain专门用来做 RAGfrom langchain.chains.combine_documents import create_stuff_documents_chainfrom langchain.chains import create_retrieval_chain# 这是一个提示词模板告诉 AI请根据下面的 context (上下文) 来回答问题prompt ChatPromptTemplate.from_template(请根据下面的内容回答用户的问题context{context}/context用户问题{input})# 创建文档处理链 (负责把找出来的文档塞给 LLM)document_chain create_stuff_documents_chain(llm, prompt)# 创建检索链 (负责先去书架找书再交给上面的链)retriever vectorstore.as_retriever()retrieval_chain create_retrieval_chain(retriever, document_chain)# --- 开始提问 ---query 学习 LangChain 的秘诀是什么print(f\n❓ 提问: {query})response retrieval_chain.invoke({input: query})print(f 回答: {response[answer]})运行方法python3 lesson3.py预期输出AI 会基于knowledge.txt里的内容回答比如“学习 LangChain 的秘诀是每天对着电脑大喊三声’奥力给’。”架构洞察RAG 的数据流转文档加载把 PDF、Word 等文件读成文本智能分块每 500 字切一块关键是相邻块重叠 50 字——为什么因为如果从段落中间硬切上下文就断了向量化把文本转成 384 维向量这不是随机数字而是语义坐标语义检索用户提问时先在向量库里找最相关的文本块再让 LLM 基于这些文本回答核心创新用空间距离表达语义相似度把 NLP 问题转化为几何问题。意思相近的文本向量距离会很近——这种降维打击的思想极其优雅。第四步给 AI 装上双手 - Agents目标让 AI 学会使用工具如搜索网络、查天气、算数学。问题分析问 AI “现在比特币多少钱”它只能胡乱猜测让它算 23423 × 82342大概率算错。大模型天生不擅长精确计算和实时数据获取。解决方案Agent (代理) 的核心概念——当 AI 遇到自己不会的问题时它知道去使用工具。步骤 1安装搜索工具pip install duckduckgo-searchpip install -U ddgs步骤 2创建 Agent 程序创建文件lesson4.pyfrom langchain_openai import ChatOpenAI# 1. 导入搜索工具from langchain_community.tools import DuckDuckGoSearchRun# 2. 导入创建 Agent 的辅助函数from langchain.agents import create_tool_calling_agent, AgentExecutorfrom langchain_core.prompts import ChatPromptTemplate# --- 配置 ---API_KEY 你的_API_KEY # 记得填 KeyBASE_URL https://open.bigmodel.cn/api/paas/v4/# 1. 初始化模型 (大脑)llm ChatOpenAI( modelglm-4, openai_api_keyAPI_KEY, openai_api_baseBASE_URL)# 2. 准备工具 (双手)# 我们创建一个搜索工具实例search DuckDuckGoSearchRun()# 把工具放在一个列表里 (以后你可以往里面加日历工具、计算器工具等)tools [search]# 3. 创建 Prompt (任务书)# 我们需要告诉 AI你是一个可以调用工具的助手prompt ChatPromptTemplate.from_messages([ (system, 你是一个强大的助手。你可以使用工具来查找最新的信息。如果用户问的问题需要联网请务必使用搜索工具。), (user, {input}), (placeholder, {agent_scratchpad}), # 这是一个预留位置用来存放 AI 的思考过程])# 4. 组装 Agent (大脑 手 任务书)agent create_tool_calling_agent(llm, tools, prompt)# 5. 创建执行器 (监工)# verboseTrue 会打印出 AI 思考和调用工具的详细过程非常有趣agent_executor AgentExecutor(agentagent, toolstools, verboseTrue)# --- 开始运行 ---# 问一个它训练数据里肯定没有的问题 (比如最新的新闻)query 2024年奥运会是在哪里举办的结果如何print(f 用户提问: {query}\n)print(--- Agent 开始工作 ---)response agent_executor.invoke({input: query})print(\n--- 最终回答 ---)print(response[output])运行方法python3 lesson4.py预期输出你会看到 AI 的思考过程绿色/黄色文字 用户提问: 2024年奥运会是在哪里举办的结果如何--- Agent 开始工作 --- Entering new AgentExecutor chain...需要使用搜索工具...调用工具: duckduckgo_searchTitle: Paris 2024 Olympics......最终回答 ---2024年奥运会在法国巴黎举办...架构洞察Agent 的设计哲学是将决策和执行分离。模型不直接输出答案而是输出一个调用工具的指令框架负责执行工具并把结果喂回给模型模型再基于结果生成最终答案。这个循环可以重复多次直到问题解决。AI 从只会说进化到了既会想又会做。第五步给代码穿上外衣 - Streamlit 网页界面目标把黑乎乎的终端程序变成漂亮的网页应用。问题分析目前的程序都在终端里运行不够直观也不方便分享给朋友使用。如果能有一个网页界面就能像 ChatGPT 一样随时打开使用。解决方案Streamlit 是一个 Python 库专门用来快速构建数据应用的 Web 界面。最神奇的是你不需要懂 HTML、CSS、JavaScript完全用 Python 就能写出漂亮的网页。比喻Streamlit 就像给你的 Python 程序套上一个精美的外壳让它从命令行工具变成Web 应用。步骤 1安装 Streamlitpip install streamlit步骤 2创建网页版聊天机器人我们要把 Lesson 2 的带记忆聊天机器人搬到网页上。创建文件lesson5_streamlit.pyimport streamlit as st from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, AIMessage, SystemMessage # --- 1. 页面配置 --- st.set_page_config(page_title我的 AI 助手, page_icon) st.title( 我的专属 AI 聊天室) # --- 2. 初始化模型 --- # 为了防止每次页面刷新都重新连接模型我们加个缓存装饰器 (可选但推荐) st.cache_resource def get_llm(): return ChatOpenAI( modelglm-4, openai_api_key你的_API_KEY, # 记得填 Key openai_api_basehttps://open.bigmodel.cn/api/paas/v4/ ) llm get_llm() # --- 3. 初始化记忆 (Session State) --- # 如果暂存箱里没有消息记录我们就创建一个空的并放入系统指令 if messages not in st.session_state: st.session_state.messages [ SystemMessage(content你是一个乐于助人的 AI 助手回答请简洁明了。) ] # --- 4. 渲染聊天记录 --- # 每次刷新页面都把暂存箱里的历史消息画在屏幕上 for msg in st.session_state.messages: if isinstance(msg, HumanMessage): with st.chat_message(user): # 渲染用户的气泡 st.write(msg.content) elif isinstance(msg, AIMessage): with st.chat_message(assistant): # 渲染 AI 的气泡 st.write(msg.content) # --- 5. 处理用户输入 --- # st.chat_input 会在页面底部创建一个输入框 user_input st.chat_input(说点什么吧...) if user_input: # A. 显示用户输入 with st.chat_message(user): st.write(user_input) # B. 存入记忆 st.session_state.messages.append(HumanMessage(contentuser_input)) # C. 调用模型 (带着之前的记忆) with st.chat_message(assistant): with st.spinner(AI 正在思考...): # 显示一个加载转圈圈 response llm.invoke(st.session_state.messages) st.write(response.content) # D. 把 AI 的回复存入记忆 st.session_state.messages.append(AIMessage(contentresponse.content))运行方法Streamlit 的运行方式和普通 Python 脚本不一样。请在终端输入streamlit run lesson5_streamlit.py预期效果终端会自动打开你的默认浏览器通常地址是http://localhost:8501你会看到一个漂亮的聊天界面类似 ChatGPT对话历史会保留在页面上底部有输入框可以连续对话每次刷新页面历史记录都还在架构洞察Session State 的关键设计Streamlit 有一个重要机制每次你点击按钮或输入内容整个 Python 脚本会从头到尾重新运行一遍。这意味着什么如果没有st.session_state每次输入都会创建一个新的空messages列表AI 就会失忆。st.session_state的作用就是在页面刷新时保持数据不丢失。你可以把它理解为网页的暂存箱第一次访问页面创建空的messages列表用户输入 “你好”追加到列表刷新页面从暂存箱读取完整列表AI 回复追加到列表刷新页面从暂存箱读取完整列表用户再次输入继续追加…实用技巧你可以在侧边栏添加控制选项比如调节 AI 的创造力temperature 参数# 在文件开头添加侧边栏配置 with st.sidebar: st.header(⚙️ 设置) temperature st.slider(创造力, 0.0, 1.0, 0.7, 0.1) # 更新 llm 配置 llm ChatOpenAI( modelglm-4, openai_api_key你的_API_KEY, openai_api_basehttps://open.bigmodel.cn/api/paas/v4/, temperaturetemperature )PART 05 - LangGraph 进阶流程编排的艺术为什么需要 LangGraphLangChain 的 Chain(链)是单向流动的A → B → C → 结束。但现实场景往往需要条件分支如果是数学题走 A 路径闲聊走 B 路径循环迭代写文章 → 审核 → 不满意就重写 → 再审核 → 直到满意并行处理同时调用多个工具再汇总结果LangGraph 引入了图结构(Graph)可以表达任意复杂的流程。实战条件路由 - 红绿灯式的智能分流目标做一个智能分流系统。用户输入 → AI 判断意图 → 如果是数学题走 A 路如果是闲聊走 B 路。步骤 1安装 LangGraphpip install langgraph步骤 2创建条件路由程序创建文件lesson6_router.pyimport osfrom typing import TypedDict, Literalfrom langgraph.graph import StateGraph, ENDfrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.messages import SystemMessage, HumanMessage# --- 配置 ---API_KEY 你的_API_KEY # 别忘了替换 KeyBASE_URL https://open.bigmodel.cn/api/paas/v4/llm ChatOpenAI( modelglm-4, openai_api_keyAPI_KEY, openai_api_baseBASE_URL)# --- 1. 定义 State (数据的货箱) ---# 我们规定这个箱子里只能装这三样东西class AgentState(TypedDict): question: str # 用户的原始问题 classification: str # 分类结果 (比如 math 或 general) answer: str # 最终生成的回答print(✅ 状态定义完成准备开始构建节点...)# --- 2. 定义节点 (干活的函数) ---# 节点 A: 分类员def classify_input(state: AgentState): # 拿到用户的问题 question state[question] # 让 AI 做选择题 response llm.invoke( [SystemMessage(content你是一个分类器。如果用户的问题是数学计算请只回复 math。如果是其他问题请只回复 general。不要有多余的废话。), HumanMessage(contentquestion)] ) # 核心步骤更新 State 中的 classification 字段 return {classification: response.content.strip()}# 节点 B: 数学家def handle_math(state: AgentState): question state[question] print( 正在调用数学专家...) response llm.invoke( [SystemMessage(content你是一个数学专家。请严谨地计算并给出答案。), HumanMessage(contentquestion)] ) return {answer: response.content}# 节点 C: 聊天员def handle_general(state: AgentState): question state[question] print( 正在调用闲聊助手...) response llm.invoke( [SystemMessage(content你是一个幽默的聊天助手。), HumanMessage(contentquestion)] ) return {answer: response.content}# --- 3. 定义变轨逻辑 (条件边) ---def route_logic(state: AgentState): # 看一眼分类员的结果 classification state[classification] # 决定下一步去哪里 if math in classification: return math_expert else: return general_assistant# --- 4. 组装图表 (The Graph) ---workflow StateGraph(AgentState)# A. 添加节点 (给工人挂牌)workflow.add_node(classifier, classify_input)workflow.add_node(math_expert, handle_math)workflow.add_node(general_assistant, handle_general)# B. 设置起点workflow.set_entry_point(classifier)# C. 设置条件边 (关键步骤)# 意思就是从 classifier 出来后执行 route_logic 函数# 如果函数返回 math_expert就去 math_expert 节点# 如果函数返回 general_assistant就去 general_assistant 节点workflow.add_conditional_edges( classifier, route_logic, { math_expert: math_expert, general_assistant: general_assistant })# D. 设置终点# 数学家和聊天员干完活就直接结束workflow.add_edge(math_expert, END)workflow.add_edge(general_assistant, END)# E. 编译图表app workflow.compile()print(✅ 路由系统已启动)# --- 5. 测试运行 ---# 测试 1: 数学题print(\n 测试 1: 输入 123 * 456 等于几?)inputs {question: 123 * 456 等于几?}for output in app.stream(inputs): # 打印每一步的节点名称和输出方便观察 for key, value in output.items(): print(f - 经过节点: {key}) print(f 结果: {value})# 测试 2: 闲聊print(\n 测试 2: 输入 给我讲个笑话)inputs {question: 给我讲个笑话}for output in app.stream(inputs): for key, value in output.items(): print(f - 经过节点: {key}) print(f 结果: {value})运行方法python3 lesson6_router.py预期输出你会看到不同的问题走不同的路径测试 1: 数学题 - 经过节点: classifier - 经过节点: math_expert 结果: 123 * 456 56088测试 2: 闲聊 - 经过节点: classifier - 经过节点: general_assistant 结果: 为什么程序员喜欢用暗色主题因为光太亮会吸引bug架构洞察这种设计的好处是流程控制逻辑从业务代码中剥离。修改路由规则不需要动核心代码符合开闭原则。你可以轻松添加更多分支比如翻译、“代码生成等而不会让代码变成意大利面条”。实战循环流程 - 自我修正的 AI 作家目标构建一个追求完美的作家 Agent。写初稿 → 检查质量 → 如果不达标返回重写 → 再检查 → 直到满意。创建文件lesson7_loop.pyimport osfrom typing import TypedDictfrom langgraph.graph import StateGraph, ENDfrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.messages import SystemMessage, HumanMessage# --- 配置 ---API_KEY 你的_API_KEY # 记得填 KeyBASE_URL https://open.bigmodel.cn/api/paas/v4/llm ChatOpenAI( modelglm-4, openai_api_keyAPI_KEY, openai_api_baseBASE_URL)# --- 1. 定义 State (新的数据结构) ---class RevisionState(TypedDict): topic: str # 写作的主题 (例如: 关于AI的科普文章) draft: str # 当前的草稿内容 critique: str # 编辑的反馈意见 iterations: int # 已经修改的次数print(✅ 循环状态定义完成)# --- 2. 定义节点 (干活的函数) ---# 节点 A: 初稿撰写员/修改员def draft_writer(state: RevisionState): topic state[topic] draft state.get(draft) critique state.get(critique) # 第一次写作和后续修改使用不同的 Prompt if draft is None: print(✍️ 首次撰写初稿...) prompt_text f你是一位优秀的作家。请就以下主题撰写一篇 500 字的简短文章{topic} else: print(f 收到编辑意见进行第 {state[iterations] 1} 次修改...) prompt_text f你正在修改一篇关于 {topic} 的文章。这是编辑的意见{critique}。请根据意见修改文章并重新输出完整的文章。 response llm.invoke( [SystemMessage(content你是一位专业作家请专注于内容和逻辑的改进。), HumanMessage(contentprompt_text)] ) # 核心步骤更新 State 中的 draft 字段 return {draft: response.content}# 节点 B: 专业编辑def editor_critique(state: RevisionState): draft state[draft] print( 编辑正在审阅草稿...) # 加入了严格的负面约束 response llm.invoke( [SystemMessage(content 你是一位苛刻的编辑。请阅读草稿并提出改进意见。 如果文章已经非常好字数合理逻辑清晰请**只回复 PASS**。 如果需要修改请给出不超过三点的具体修改意见。 **【严禁格式要求】**在你的回复中**严禁包含**任何 Markdown 格式、代码块、特殊字符或工具调用。你的回复必须是纯文本的建议或 PASS。 ), HumanMessage(contentdraft)] ) critique response.content.strip() print(f - 编辑反馈: {critique}) # 核心步骤更新 State 中的 critique 字段 return {critique: critique}# 节点 C: 计数员def increment_iteration(state: RevisionState): current_iter state[iterations] new_iter current_iter 1 return {iterations: new_iter}# --- 3. 定义循环的红绿灯 ---def should_continue(state: RevisionState): critique state[critique] # 判断条件如果 critique 包含了 PASS 字符串 if PASS in critique: return end # 批准通过结束循环 else: return continue # 需要修改继续循环# --- 4. 组装循环图表 (The Graph) ---workflow StateGraph(RevisionState)# A. 添加所有节点 (工人)workflow.add_node(draft_writer, draft_writer)workflow.add_node(editor_critique, editor_critique)workflow.add_node(increment_iteration, increment_iteration)# B. 设置起点workflow.set_entry_point(draft_writer)# C. 设置普通边 (写作 - 审阅)workflow.add_edge(draft_writer, editor_critique)# D. 设置条件边 (循环的关键!)# 从审阅出来后执行 should_continue 函数# 如果返回 end流程结束# 如果返回 continue流程转到计数员workflow.add_conditional_edges( editor_critique, should_continue, { end: END, continue: increment_iteration, })# E. 设置循环边 (计数员 - 再次撰写)# 计数员完成后跳回到撰写节点开始下一轮修改workflow.add_edge(increment_iteration, draft_writer)# F. 编译图表app workflow.compile()print(✅ 完美循环系统已启动)# --- 5. 测试运行 ---# 设定一个主题并初始化状态 (iterations 从 0 开始)topic_to_write 关于智能手机对青少年影响的利弊分析print(f\n 开始撰写主题: {topic_to_write})inputs { topic: topic_to_write, iterations: 0}# 运行循环 (使用 invoke它会一次性跑完所有循环直到 END)final_state app.invoke(inputs)print(\n--- 任务完成 ---)print(f最终修改次数: {final_state[iterations]} 次)print(f最终编辑反馈: {final_state[critique]})print(f\n最终文章:\n{final_state[draft]})运行方法python3 lesson7_loop.py预期输出你会看到 AI 反复修改文章直到编辑满意✍️ 首次撰写初稿... 编辑正在审阅草稿... - 编辑反馈: 1. 需要增加具体数据支持... 2. 段落逻辑需要优化... 收到编辑意见进行第 1 次修改... 编辑正在审阅草稿... - 编辑反馈: 文章已经很好结构清晰。PASS--- 任务完成 ---最终修改次数: 1 次架构洞察循环不是盲目重复而是带着反馈的迭代。每次循环都把上一次的编辑意见传给撰写节点这样 AI 知道哪里需要改进。Prompt 工程的关键我们在编辑节点强调严禁包含 Markdown、代码块为什么因为 LLM 很礼貌如果不管教它可能回复“是的这是一个好文章。” 而不是单独的 “PASS”导致程序无法识别终止条件陷入无限循环。PART 07 -下一步学习通过以上7步我们现在已经掌握了所有核心积木链条、记忆、RAG、Agent以及让它们变得智能的 LangGraph。接下来我们将从核心架构转向应用深度。将会陆续开展以下几个方面的实操教程多智能体协作 (Multi-Agent Systems)探索 LangGraph 的终极形态让多个 Agent 像一个团队一样工作。例如我们创建一个团队包括一个“研究员”、一个“总结员”和一个“审批员”它们在 LangGraph 中相互协作、传递信息共同完成一个复杂的任务。RAG 生产级优化 (Advanced Retrieval)深入 RAG知识检索的难点。如何处理复杂的 PDF、表格、以及索引优化策略如 RAG-Fusion, Small-to-Large Chunking让你的知识库应用在真实场景中更聪明、更精确。结构化数据与工具整合 (Structured Output Tools)专注于数据的稳定性和可靠性。如何强制 LLM 严格输出 JSON 或 Pydantic 格式的数据这是自动化流程的关键以及如何将更多的外部工具如计算器、数据库查询安全可靠地集成到 Agent 中。记住框架是手段解决问题才是目的。当你的业务需求超出框架能力时不要犹豫——基于你学到的架构思想自己实现定制版本。如何学习AI大模型 “最先掌握AI的人将会晚掌握AI的人有竞争优势晚掌握AI的人比完全不会AI的人竞争优势更大”。在这个技术日新月异的时代不会新技能或者说落后就要挨打。老蓝我作为一名在一线互联网企业保密不方便透露工作十余年指导过不少同行后辈。帮助很多人得到了学习和成长。我是非常希望可以把知识和技术分享给大家但苦于传播途径有限很多互联网行业的朋友无法获得正确的籽料得到学习的提升所以也是整理了一份AI大模型籽料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、落地项目实战等免费分享出来。点击即可获取大模型学习包2026年最新版AI大模型学习路线图100套AI大模型商业化落地方案100集大模型视频教程200本大模型PDF书籍LLM面试题合集AI产品经理资源合集大模型学习路线想要学习一门新技术你最先应该开始看的就是学习路线图而下方这张超详细的学习路线图按照这个路线进行学习学完成为一名大模型算法工程师拿个20k、15薪那是轻轻松松视频教程首先是建议零基础的小伙伴通过视频教程来学习其中这里给大家分享一份与上面成长路线学习计划相对应的视频教程。文末有整合包的领取方式技术书籍籽料当然当你入门之后仅仅是视频教程已经不能满足你的需求了这里也分享一份我学习期间整理的大模型入门书籍籽料。文末有整合包的领取方式大模型实际应用报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。文末有整合包的领取方式大模型落地应用案例PPT光学理论是没用的要学会跟着一起做要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。文末有整合包的领取方式大模型面试题答案截至目前大模型已经超过200个在大模型纵横的时代不仅大模型技术越来越卷就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道我总结了大模型常考的面试题。文末有整合包的领取方式领取方式这份完整版的 AI大模型学习籽料我已经上传CSDN需要的同学可以微⭐扫描下方CSDN官方认证二维码免费领取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询