PraisonAI Rust SDK 功能对等追踪:从 PARITY.md 读懂 Python 与 Rust 双 SDK 的 68.8% 特性对齐
【免费下载链接】PraisonAIPraisonAI 🦞 — Hire a 24/7 AI Workforce. Stop writing boilerplate and start shipping autonomous self-improving agents that research, plan, code, and execute tasks. Deployed in 5 lines of code with built-in memory, RAG, and support for 100+ LLMs.项目地址: https://gitcode.com/GitHub_Trending/pr/PraisonAI
PraisonAI 仓库采用「Python SDK 为事实基准、多语言 SDK 跟随对齐」的工程策略,src/praisonai-rust/PARITY.md正是这份策略在 Rust 侧的量化仪表盘:它以 Python SDK(praisonaiagents)的 417 个公开导出符号为基准,逐一核对 Rust crate 的公开表面,得出当前Rust 667 个特性、实际缺口 130 个、对等度 68.8%的结论。读完本文,你将理解这份报告的测量口径、三个分区(已实现 / 语言限制 / 缺失)的解读方法,以及驱动它自动生成的对等追踪器(parity generator)在源码层的运作原理,从而能像维护者一样用它指导 Rust SDK 的迭代。
这份文档测量的是什么:符号名对等,而非行为对等
PARITY.md 开头用[!IMPORTANT]明确划定了报告的边界,这是全文最容易被误读、也最关键的一句话:
衡量的是 Rust crate 公开表面上是否存在同名的导出符号。它不验证该能力是否可触达、是否与 Python 对应物行为一致——一个函数体直接返回
Err("not yet implemented")的导出项同样会被计数。请把✅理解为「存在该名称的符号被导出」,而不是「它可用」。对于有可测试契约的能力,请依赖其一致性测试套件(conformance suite),而不是这张表。
换句话说,这份 tracker 回答的是「命名空间层面的覆盖率」问题,属于迁移进度的粗粒度指标;「功能是否真的能用」是细粒度问题,需要靠集成测试与一致性测试来回答。这一口径在生成器源码中有直接对应——generator.py中用于 TypeScript 的TS_STUB_MARKERS常量甚至专门维护了一批标记短语(@parity-stub、placeholder implementation、no-op placeholder等),用于把「只占位、未实现」的导出从「真实现」中区分出来(见 generator.py)。理解这个前提,是正确使用全部分区的第一步。
核心指标速览
PARITY.md 的 Summary 表给出了四个关键数字:
| Metric | Count |
|---|---|
| Python Core Features | 417 |
| Rust Features | 667 |
| Actual Gap Count | 130 |
| Language Limitations (N/A) | 4 |
| Parity | 68.8% |
其中值得注意的两点:
- Rust 特性数(667)多于 Python(417)是正常现象。Rust 侧除了与 Python 一一对应的符号,还拥有自身生态的结构化导出(各类
Builder、Protocoltrait、解析工具函数等)。生成器源码也明确注释过:volume is not parity——Rust 导出总量更大并不代表对等度更高,对等度的计算只取「Python 417 个符号中被 Rust 匹配到的比例」(parity_pct = matched / python_count,见 generator.py)。 - Parity 68.8% 的计算口径是
(417 − 130) / 417,即把「语言限制类(N/A)」视为已实现(它们都有别名替代),只有真正的 130 个缺口被排除。这与 JSON 快照 FEATURE_PARITY_TRACKER.json 中记录的gapCount: 134 / parityPercentage: 67.9略有出入,原因是两份产物生成时间不同(JSON 的lastUpdated为 2026-09-07),阅读仓库历史版本时需注意以各自文件头部数字为准。
已实现特性(✅):667 个导出符号构成的能力全景
PARITY.md 用一段超过 660 行的清单列出了全部已实现导出,它们覆盖了 Python SDK 的核心能力域。按功能族归类,可以清晰地看到 Rust 侧的覆盖广度:
- Agent 体系:
Agent、AgentBuilder、AgentConfig、AgentFlow、AgentTeam、AgentManager、Agents、RunnableAgentProtocol、AgentProtocol、AgentMetrics; - 工作流原语:
Workflow、Pipeline、Parallel、Loop、Repeat、Route、If、Process、When、loop_step、parallel_step、repeat_step、route_step以及WORKING_FRAMES/WORKING_PHASES常量; - 上下文与内存:
ContextManager、ContextBudgeter、ContextLedger、ContextPolicy、FastContext、Memory、MemoryConfig、ConversationHistory、detect_memory_backend、MEMORY_PRESETS; - RAG 与检索:
RAG、RAGBuilder、RAGConfig、RAGResult、RetrievalPolicy、Chunking、ChunkingStrategy、EmbeddingAgent、embed/embeddings/aembeddings系列异步嵌入函数; - 守卫与安全:
Guardrail、GuardrailChain、GuardrailConfig、BlocklistGuardrail、PatternGuardrail、LLMGuardrail、SandboxConfig、SandboxProtocol、SecurityConfig、SecurityPolicy; - 规划与反思:
PlanningAgent、Plan、PlanStep、PlanningPreset、ReflectionConfig、ReflectionOutput、REFLECTION_PRESETS; - 多智能体编排:
MultiAgentContextManager、MultiAgentExecutionConfig、MULTI_AGENT_EXECUTION_PRESETS、Handoff、HandoffChain、handoff_filters; - 评估与可观测性:
Evaluator、AccuracyEvaluator、CriteriaEvaluator、PerformanceEvaluator、ReliabilityEvaluator、TelemetryCollector、TraceExporter、TraceSink、EventBus、track_api、track_workflow; - 交互协议与 UI:
A2A、AGUI及配套的A2AAgentCard、A2ATask、AGUIEvent、DisplayCallback、ApprovalCallback、request_approval; - 多模态与领域 Agent:
AudioAgent、ImageAgent、VideoAgent、VisionAgent、OCRAgent、CodeAgent、DeepResearchAgent、QueryRewriterAgent、PromptExpanderAgent及其各自的*Config与*Builder; - 基础设施:
LlmConfig、LlmProvider、OpenAiProvider、MockLlmProvider、MCP、MCPBuilder、MCPServer、ToolRegistry、ToolDefinition、SessionStore、FileSessionStore、InMemoryVectorStore、VectorStoreProtocol等。
其中大量符号来自parity模块的统一再导出。查看 parity/mod.rs 的模块文档可以看到这一层的设计意图:它按 UI 协议、插件协议、配置加载、参数解析、工作流别名、遥测函数、显示/回调类型、专用 Agent、Deep Research、RAG、Guardrail、Embedding 等 12 个主题组织子模块,然后在lib.rs中通过pub mod parity汇入 crate 根,形成「一份对齐 Python 的扁平公开表面」。例如 Deep Research 的Citation、ReasoningStep、WebSearchCall、CodeExecutionStep、Provider等类型,其具体实现位于 parity/extras.rs,每个结构体都带serde的Serialize/Deserialize派生与构造器,可直接用于构建研究报告类的数据结构。
N/A:4 个受 Rust 语言约束的符号与别名方案
Rust 存在保留关键字与模块命名冲突,使得部分 Python 符号无法以原名导出。PARITY.md 的「N/A (Rust Language Limitations)」分区完整列出了 4 项,并给出了替代名:
- ⚠️
config→ 使用parity_config代替 - ⚠️
memory(Rust 保留字 / 模块冲突) - ⚠️
tools(Rust 保留字 / 模块冲突) - ⚠️
workflows(Rust 保留字 / 模块冲突)
这套映射的权威定义在生成器源码中,见 rust_extractor.py:RUST_LANGUAGE_EXCLUDED集合声明了loop、config、memory、tools、workflows、db、obs共 7 个被排除项,RUST_ALIAS_MAPPING则给出了loop → loop_step、config → parity_config、db → parity_db、obs → parity_obs的替换关系。对照 PARITY.md 可见,loop_step已作为独立导出出现在已实现清单中,这正是「语言限制类按已实现计数」的落地方式;而db、obs在模块层通过parity模块的占位再导出(pub use extras::db; pub use extras::obs;)完成兼容。
Missing Features(❌):130 个待补缺口全清单
PARITY.md 的 Missing Features 分区是这份报告对迭代最有指导价值的部分。130 个缺口按功能族整理如下(保持原文档完整清单,仅分组排列):
策略常量类:AGGRESSIVE_POLICY、BALANCED_POLICY、CONSERVATIVE_POLICY、MAX_NESTING_DEPTH。
Agent / 运行时协议类:A2UI、AgentMessageEvent、AgentRunOutcome、AgentRuntimeProtocol、AsyncLearnProtocol、AutoApproveBackend、AutoMemory、BackendNotAvailableError、BaseFrameworkAdapter、BasePlatformAdapter、BaseTool、BotOSConfig、BotOSProtocol、BudgetExceededError、ChromaMemory、CompactionRoute、CompactionStrategy、ConsoleBackend、ContextBudgetResult、ContextCompactionPolicy、ContextCompactionPolicyProtocol、CorpusStats、CustomToolUseEvent、DoomLoopDetector、EnforcementLevel、ErrorContextProtocol、EscalationPipeline、EscalationStage、FileTracker、FrameworkAdapterProtocol、Goal、GoalConfig、GoalEngineer、GoalVerificationResult、GuardrailRetry、HandoffToolPolicy、HarnessProfile、Heartbeat、HeartbeatConfig、Include、IndexResult、LLMError、ManagedBackendProtocol、ManagedEvent、ModelRequestBlocked、NetworkError、ObservabilityEventType、ObservabilityHooks、PlatformCapabilities、PraisonAIAgents、PraisonAIConfigError、PraisonAIError、PreCompactionMemoryFlushConfig、RetryBackoffConfig、RulesConfig、RunOutcome、RunStatus、ScriptExhausted、ScriptedModel、SendResult、SessionErrorEvent、SessionIdleEvent、SkillState、StopReason、StructuredFormatter、SuccessCriterion、TerminationReason、ToolExecutionError、ToolSearchConfig、ToolUseEvent、ToolValidationError、ToolsetRegistry、ToolsetSpec、WorkflowHooksConfig、YAMLWorkflowParser、__version__。
学习 / 记忆适配器函数类:LearnBackend、LearnConfig、LearnManager、LearnManagerProtocol、LearnMode、LearnProtocol、LearnScope,以及add_memory_adapter、add_memory_factory、get_memory_adapter、has_memory_adapter、list_memory_adapters、register_memory_adapter、register_memory_factory。
工具 / 工具集注册类:get_tool、get_toolset、get_toolset_registry、has_toolset、list_toolsets、register_tool、register_toolset、resolve_harness、resolve_runtime、resolve_toolset、resolve_toolsets、unregister_toolset、validate_tool。
其余函数类:allow_model_requests、configure_structured_logging、discover_skills、get_default_policy、get_logger、get_registry、if_、include、load_skill、no_model_requests、parallel_handoffs、register_profile、register_runtime、termination_to_run_status、validate、validate_decision_string、validate_metadata。
从缺口分布可以读出 Rust 侧的阶段性重点:工具集注册(toolset registry)、学习管理器(learn manager)、运行时/配置注册体系(runtime/profile registry)以及策略常量是当前最集中的未覆盖区域;而Goal/GoalEngineer、DoomLoopDetector、CompactionStrategy、EscalationPipeline等缺口则对应 Python 侧较新的自治与上下文管理能力,属于后续迭代的自然候选。生成器为每个特性标注了优先级与工作量(如 agent 类为 P0/高工作量,函数类为低工作量),这些信息可在 JSON 快照的gapMatrix中按P0_CoreParity、P1_Persistence、P2_CLI、P3_Advanced四个桶检索(见 generator.py)。
源码级原理:这张报告是怎么自动生成的
PARITY.md 并非手写文档,其页脚标注*Generated by praisonai._dev.parity.generator*,完整实现位于 generator.py。整个流水线分四步:
- 提取 Python 表面:
PythonFeatureExtractor解析praisonaiagents/__init__.py的公开导出,得到 417 个基准符号; - 提取 Rust 表面:
RustFeatureExtractor用正则扫描praisonai-rust/praisonai/src/lib.rs的pub use再导出与全部模块文件中的pub struct/pub enum/pub trait/ 顶层pub fn,得到 667 个符号(见 rust_extractor.py 的类文档与 rust_extractor.py 的扫描逻辑); - 名称匹配与缺口计算:对每个 Python 符号,先查 Rust 导出集合,未命中再查
RUST_ALIAS_MAPPING;最终missing = python − effective_rust,再剔除RUST_LANGUAGE_EXCLUDED得到实际缺口(见 generator.py); - 渲染 Markdown:
generate_rust_markdown()按「Summary → Implemented → N/A → Missing」的顺序拼装出 PARITY.md 本体,其中parity_pct采用min(100.0, matched / python_count * 100)封顶,避免 Rust 导出总量超过 Python 时出现超 100% 的失真数字。
值得注意的工程细节是防呆设计_refuse_empty:如果某个 extractor 因为源码缺失或解析失败返回 0 个导出,生成器会直接抛错拒绝写出「看似完美、实则空转」的 tracker,而不是生成一份假的对等报告(见 generator.py)。另外generate_rust中根据对等度划分状态机:NOT_STARTED → EARLY_DEVELOPMENT → IN_PROGRESS → NEAR_PARITY → PARITY_ACHIEVED,当前 68.8% 落在IN_PROGRESS(接近NEAR_PARITY的 75% 门槛),这一状态同样写入了 JSON 快照。
配套验证体系:不只是「名字对齐」
PARITY.md 的[!IMPORTANT]反复强调「有可测试契约的能力请依赖 conformance suite」,仓库内确实存在与之配套的两层验证:
- 集成测试示例:parity_integration_test.rs 是专为对等特性编写的一致性冒烟测试,覆盖 Deep Research 类型(
DeepResearchCitation、ReasoningStep)、RAG 类型、LLMGuardrail、Handoff 错误、嵌入函数、显示回调、遥测开关、配置加载与 AGUI/A2A 协议类型,逐项断言构造结果与字段值,可通过cargo run --example parity_integration_test运行(需要OPENAI_API_KEY时才走真实 API 路径); - JSON 机器可读快照:FEATURE_PARITY_TRACKER.json 与 Markdown 由同一生成器产出,字段包含
version、status、summary、pythonCoreSDK、rustSDK(含modules与cargoFeatures)与按优先级分组的gapMatrix,便于 CI 做差异比对——生成器内置check模式,若磁盘文件与重新生成的内容不一致(忽略日期行)即返回失败,防止 tracker 与源码脱节(见 generator.py); - 文档对等报告:DOCS_PARITY.md 是同一思路在「文档覆盖」维度的延伸:68 个特性类别全部有对应文档,文档对等度 100%,与代码对等的 68.8% 互补,共同构成「代码—文档—测试」三层质量视图。
结语:如何用好这份对等报告
src/praisonai-rust/PARITY.md是 PraisonAI 多语言 SDK 工程化的一张「进度地图」。对 Rust 开发者而言,它是现成的迁移清单:已实现分区(✅)说明哪些 Python 能力可以直接用等价 Rust API 替换,N/A 分区(⚠️)提示 4 个需要换名的符号,Missing 分区(❌)则标出 130 个尚未对齐的能力边界。结合 generator.py 与 rust_extractor.py 的源码,可以完整复现每一次数字变化的来龙去脉;配合 parity_integration_test.rs 与 FEATURE_PARITY_TRACKER.json 的机器可读快照,团队即可把「Rust 与 Python 是否对齐」从一句口号变成可量化、可追踪、可进 CI 的工程指标。
【免费下载链接】PraisonAIPraisonAI 🦞 — Hire a 24/7 AI Workforce. Stop writing boilerplate and start shipping autonomous self-improving agents that research, plan, code, and execute tasks. Deployed in 5 lines of code with built-in memory, RAG, and support for 100+ LLMs.项目地址: https://gitcode.com/GitHub_Trending/pr/PraisonAI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考