Dynamiq
用 Python 编排智能体、LLM 工作流与 RAG 管道。
证据展示了显式工具列表、循环上限、工作流依赖关系,以及仅向内部 PR 或受控标签任务注入凭据;安全政策还提供了保密报告渠道,因此数据流、敏感数据处理和依赖治理达到普通使用水平。扣分点是框架没有统一的权限最小化或逐项授权机制,用户确认仅出现在邮件示例的交互逻辑中,外部调用及数据发送缺少通用披露和审批保障,也没有撤销、补偿事务或回滚设计。来源由仓库、项目元数据、文档、许可证及公司版权声明相互指向,但发布者身份未经独立验证,故未给满分。未发现红线证据。
README、项目元数据、CI 和测试夹具对 Python 框架、LLM、Agent、RAG 与集成能力的描述总体一致;依赖大多设有版本范围,支持 Python 3.10–3.13,并有容器化 CI、隔离测试和凭据集成测试路径。扣分点是默认依赖集合非常庞大且包含众多外部服务,README 示例存在缺少 asyncio 导入、把打印状态描述成邮件已发送等细节不一致;除最大循环行为外,几乎没有失败类型、诊断信息或恢复建议。
材料覆盖翻译、异步 ReAct、并行与串行 Agent、多 Agent 委派、RAG、记忆聊天和图编排,受众与场景覆盖充分。显式工具、角色、依赖、输入转换、路由、推理模式和循环上限提供了较好的配置边界与触发控制。扣分点是没有形成统一的能力/权限边界,基于 LLM 的委派仍依赖提示词约定;外部服务凭据、系统级 PDF/图形依赖、资源需求和部署差异说明不完整。
README 的安装、文档、示例、贡献和许可证结构清楚;包名、CLI、版本 0.60.1、Python 范围及项目链接均有元数据支持。大量可直接阅读的示例使示例性文档接近完整,Apache-2.0 全文和元数据一致,故许可证满分。扣分点是没有 FAQ,已知限制仅零散提到 Python 版本、现有 Pinecone 索引等前提;仅提供发布页入口而没有随附变更记录,维护责任虽有团队邮箱、安全邮箱和贡献入口,但具体负责人及发布者身份未得到验证。
示例展示了可直接消费的节点输出、Agent 内容、按节点编号组织的工作流结果和 RAG 写入/检索路径,且相较于单次 LLM 调用提供了 DAG、并行执行、委派、记忆和多后端集成等显著增量价值。扣分点是输出契约、错误结果和持久化副作用没有系统说明;虽然可配置 max_tokens、max_loops 和模型,但缺少费用、延迟、依赖体积、资源消耗及何时不值得采用该框架的指导。
核心身份、版本、Python 范围、许可证、CI 路径和主要场景可在 README、pyproject、工作流及测试夹具之间交叉对应,具备普通水平的静态可追溯性。扣分点是材料没有提供运行结果或独立验证,测试片段主要是公共夹具而非具体行为断言;“all-in-one”“自动并行”等营销性或概括性主张未明确区分事实、示例和推断,邮件示例还可能让读者误以为打印文本代表真实发送。
- 这是仅基于所给修订文件的静态审查;未执行代码、测试或网络集成。
- Agent 可调用 E2B、搜索、数据库、向量存储及云模型等外部服务;部署者应自行增加工具白名单、最小权限、出站数据披露和高影响操作确认。
- README 直接展示 API 密钥参数占位符,而 CI 会生成包含真实秘密的 .env 文件;应核查日志脱敏、文件清理、密钥轮换及第三方数据保留策略。
- 默认依赖面很大,并含大量快速演进的服务客户端;采用前应生成锁定清单和 SBOM,进行漏洞扫描,并考虑按功能拆分可选依赖。
- 图编排邮件示例并未实际发送邮件,只打印“已发送”状态;不要把该示例视为外部效果、确认或交付保证。
- 未见通用回滚或补偿机制;对写入向量库、数据库或其他有状态系统的工作流,应在应用层加入幂等、审计和恢复设计。
这个 Agent 能做什么,适合哪些场景?
Dynamiq 是一个面向智能体应用、LLM 调用和检索增强生成的 Python 编排框架。其核心接口包括 Workflow、Flow、Agent、LLM 节点、工具节点、Memory,以及支持条件分支和循环的 GraphOrchestrator。工作流通过节点依赖和 InputTransformer 连接输入与输出,并可在条件允许时并行执行节点,也能按依赖顺序串行运行。示例展示了 OpenAI 模型调用、E2B 代码解释器、ScaleSerp 搜索、Pinecone 向量存储,以及 PDF 转换、切分、嵌入和检索。它以 Python 库形式运行并返回结构化的节点输出;来源没有给出托管服务、容器部署或生产运维方案。
应用通过 OpenAIConnection 等连接对象配置外部服务,并用 OpenAI、Agent 或其他节点执行任务。Workflow 和 Flow 将节点组织成 DAG;depends_on、NodeDependency、inputs 和 InputTransformer 控制执行顺序与数据传递,独立节点可并行运行。Agent 可以调用 E2BInterpreterTool、ScaleSerpTool,或把其他 Agent 当作工具,由管理智能体分派研究和写作任务。RAG 索引链路使用 PyPDFConverter 读取 PDF,DocumentSplitter 切分文档,OpenAIDocumentEmbedder 生成向量,再由 PineconeDocumentWriter 写入索引;检索链路通过 OpenAITextEmbedder、PineconeDocumentRetriever 和 OpenAI 节点生成答案。Memory 配合 InMemory 后端保存会话历史,而 GraphOrchestrator、GraphAgentManager、状态、边和条件路由可构建带人工反馈的迭代流程。执行结果由 run 或异步的 await agent.run 返回,并可从 result.output 中读取内容。
- Python 开发者需要把提示词、OpenAI 模型调用和业务节点组合成可复用的 LLM 流程。
- 研究或内容团队希望由管理智能体并行委派搜索与写作任务,再汇总为一份简报。
- 知识库团队需要将 PDF 分页转换、按句切分、生成嵌入并写入既有 Pinecone 索引。
- 应用开发者需要检索 Pinecone 中的相关文档,并将文档上下文交给模型回答用户问题。
- 聊天应用开发者希望使用 Memory 与 InMemory 后端,按用户和会话保存对话历史。
- 需要人工审核的团队可用 GraphOrchestrator 构建“生成草稿—收集反馈—继续修改或结束”的循环。
这个 Agent 有哪些优点和局限?
- 同一套节点与 Workflow API 同时覆盖普通 LLM 流程、串行或并行智能体、RAG 和图式编排。
- 节点依赖、输出映射和 InputTransformer 提供了明确的数据流连接方式,而不必手工搬运每一步结果。
- GraphOrchestrator 支持状态、普通边、条件边和循环,可表达带反馈与终止条件的流程。
- 示例给出了 PDF 到 Pinecone 的完整索引链路,以及从问题嵌入到检索和答案生成的对应链路。
- 所给示例均使用 OpenAI 模型或嵌入接口,没有证据说明如何切换到其他模型提供商。
- 代码解释、网页搜索和向量检索分别依赖 E2B、ScaleSerp 与 Pinecone等外部服务,并需要额外凭证。
- Pinecone 索引示例假定索引已经存在,索引创建步骤未包含在提供的安装流程中。
- 来源未说明容器化、托管部署、持久化内存、监控、重试或生产故障恢复方案。
如何安装或部署这个 Agent?
需要 Python 3.10 或更高版本。通过 PyPI 安装:
pip install dynamiq也可以从源码安装依赖:
git clone https://github.com/dynamiq-ai/dynamiq.git
cd dynamiq
uv sync运行示例前需设置其使用的凭证:基础 LLM 示例需要 OpenAI API key;E2B、ScaleSerp 和 Pinecone 示例还分别需要对应服务的 API key。
如何使用这个 Agent?
最小调用方式是创建连接、模型节点并执行 run:
from dynamiq.nodes.llms.openai import OpenAI
from dynamiq.connections import OpenAI as OpenAIConnection
from dynamiq.prompts import Prompt, Messageprompt = Prompt(messages=[Message(content="Translate the following text into English: {{ text }}", role="user")])
llm = OpenAI(id="openai",
connection=OpenAIConnection(api_key="OPENAI_API_KEY"),
model="gpt-4o",
temperature=0.3,
max_tokens=1000,
prompt=prompt,
)
result = llm.run(input_data={"text": "Hola Mundo!"})
print(result.output)多节点应用可创建 Workflow,将 Agent 或处理节点加入 wf.flow,并使用 depends_on、inputs 或 InputTransformer 连接数据,最后调用 wf.run(input_data={...})。异步 Agent 使用 await agent.run(...);相关代码需在 Python 异步事件循环中执行。