双非AI求职备战 Day23-28LangChain LangGraph构建有状态Agent工作流我把代码和修改过程都上传到了我的github仓库点击蓝字即可跳转前言熟悉OpenAI官方SDK之后学习国内生态更常用的LangChain以及LangGraph图式Agent框架。LangGraph可以可视化、可控地编排Agent的执行流程面试高频考点。1. LangChain 最小Agent示例使用create_agent快速创建Agent开箱即可调用工具。感受LangChain封装度很高一行代码就能搭建基础智能代理快速验证想法。提交2d8f4b5 用langchain框架跑了一遍基础的东西使用起来很方便下面是我的代码importosfromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI# 用智谱OpenAI 兼容接口modelChatOpenAI(modelglm-4-flash,api_keyAPI密钥,base_urlhttps://open.bigmodel.cn/api/paas/v4)defget_weather(city:str)-str:查询指定城市的天气。参数 city 是城市名。returnf{city}今天晴天25度agentcreate_agent(modelmodel,tools[get_weather],system_prompt你是一个助手可以用工具查天气。)resultagent.invoke({messages:[{role:user,content:太原天气怎么样}]})print(result[messages][-1].content)2. LangGraph基础状态图核心概念学习StateGraph状态图、节点Node、边Edge。先搭建最简单线性图节点顺序执行无循环分支理解图编排的基础思想。提交c1666ab 用langGraph框架跑了一遍基础的东西最基础的图一条直线没有循环fromlanggraph.graphimportStateGraph,START,ENDfromlangchain_openaiimportChatOpenAIfromtypingimportTypedDict# 1. 定义状态图里流转的数据classState(TypedDict):question:stranswer:str# 2. 定义节点一个函数接收状态返回更新modelChatOpenAI(modelglm-4-flash,api_key你的APIKey,base_urlhttps://open.bigmodel.cn/api/paas/v4)defanswer_node(state:State):responsemodel.invoke(state[question])return{answer:response.content}# 3. 建图graphStateGraph(State)graph.add_node(answer,answer_node)graph.add_edge(START,answer)graph.add_edge(answer,END)appgraph.compile()# 4. 运行resultapp.invoke({question:用一句话解释什么是Agent})print(result[answer])3. LangGraph RAG 融合把之前手写完成的RAG检索模块封装成LangGraph可调用的工具。添加环境变量开启HF离线模式HF_HUB_OFFLINE在无网络环境加载本地向量模型。提交00ec9db 把RAG加到agent里面了…加了# 开启HF离线模式importosimporttimeimportrequestsimportstreamlitasst# HF离线模式直接读本地缓存os.environ[HF_HUB_OFFLINE]1os.environ[TRANSFORMERS_OFFLINE]1fromtypingimportTypedDict,Annotatedimportnumpyasnpimportfaissfromsentence_transformersimportSentenceTransformerfromlanggraph.graphimportStateGraph,START,ENDfromlanggraph.graph.messageimportadd_messagesfromlanggraph.prebuiltimportToolNode# 替换成Sqlite持久化fromlanggraph.checkpoint.sqliteimportSqliteSaverfromlangchain_openaiimportChatOpenAIfromlangchain_core.toolsimporttoolfromlangchain_core.messagesimportHumanMessageimportstreamlitasst# 1. RAG 资源 model_embedSentenceTransformer(BAAI/bge-small-zh-v1.5)indexfaiss.read_index(my_index.faiss)withopen(../my-agent/my_docs.txt,encodingutf-8)asf:documents[p.strip()forpinf.read().split(\n\n)ifp.strip()]# 2. 工具 tooldefsearch_my_docs(query:str)-str:搜索我的资料库。当用户问关于太原、山西的问题时使用。t0time.time()q_vectormodel_embed.encode(query).astype(float32)_,indicesindex.search(np.array([q_vector]),3)res\n.join(documents[i]foriinindices[0])t1time.time()print(f【RAG检索总耗时】{t1-t0:.2f}s)returnrestooldefget_weather(city,**kwargs):forattemptinrange(3):try:urlfhttps://wttr.in/{city}?format3responserequests.get(url,timeout10)returnresponse.textexceptExceptionase:ifattempt2:# 最后一次还失败returnf查天气失败{e}time.sleep(1)tools[search_my_docs,get_weather]# 3. 状态与模型 classState(TypedDict):messages:Annotated[list,add_messages]modelChatOpenAI(modelglm-4-flash,api_keyAPI密钥,base_urlhttps://open.bigmodel.cn/api/paas/v4).bind_tools(tools)defllm_node(state:State):t0time.time()respmodel.invoke(state[messages])t1time.time()print(f【LLM API耗时】{t1-t0:.2f}s)return{messages:[resp]}defshould_continue(state:State):returntoolsifstate[messages][-1].tool_callselseEND# 4. 建图 SQLite记忆 graphStateGraph(State)graph.add_node(llm,llm_node)graph.add_node(tools,ToolNode(tools))graph.add_edge(START,llm)graph.add_conditional_edges(llm,should_continue,{tools:tools,END:END})graph.add_edge(tools,llm)# 打开sqlite数据库文件名叫 chat_memory.dbconn_stringchat_memory.dbwithSqliteSaver.from_conn_string(conn_string)asmemory:appgraph.compile(checkpointermemory)config{configurable:{thread_id:user_1}}# 5. 运行 print(输入「退出」结束对话)whileTrue:questioninput(你).strip()ifquestionin(退出,exit,quit):breakifnotquestion:continueresultapp.invoke({messages:[HumanMessage(contentquestion)]},configconfig)print(Agent,result[messages][-1].content)4. ToolNode自动工具分发 多轮记忆ToolNode(tools)自动处理工具调用分发不用手写工具路由逻辑。整合多轮对话记忆持久化实现完整的RAG Agent工作流。提交7878cda 添加了多轮对话功能实现了记忆功能使用了ToolNode(tools)自动分配阶段收获LangGraph把Agent从简单循环升级成状态驱动的图工作流可以实现分支、循环、人工介入。企业很多生产级Agent都基于LangGraph开发也是AI岗位面试重点。