在当前的 AI 架构中,如果把 LLM(大模型) 比作一个人的“大脑”,那么 Agent(智能体) 就是这个人的“全身”——包括了手脚、感官和记忆。
简单来说:LLM 是 Agent 的核心驱动引擎,但 Agent 是 LLM 走向现实世界的进化形态。
这是业界公认的智能体定义。LLM 本身只是一个“文本补全器”,而 Agent 是一个“任务解决者”。
1. LLM:大脑(The Brain)
- 角色:负责推理、逻辑判断、自然语言理解。
- 局限:它没有实时观测能力(不知道现在几点),没有双手(不能去查数据库),且容易遗忘(上下文长度有限)。
2. 规划(Planning):思维链
- 关系:Agent 利用 LLM 的推理能力,将复杂任务拆解成子任务。
- 技术表现:如 CoT (Chain of Thought)。比如你让 HR Agent 招人,它会先写出步骤:1. 筛选简历 -> 2. 预约面试 -> 3. 发送 Offer。
3. 记忆(Memory):短期与长期
- 短期记忆:利用 LLM 的 Context Window(如上下文对话)。
- 长期记忆:利用你熟悉的 Milvus (向量数据库)。Agent 会把过去的经验存入 Milvus,需要时再检索出来给 LLM 看。
4. 工具使用(Tool Use):感官与手脚
- 关系:这是 Agent 最关键的特征。Agent 可以调用外部 API(如查询 MySQL 报表、发送钉钉通知)。
- 技术表现:Function Calling。LLM 决定“我要查一下某人的薪资”,Agent 负责去执行 SQL。
以你之前想做的 “入职自动化” 为例:
- LLM 负责“想”:
- 用户输入:“帮王小明办入职。”
- LLM 告诉 Agent:“办入职需要:1. 生成合同;2. 分配工位;3. 发送邮件。”
- Agent 负责“做”:
- Action 1:Agent 调用 MySQL 接口读取王小明的个人信息。
- Action 2:Agent 调用电子签章 API 生成合同。
- Action 3:Agent 发现缺了王小明的身份证号,主动给王小明发个微信:“麻烦提供一下证件号”。(这里 Agent 体现了自主性)
- Temporal 负责“稳”:
- Agent 的这些动作由 Temporal Workflow 编排。如果电子签章接口挂了,Temporal 负责重试,确保 Agent 的意图最终达成。
- LLM 是工具:你调用它,它回答你。
- Agent 是同事:你给它一个目标(Goal),它自己去想办法、找工具、处理异常,最后给你一个结果。
AI 时代的 SaaS 系统,竞争的不再是谁的 LLM 强(大家都在调 GPT 或 Claude 的接口),而是谁的 Agent 设计得更精妙——谁能把 LLM、Milvus 记忆、Temporal 流程完美结合。
在分布式系统架构中,我们可以把 Workflow 比作“导演/编排者”,把 Activity 比作“执行者/动作”,而 Agent 则是这两者在 AI 逻辑下的“灵魂升级版”。
为了让你彻底理清这两者的关系,我们可以从以下三个维度进行拆解:
在 Agent 的理论框架中,有一个核心概念叫 Function Calling (工具调用)。
- 关系:当你给 Agent 装备了“查询 MySQL”或“发送邮件”的能力时,这些能力的物理实现其实就是一个个 Activity。
- 例子:
- Agent 决定:“我现在需要获取王小明的薪资。”(这是推理)
- Activity 执行:
get_salary_from_mysql_activity(emp_id)。(这是动作)
结论:Activity 是 Agent 能够触达外部世界(数据库、第三方 API、文件系统)的唯一通道。
这是理解两者差异的关键。
现在的趋势是将两者融合。在这种架构下,Workflow 里的某一个节点不再是简单的代码,而是一个 LLM 决策节点。
一个典型的 AI HR 入职场景:
- Workflow 启动。
- AI Activity (LLM):分析入职合同,发现少了“签字日期”。
- 决策分支:
- 如果逻辑是死代码(传统 Activity),它可能只会报错。
- 如果是 Agent,它会动态生成一封催促邮件,并调用
send_email_activity。
- 状态流转:Agent 利用 Temporal 的 Signal 功能等待员工回信,收到后继续下一步。
- 缺乏“大脑”:Activity 只是
def func(),它不会思考。它只会接收input并产出output。 - 缺乏“反思”:Agent 执行完一个动作后,会观察结果(Observation),判断是否符合预期。Activity 执行失败了只会按退避算法(Exponential Backoff)重试,不会换一种方案尝试。
- 无状态 vs 状态机:Activity 理论上应该是无状态的(Stateless),而 Agent 需要依赖 Memory (Redis/Milvus) 来维持长期的任务状态。
在你的 HR 系统中,你应该这样设计:
- 用 Activity 封装你的业务原子操作(如:读写 MySQL、在 Milvus 搜索简历、生成 PDF)。这些是 Agent 的“手脚”。
- 用 Agent (LLM) 编写业务的逻辑判断。这是 Agent 的“大脑”。
- 用 Temporal Workflow 编排整个过程。这是 Agent 的“骨骼/中枢神经”,确保任务在断网、宕机时不会丢失,且能长达数天甚至数周地运行下去。
简单来说:Agent 负责“做出聪明的选择”,而 Activity 负责“把选好的事情做稳”。
— Temporal扮演的角色
在 AI 时代的高级架构中,Temporal 扮演的角色可以被定义为:分布式系统的“中枢神经”与 AI Agent 的“生命保障系统”。
如果把 LLM 比作大脑,LangGraph 比作逻辑电路,那么 Temporal 就是确保这一切在现实世界(会有断网、宕机、超时)中能百分之百落地的基石。
1. 状态的“永动机” (Durable Execution)
在处理 HR 业务(如入职流程、复杂的背调)时,任务往往跨越数天。
- 传统做法:你需要用定时任务、数据库状态位、复杂的
if/else来记录流程跑到了哪。 - Temporal 角色:它让代码具备“断点续传”的能力。即便服务器在执行 Activity 时重启,Temporal 也会通过 Event Sourcing(事件回溯) 自动恢复进度。
2. AI Agent 的“身体约束器” (Reliability Layer)
AI 是概率性的,经常会超时或报错。
- 角色内容:它为不稳定的 AI 调用提供了指数退避重试(Retry Policy)。
- 比喻:Agent 像个聪明的孩子,但他可能会摔倒(接口报错)。Temporal 是那个永远在他身后扶着他、让他重新站起来继续走的人。
3. 异构系统的“粘合剂” (Orchestrator)
HR 系统需要对接 MySQL、Milvus、钉钉 API、电子签章等。
- 角色内容:它将这些分布式的、语言无关的操作编排成一个顺序流。它解决了分布式事务中的“一致性”难题——如果 A 成功 B 失败,Temporal 负责触发补偿逻辑(Saga Pattern)。
- 解决 LLM 的“慢”与“贵”:
大模型推理很慢。Temporal 允许你异步处理这些昂贵的调用,并在完成后通过 Signal 或 Query 通知前端,极大地优化了 SaaS 用户的体验。 - 人工干预 (Human-in-the-loop):
很多 HR 决策不能全靠 AI。Temporal 支持流程暂停(Wait),等待 HR 手动点击“审批”信号后,Agent 自动根据审批结果继续执行。 - 可观测性 (Visibility):
通过 Temporal UI,你可以清晰地看到 Agent 思考到了哪一步,哪次 Activity 报错了,这在调试复杂的 AI Agent 时是不可或缺的“上帝视角”。
在你的 SaaS HR 项目中,Temporal 扮演的是底层法律规章的角色。
“LLM 负责把事想全,LangGraph 负责把事想通,而 Temporal 负责把事办成。”
如果你已经理解了 Temporal (编排器)、LLM (大脑) 和 Activity (手脚) 的关系,那么理解 LangGraph 就非常容易了:
LangGraph 的角色是“Agent 的大脑连接器”和“状态状态机”。
如果说传统的 LLM 是线性的(问->答),那么 LangGraph 让 LLM 变成了环形的(思考->行动->观察->再思考)。
LangGraph 是 LangChain 推出的一个库,专门用于构建循环型(Cyclic)的 Agent 工作流。
在没有 LangGraph 之前,大模型只能做简单的“思维链”。有了 LangGraph 后,你可以定义一个复杂的有向图(Graph),让 AI 在不同的节点(Node)之间跳跃,甚至“打道回回府”去修正错误。
我们可以通过对比你已经熟悉的组件来定位它:
- Nodes (节点):
- 相当于你定义的函数。比如一个节点负责“查简历”,一个节点负责“写评价”。
- Edges (边):
- 决定了从一个节点走到下一个节点的规则。最强大的是 Conditional Edges (条件边):LLM 根据上一步的结果决定是“完成任务”还是“回去重做”。
- State (状态):
- 这是 LangGraph 的灵魂。它在图的流转过程中维护一个全局对象,所有节点都可以读写这个状态。这解决了 LLM 容易“忘词”的问题。
在做 HR SaaS 时,你可能会遇到这种场景:“AI 筛选简历,如果发现简历缺少联系方式,就去补充搜索;如果搜不到,就标记为待定。”
- 普通代码:你会写一堆复杂的
if/else,很快就会乱掉。 - LangGraph:你画一张图。
- 节点 A:筛选简历。
- 条件边:有联系方式吗?有 -> 节点 B;没有 -> 节点 C。
- 节点 C:联网搜索。搜索成功 -> 回到节点 A 重新处理。
你可能会问:“既然 LangGraph 能跑工作流,我还要 Temporal 干嘛?” 这是一个非常关键的架构选型问题:
- 粒度不同:
- LangGraph 负责“微观循环”:比如让 AI 迭代 5 次去优化一段文案。它是运行在内存里的逻辑,如果断电了,这个循环就没了。
- Temporal 负责“宏观持久”:比如一个入职流程要跑 7 天。它保证即便服务器重启,流程也能从上次停下的地方继续。
- 协作模式:
- **实践:在 Temporal 的一个 Activity 内部运行 LangGraph。
- 逻辑:Temporal 启动入职任务 -> 调用一个 Activity -> Activity 启动 LangGraph 让 AI 疯狂思考和调用工具 -> LangGraph 给出最终结果 -> Temporal 继续跑后续的财务/行政流程。
- 如果你只是想让 AI 给报表写个总结,你不需要 LangGraph。
- 如果你想做一个能自我纠错、能多 Agent 协作(比如一个 AI 写代码,另一个 AI 找 Bug,循环往复)的 HR 智能 Agent,LangGraph 就是那个帮你管理这些复杂跳转逻辑的地图。
简单来说:LangGraph 给了 AI “反复横跳”和“自我反思”的逻辑框架。
基于你已经掌握的 Temporal (骨骼)、LangGraph (神经回路)、LLM (大脑) 和 Milvus/MySQL (记忆),我们要构建的不再是一个简单的脚本,而是一个具备“自愈能力”和“深度推理能力”的工业级智能体 (Industrial Agent)。
实现一个“聪明”Agent 的核心在于:不要让它只做线性选择,要让它在“思考-行动-观察-重试”的循环中运行。
为了平衡“灵活性”与“可靠性”,我们采用分层架构:
- 宏观层 (Temporal):负责流程的持久化。处理跨天任务、超时重试、人工审批(Signal)。
- 微观层 (LangGraph):负责任务的决策逻辑。在 Activity 内部运行,处理复杂的推理、纠错和多次尝试。
1. 定义 Agent 的“大脑状态” (LangGraph State)
在 LangGraph 中,我们要定义一个 State 对象,它像一个黑匣子,记录 AI 思考的全过程。
class AgentState(TypedDict):
resume_text: str search_queries: List[str] # AI 决定去搜什么 found_evidence: List[str] # 找到的证据 is_verified: bool # 是否通过校验 loop_count: int # 循环次数,防止死循环
2. 构建“反复横跳”的逻辑图 (LangGraph Nodes)
- Node A (Analyzer): 提取简历关键点,发现有疑点(如离职时间对不上)。
- Node B (Searcher): 调用外部工具(Activity)去全网搜索或查内部库。
- Node C (Validator): 对比搜索结果。如果匹配,结束;如果不匹配,打回 Node A 重新分析。
3. 将 LangGraph 封装进 Temporal Activity
这是最关键的一步,它让 Agent 具备了“死而复生”的能力。
@activity.defn async def smart_research_activity(resume_id: str) -> dict:
# 1. 从 MySQL/Milvus 获取数据 data = fetch_resume_data(resume_id) # 2. 启动 LangGraph 运行循环推理 app = workflow.compile() final_state = await app.ainvoke({"resume_text": data.text}) # 3. 返回最终聪明决策 return final_state["analysis_report"]
1. 赋予它“长期记忆” (Milvus RAG)
普通的 Agent 每次对话都是失忆的。聪明的 Agent 会在决策前先查 Milvus:
- 操作:Agent 在执行动作前,先检索过去类似的案例:“上次遇到华为背景的候选人,我们重点关注了哪些技术点?”
- 效果:Agent 的表现会随使用时间的增加而越来越像一个经验丰富的 HR。
2. 引入“反思”机制 (Self-Reflection)
在 LangGraph 的 Edge(边)逻辑中,增加一个 Critique(批判) 节点。
- 逻辑:LLM 生成报告后,交给另一个“面试官角色”的 LLM 实例去挑刺。如果评分低于 80,自动回退到上一步重写。
3. 动态工具调用 (Function Calling)
不要在代码里写死调用哪个 SQL。
- 做法:给 Agent 提供一个工具箱(包含:查询薪资、查询考勤、搜索简历)。
- 表现:Agent 会根据用户的模糊需求(“帮我看看研发部谁最辛苦”),自主决定先去查考勤 Activity,再查加班申请 Activity。
- 最大循环限制:在 LangGraph 状态中记录
loop_count。如果 AI 陷入死循环(反复确认一个信息),强制退出并报错。 - Temporal 断点续传:如果 LangGraph 在运行中服务器宕机,Temporal 会重新启动该 Activity。你可以结合 LangGraph 的
checkpointer将中间状态存入 Redis,实现“思考进度”的恢复。
实现一个聪明的 Agent,本质上是在用“代码的确定性”去包裹“AI 的不确定性”。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/251574.html