Julep
免费
Julep 提供 Agent 任务编排、工具调用与状态管理能力,帮助团队把多步骤 AI 自动化流程落地到生产有境。
Julep
Julep 的核心参数与统计
Julep 是一个面向生产有境的 Python 原生 Agent 编排框架,官方定位为"durable, composable AI agents"——把 Agent 从临时脚本提升为可崩溃恢复、可精确重试、每一步都可追溯的生产级数据流。它不是又一个 LLM 聊天封装,而是一套从流程定义到生产部署的完整工程体系。
| 项目 | 公开信息 |
|---|---|
| 官方定位 | Durable, composable AI agents — flows that crash and resume, retry safely, and explain every step |
| 交付形态 | Python SDK(原生)+ CLI + API(v3 重写后以 Python native 为主) |
| 开源许可 | Apache-2.0(GitHub 公开仓库) |
| 最新版本 | 3.0.0rc3(2026-07-14,pyproject.toml 确认) |
| 社区规模 | 约 6,600 stars、971 forks、20 watchers |
| 主要语言 | Python 97.6%、HCL 1.1%、Shell 0.7% |
| 支持平台 | Python 3.8+、Node.js 16+(SDK)、API |
| 持久化引擎 | Temporal(可选)、DBOS/Postgres(可选) |
| 官方文档 | docs.julep.ai |
产品形态的演进:Julep 经历了从 v1 API 平台到 v3 Python 原生框架的彻底重构。v1 是一个托管控制面 + API 形态的 Agent 平台,v3 则完全转向"define-by-construction"的 Python @flow 模式——开发者用标准 Python 代码定义流程,框架自动编译为不可变 IR(中间表示),再通过可选的后端(Temporal/DBOS)获得持久化执行能力。这意味着 v3 不再是一个"平台",而是一个可以嵌入任何 Python 项目的库 + CLI。
一句话简评:Julep 不是让模型更聪明,而是让 Agent 流程像生产级软件一样可调试、可恢复、可审计。
宣传核验:Julep 官方强调的"flows that crash and resume, retry safely, and explain every step"并非营销话术——其核心架构确实围绕"可恢复性"设计。@flow 编译后的 IR 包含完整的步骤依赖图,配合 Temporal/DBOS 可实现任意节点的精确重放。这对生产级 Agent 场景是真实痛点,但对一次性脚本场景则显得过重。
Julep 的用户与市场认可
Julep 目前处于"技术社区认可先行、商业验证后补"的阶段,市场信号主要来自开源社区的活跃度和项目迭代节奏,企业级客户和营收数据尚未公开。
社区热度:GitHub 约 6,600 stars、971 forks,对于一个专注生产级 Agent 编排的 Python 框架而言属于中等偏上的关注度。20 watchers 和 3 个 open issues 说明项目维护者保持较快的响应和清理节奏。主要贡献者 5 人,其中 creatorrr 为项目主创,claude 和 codex 为 AI 辅助贡献者——这在 AI-native 项目中并不罕见,但也意味着核心团队规模较小。
目标客群:从项目文档和 CLI 设计来看,Julep 的主要受众是"需要把 Agent 投入生产"的 Python 工程团队——他们对流程治理和执行可靠性有明确要求,而非只是做概念验证。v3 放弃托管 API 形态、转向 Python native + CLI,表明团队更倾向于服务能自主管理基础设施的开发者群体。
行业对标:Julep 在"Agent 编排"生态中与 LangChain/LangGraph、CrewAI、Temporal 自身存在交集但不完全重叠。LangChain 更侧重 LLM 调用抽象和链式组合,CrewAI 专注多 Agent 角色扮演协作,Temporal 提供通用持久化执行引擎但缺少 Agent 语义层。Julep 的独特位置在于把"Agent 语义(@flow、Reasoner、tool)"与"持久化执行(Temporal/DBOS)"直接绑定在同一编程模型内。
Julep 的成本优势:开源自托管降低 Agent 生产化的入场门槛
Julep 的成本模型与 SaaS 型 Agent 平台有本质差异——它不是按 API 调用量或 Agent 数量收费,而是以开源许可证交付,成本结构从"订阅费"转移到"基础设施 + 运维投入"。
C 端/个人开发者:完全免费。pip install --pre julep 即可在本地使用完整的 @flow 定义CLI 工具和 dry_run 调试模式。个人开发者无需 API Key 即可完成流程开发和本地测试,只有在需要持久化执行(Temporal/DBOS)或生产部署时才需要额外基础设施。对于学习和原型验证场景,成本几乎为零。
开发者/团队:框架本身免费(Apache-2.0),但生产化之后的主要成本来自三个方面:1)Temporal 或 DBOS 集群的运维费用——Temporal Cloud 按工作流执行量计费,自托管则需承担服务器和运维人力;2)LLM API 调用费——Julep 本身不绑定模型提供商,开发者需自行承担 Anthropic、OpenAI 或其他模型的 API 费用;3)基础设施部署——如使用 julep apply 的 Helm/KEDA 发布链路,需维护 Kubernetes 集群和 S3 存储。
企业/私有化:开源许可(Apache-2.0)允许任意商业使用和修改,不存在 License 层面的采购门槛。但企业级落地的真实成本包括:Temporal 集群的搭建与运维MCP 工具的认证与权限治理、以及流程版本变更的持续维护。与商业 Agent 平台(如 Relevance AI、CrewAI Enterprise)相比,Julep 的显性订阅成本为零,但隐性运维成本需要团队有足够的基础设施能力。 | 成本维度 | Julep(开源自托管) | 商业 Agent 平台(如 Relevance AI) | 自建编排 | |---|---|---|---| | License/订阅费 | 零(Apache-2.0) | 按席位/执行量计费 | 开发人力成本 | | 基础设施 | 需自管 Temporal/DBOS + K8s | 平台托管 | 全栈自建 | | LLM 调用费 | 按实际用量(自选模型) | 通常捆绑或加价 | 按实际用量 | | 流程治理 | @flow + CLI 内置 | 平台提供可视化 | 需自研 | | 持久化/恢复 | Temporal/DBOS 层内置 | 平台透明处理 | 需自研 |
Julep 的核心功能
Julep 的能力围绕"定义 → 编译 → 调试 → 部署 → 运维"五阶段展开,不是孤立的功能罗列,而是从流程定义到生产可观测的完整链路。
-
@flow 声明式流程定义:用 Python 函数上方的
@flow装饰器定义整个 Agent 流程。@flow 在定义时(而非运行时)将函数体内的tool()、think()、cond()、switch()、each()、reschedule()等原语编译为不可变 IR。这意味着流程拓扑在部署前就已确定,不存在运行时"模型自由发挥"导致的不确定性。|操作符用于合并记录,h["key"]用于字段提取,这些编译期操作不会消耗 LLM token。 -
Reasoner 声明式推理节点:
Reasoner是封装 LLM 调用意图的声明式对象,包含name、model(如anthropic:claude-haiku-4-5-20251001)、system提示和reply输出类型(TypedDict)。Reasoner 不直接发起 LLM 调用——它只是描述"希望模型做什么",实际调用由think(reasoner, prompt)在 @flow 内部触发。这种分离使 Reasoner 可在 dry_run 模式下被 fake 函数替代,实现完全离线的流程测试。 -
Tool 注册与权限控制:通过
@tool(effect="read", idempotent=True)注册工具,并显式声明效果类型(read/write)和幂等性。部署时通过deploy(triage, tools=[lookup_ticket], reasoners=[support_reply])冻结工具和 Reasoner 的调用面——任何未注册的工具模型都无法调用。这比 LangChain 的工具列表传递方式更严格,也更适合生产审计。 -
Pure 纯函数与沙箱执行:
@pure("ticket_prompt")装饰的函数是确定性的纯转换逻辑(输入 → 输出,无副作用),可被 Julep 的 WASM 沙箱(julep[wasm] extra)安全执行。这为"从 IR 中提取敏感逻辑并在隔离有境运行"提供了工程基础。 -
CLI 全生命周期管理:
julepCLI 提供从发现到部署的完整工具链——ls列出所有 Agent,show查看详情,graph输出跨 Agent DAG,run本地执行,lint静态验证,test运行 pytest,trace渲染执行轨迹,doctor有境预检,deploy冻结+发布。CLI 的设计借鉴了 dbt 的"面向模块的开发者体验"——它将一个目录下的所有 @flow 视为一个可寻址的图,通过选择器语法(tag:support、state:modified、+agent)精确控制操作范围。 -
Application 生产部署原语:对于正式生产有境,Julep 提供
Application对象——将 PipelineSpec(包含 flow、reasoners、capabilities、lane、eval_packages、snapshot)聚合为可发布单元。julep plan检测漂移,julep apply执行不可变发布(S3-CAS + Helm reconciliation),julep status聚合运行状态。发布过程使用 Ed25519 签名确保制品完整性。
隐藏联动(专家视点):Julep 真正的设计巧思在于"编译期确定拓扑 + 运行期可恢复"的组合。传统 Agent 框架在运行时由 LLM 决定下一步调用什么工具,这带来了不可预测性和调试困难。Julep 的 @flow 在定义期就锁定了步骤拓扑,LLM 只参与 Reasoner 节点内的推理(而非流程决策),这使得流程行为可预测、可测试、可回放。同时,通过 Temporal/DBOS 的持久化,已执行步骤的状态在执行中断后可精确恢复——这种"确定性拓扑 + 持久化状态"的组合,在 Agent 编排领域属于差异化明显的技术路线。
Julep 的模型与版本演进
Julep 的版本脉络经历了从 v1(托管 API 平台)到 v3(Python 原生框架)的彻底重写,v2 不存在或未公开发布。
建议内部采用“流程版本号 + 节点变更记录”的治理方式:
- 流程版本(业务逻辑变更)。
- 节点策略版本(模型、提示、工具变更)。
- 运行参数版本(超时、重试、审批门限)。
这样能避免平台更新导致流程不可追溯。
Julep 的技术优势
Julep 的技术价值不在于"模型更强",而在于把 Agent 流程从"不可控的脚本串联"提升为"可编译、可恢复、可审计的工程产物"。
Define-by-construction 编译范式:@flow 的核心创新是"在定义时编译、在运行时执行"。开发者写下的 think()、tool()、cond() 等不是立即执行的函数调用,而是向 IR 追加步骤节点的声明式操作。这意味着流程的拓扑结构在部署前就完全确定,不存在运行时 LLM 自由选择工具或路径的不确定性。这种"编译期确定拓扑"的路线,在 Agent 框架中属于偏"工程安全"的一端——相比 LangChain 的动态路由,它牺牲了一些灵活性,但换来了可预测性和可审计性。
双层持久化架构:Julep 的持久化层是可插拔的——Temporal(通过 julep[temporal] extra)提供企业级工作流引擎,DBOS(通过 julep[dbos] extra)提供基于 Postgres 的轻量持久化。两者共享同一套 IR 语义:流程中断后可从最后一个持久化步骤恢复,LLM 调用结果被记录,工具执行的副作用可回放。这比单纯的内存执行 + 日志记录的方案在可靠性上有质的提升。
不可变发布与签名机制:julep apply 发布流程使用 S3 作为内容寻址存储(CAS),每个发布包包含不可变的 IR 和依赖快照,通过 Ed25519 签名确保完整性。CA_BUNDLE_ALLOWED_SIGNERS 机制让运行有境只接受指定公钥签名的发布。这在多团队协作或 CI/CD 流水线中非常重要——可以防止未授权的流程变更被推送到生产有境。
Tool 调用面的显式声明:deploy(..., tools=[...], reasoners=[...]) 明确声明了流程可调用的工具和 Reasoner 集合——任何未在此列表中的工具,模型都无法调用。这与大多数 Agent 框架的"把工具列表传给 LLM,由 LLM 决定是否调用"的模式不同,更接近"API 权限声明"的安全模型。配合 @tool(effect="read", idempotent=True) 的语义标注,可以在部署前静态分析出流程的数据流和副作用范围。
为什么更稳:传统 Agent 框架的故障通常表现为"不可复现"——LLM 在不同调用中选择了不同的工具路径,导致同一输入产生不同结果。Julep 通过编译期拓扑锁定 + 持久化步骤记录,将"不可复现的 Agent 故障"转化为"可定位的特定节点失败",使问题排查从"重试整个流程"变为"重试失败节点"。
Julep 的如何使用
Julep 的入门路径从本地 Python 有境开始,逐步扩展到持久化执行和生产部署。
3 分钟快速上手——本地安装与调试:
pip install --pre julep
Julep 3 目前为 RC 版本,需要 --pre 标志。安装后即可在本地使用完整的 @flow 定义和 dry_run 调试模式,无需 API Key。
from typing import TypedDict
from julep import Reasoner, deploy, flow, pure, think, tool
class SupportReply(TypedDict):
reply: str
@tool(effect="read", idempotent=True)
def lookup_ticket(ticket: str) -> dict[str, str]:
return {"ticket": ticket, "queue": "billing",
"summary": "Use the duplicate-charge runbook."}
@pure("ticket_prompt")
def ticket_prompt(hit: dict[str, str]) -> dict[str, str]:
return {"queue": hit["queue"], "context": hit["summary"]}
support_reply = Reasoner(
name="support_reply",
model="anthropic:claude-haiku-4-5-20251001",
system="Draft one concise support reply as JSON.",
reply=SupportReply,
)
@flow
def triage(ticket: str) -> dict[str, str]:
hit = lookup_ticket(ticket, retries=2, timeout_s=5)
prompt = ticket_prompt(hit)
answer = think(support_reply, prompt, timeout_s=10)
return hit | answer
deployment = deploy(triage, tools=[lookup_ticket],
reasoners=[support_reply])
result = deployment.dry_run(
"Customer was charged twice.",
reasoners={"support_reply": lambda v: {"reply":
f"{v['queue']}: {v['context']}"}},
)
print(result.value)
架构链路示意:
LLM API (Anthropic/OpenAI)
↑
[ Reasoner ] ← 声明式推理节点,不参与流程决策
↑
[ @flow IR ] ← 编译期确定的步骤拓扑(不可变)
↑
[ Temporal / DBOS ] ← 可选持久化层,提供崩溃恢复
↑
[ Tool / MCP / Pure ] ← 可注册的外部能力
控制流:开发者编写 @flow → 定义时编译为 IR → deploy() 冻结工具/Reasoner 面 → dry_run() 或 julep run 本地调试 → julep deploy 生产发布(持久化 + 签名)。
几种入口的使用场景:
| 入口 | 适合阶段 | 关键动作 |
|---|---|---|
| Python SDK(@flow) | 流程定义与本地调试 | pip install --pre julep,编写 @flow,使用 dry_run 验证 |
| julep CLI | 多流程管理与部署 | julep ls/graph/run/lint/test/trace/deploy |
| Temporal 集成 | 生产持久化执行 | pip install julep[temporal],配置 Temporal 端点 |
| Application 对象 | 生产级多流程发布 | 定义 PipelineSpec,julep plan/apply/status |
典型落地节奏:先用 Python SDK + dry_run 在小样本上验证流程逻辑和工具调用准确性;然后接入 Temporal(或 DBOS)做持久化执行验证,确认恢复和重试行为符预期;最后通过 CLI 的 deploy/plan/apply 管线推送到 staging/production 有境。CI/CD 中建议加入 julep lint 和 julep test 步骤,在合并前发现流程定义问题。
工程踩坑指南
1. 死循有与 Token 暴涨控制:@flow 中如果 Reasoner 的输出被持续反馈到某个 tool 或 cond 节点,可能形成无限循有。必须通过 retries(单步重试次数)、timeout_s(单步超时)和 max_steps(流程总步数上限)三重约束防止空转烧 Token。在部署时,Temporal 层的工作流超时设置是最后一道防线。
2. IR 编译期错误排查:@flow 在定义时而非运行时生成 IR,这意味着某些逻辑错误(如类型不匹配、工具未注册)在 import 时就会暴露。调试时建议用 julep lint <agent> 做静态检查,而非等到运行时报错。IR 的不可变性也意味着流程拓扑一旦部署无法热修改——必须走完整的 plan → apply 发布链路。
3. 安全与越权治理:deploy() 中声明的 tools=[...] 是模型可调用工具的"白名单"。但仍需注意:tool 函数的实现本身可能执行危险操作(删除、写入、支付)。建议对 effect="write" 的工具在实现层加入二次确认或 dry-run 模式。对于生产有境,Temporal 的活动(Activity)级别可以配置重试策略和异常处理,但不可逆操作的最佳实践是在 tool 实现中自行添加确认点。
4. MCP 快照与凭证管理:Julep 的 McpSnapshot 机制允许在部署时捕获 MCP 工具的 schema,但 MCP 连接的凭证(如 JWT)不应存储在 worker_secret_environment 之外——这些值只在 Worker 运行时存在,控制面不应接触。设计 tool 的认证模型时,需将凭证注入和 schema 发现分离,避免在 snapshot_source 回调中硬编码密钥。
Julep 的产品定价
Julep 的定价模型是"开源核心 + 基础设施按需付费",没有传统 SaaS 的订阅层级。
框架本身:Apache-2.0 许可证,完全免费。无功能限制、无 Agent 数量限制、无调用次数限制。所有核心能力(@flow、Reasoner、CLI、IR 编译dry_run、deploy)均在开源版本中可用。
持久化执行层:使用 Temporal 自托管或 Temporal Cloud 时,按 Temporal 自身的定价模式计费(Temporal Cloud 按工作流执行数和时长收费,自托管仅需基础设施费用)。使用 DBOS 时,基于 Postgres 实例的成本(云数据库或自建)。Julep 本身在此层不收取额外费用。
LLM API 费用:由开发者直接支付给模型提供商(Anthropic、OpenAI、Google 等)。Julep 不代理 API 调用,也不在模型费用上加价。支持的模型通过 model 参数中的 provider 前缀指定(如 anthropic:claude-haiku-4-5-20251001)。
生产部署基础设施:julep apply 发布链路依赖 S3(或兼容对象存储)和 Kubernetes 集群。这部分成本取决于团队的现有基础设施——已有 K8s 集群的团队几乎无新增成本,需要新建的团队则需评估集群费用。
| 成本项 | Julep 框架 | 第三方依赖 | 说明 |
|---|---|---|---|
| License | 零(Apache-2.0) | — | 可商用、可修改 |
| Agent 执行 | 零 | Temporal/DBOS | 按实际用量付费给 Temporal 或自托管 |
| LLM 调用 | 零 | Anthropic/OpenAI 等 | 按量付费给模型提供商 |
| 基础设施 | 零 | K8s + S3 | 按实际资源消耗 |
Julep 的应用场景
Julep 的适用场景集中在"需要持久化保证和多步骤协作"的 Agent 任务,而非单次问答。
降维打击场景:
-
客服升级与工单处理链路:分诊 → 信息检索 → 归因分析 → 回执生成 → 升级判断。每一步可能有不同工具调用(查知识库、查订单、写回执),且需要在长时间跨度内保持状态一致。Julep 的持久化能力确保即使 LLM 调用超时或工具返回异常,流程可以从最后成功的步骤恢复。
-
内容审核与发布流水线:内容检索 → AI 初筛 → 人工审核 → 分类标注 → 多平台发布。每个节点涉及不同的工具和 Reasoner,且跨多个系统(CMS、社交媒体 API、审核系统)。Julep 的编译期拓扑确定性和节点级重试,使得这种多系统串联的流程不会因为某一有节的偶发失败而整体回退。
-
销售线索处理与评分:多渠道线索接入 → 信息补全 → 企业信息检索 → 意向评分 → 跟进建议 → CRM 写入。涉及数据查询(外部 API)、推理(Reasoner 评分)、写入(CRM 操作)三类节点。Julep 的
effect标注可以清晰地分离只读和写入操作,方便审计。
一般适配场景:
- 需要跨多个内部系统 API 调度、且对执行可靠性有要求的运营流程。
- 需要人工参与的审批链——Julep 的
reschedule()原语支持流程在特定节点等待外部确认。
不适配场景:
- 单次问答或简单信息检索——直接用 LLM API 成本更低,Julep 的编排能力在此场景下只是过重的基础设施。
- 全自动化、无人工兜底的不可逆操作(如支付执行、合同签署)——Agent 的出错率仍不适合完全脱离人工审核。
- 需要运行时动态决定工具链的探索性任务——Julep 的编译期拓扑锁定限制了这种灵活性。
Julep 的适用人群
-
Python 后端/平台工程团队:对流程可靠性和可观测性有明确要求,愿意投入基础设施(Temporal/DBOS)换取 Agent 流程的生产级保障。Julep 的 @flow 模式与标准 Python 开发体验接近,学习曲线主要是理解编译期/运行期分离的语义。
-
AI 应用架构师:需要设计多步骤、跨系统的 Agent 工作流,关注审计、回放和故障恢复能力。Julep 的不可变发布和签名机制使 AI 流程可以纳入标准的 CI/CD 和变更管理流程。
-
DevOps/SRE 团队:需要把 AI 流程纳入现有的运维体系(可观测、告警、回滚)。Julep 的
julep plan/apply/status管线设计哲学与基础设施即代码(IaC)工具一致——plan检测漂移,apply执行不可变发布,status聚合运行状态。
劝退人群:
- 只需要一次性的 LLM 调用或简单链式 prompt——Script 模式即可满足,无需引入编排框架的开销。
- 没有 Python 工程背景的业务团队——Julep 的纯代码定义方式对非开发者不友好。
- 需要可视化流程拖拽界面的团队——Julep 没有提供 GUI 编排工具,流程定义完全是代码形态。
总结与展望
Julep 的核心价值在于把 Agent 从"不可控的 LLM 调用串联"提升为"可编译、可恢复、可审计的工程系统"。它不是为了降低 Agent 开发门槛——恰恰相反,它在初期会增加开发者的认知负载(理解 @flow 编译期语义、配置 Temporal 集群、设计发布管线),换来的是生产有境中更低的故障排查成本和更高的流程确定性。
当前限制:1)v3 仍处于 RC 阶段,API 在正式版前可能继续变动;2)社区规模尚小(6.6k stars),生态插件和第三方集成有限;3)CLI 和 Helm 部署链路要求团队具备 K8s 运维能力;4)缺少官方可视化监控面板,可观测依赖 Temporal Web UI 或自建 OpenTelemetry 链路;5)官方定价页和商业支持条款未公开,企业采购前的商务条款需要通过 GitHub 或 Discord 沟通确认。
后续观察点:3.0.0 正式版的发布节奏和 API 稳定性承诺;Temporal/DBOS 之外的更多持久化后端支持;社区驱动的 MCP 工具集合的增长速度;以及是否会再次提供托管控制面选项(v3 目前完全是自托管路线)。
采购/采用风险评估:对于已有 Temporal 或 K8s 基础设施的团队,Julep 的采用风险较低——可以从小范围试点开始,先验证 @flow 在现有基础设施上的运行稳定性。对于需要从零搭建基础设施的团队,建议先评估 Temporal 或 DBOS 的运维成本是否在可接受范围内,同时关注 v3 正式版的 API 冻结时间。两类团队都应先在 staging 有境完成持久化恢复和故障演练,再进入生产流量。
版本信息
- Julep 3.0.0 RC3 :Julep 3 候选发布第三版,持续完善生产部署链路与 Temporal 集成,具体以官方发布日志为准。
- Julep 3.0.0 RC2 :暂无官方精确日期,RC2 聚焦应用部署与原语稳定性加固。
- Julep 3.0.0 RC1 :暂无官方精确日期,Julep 3 首个候选版,完成 composable_agents 到 julep 的重命名与核心 API 冻结。
- Julep v1(API 平台版) :Julep v1 为 Agent API 平台,提供托管控制面与 API 形态交互。v3 为完全重写,不存在迁移路径。v1 代码保留在 v1 分支,文档见 v1.docs.julep.ai。
LangChain
用户评价