DSPy-Go
用 Go 构建可组合、可优化并支持多模型的 LLM 工作流与智能体。
按维度查看评分与理由
CI 明确使用只读 contents 权限,README 说明调用外部 LLM、本地兼容端点及 OAuth 凭据由应用负责,许可证也提供作者归属;但没有展示 Agent 工具调用的权限隔离、逐次用户确认、完整敏感数据生命周期或通用外部副作用控制。依赖虽固定版本,却未见漏洞扫描、校验策略或供应链处置说明。保存、恢复和回放仅覆盖部分优化/RLM 工作流,不构成外部操作的通用回滚机制。
README 中的模块、提供商和 llm-go 分工与 go.mod 依赖基本一致,CI 在 Linux、macOS 和禁用 CGO 的 Linux/Windows 环境执行 vet、测试或构建,因此普通依赖可用性有一定证据。扣分在于未提供运行结果,且快速入门直接忽略 Process 返回的错误,给定材料也没有证明面向用户的失败消息质量。
材料面向 Go 应用开发者,覆盖零代码 CLI、编程 API、远程与本地模型、模块组合和多 Agent 场景;同时明确模型解析顺序、认证职责、嵌入能力归属和兼容端点要求。其边界说明仍不完整,智能工具选择和 Agent 触发精度主要是功能声明,没有给出选择阈值、歧义处理或误触发防护;环境要求也缺少完整的先决条件和 CGO/SQLite 部署说明。
README 的安装、快速开始、核心概念、提供商、文档和示例导航组织清晰,MIT 正文与许可证元数据一致,可给许可证和信息架构高分。安装说明可直接使用,但没有完整先决条件或故障排查;示例丰富但未见 FAQ。兼容适配器及推荐辅助函数有助于命名稳定,不过没有弃用政策。已说明部分认证和端点限制,但没有集中式已知限制、版本策略或变更日志;维护责任仅能从版权人、仓库路径和主分支文档部署推断,缺少明确支持与更新承诺。
签名、结构化输出、模块及可运行形式的代码示例使输出易于接入 Go 程序,且相对自行拼装提供商、推理模块、优化器和工具编排具有明确增量价值。扣分是这些广泛能力主要由 README 描述,未给出质量基准;也未量化令牌、延迟、并发、基础设施或维护成本,因此成本收益只能获得有限支持。
安装路径、模块名称、提供商分工和许可证可在 README、go.mod、工作流及 LICENSE 之间相互核对,CI 配置也使部分工程声明具备可追踪依据。但许多高级能力只在功能表和外部文档链接中出现,本次给定文件没有对应实现或测试证据;营销性能力声明与已证实事实没有系统分栏,推断、设计目标和验证结论的区分不够明确。
- 这是低置信度的静态审查;未执行代码、测试或任何模型/工具调用。
- 在用于可产生外部副作用的 Agent 前,应验证工具权限、逐次确认、网络目标限制及失败后的恢复行为。
- API 密钥和 OAuth 令牌由宿主应用管理;应另行确认存储、日志脱敏、刷新和撤销策略。
- 依赖树较大且包含远程模型 SDK、MCP、SQLite、解释器和云组件;采用前应进行版本锁定、许可证及漏洞审计。
- 快速入门忽略了 Process 错误,生产代码不应照搬该错误处理方式。
这个 Agent 能做什么,适合哪些场景?
DSPy-Go 是 DSPy 框架的原生 Go 实现,面向需要以模块化方式开发 LLM 应用和智能体的 Go 团队。它以 Signature 定义输入输出契约,并提供 Predict、ChainOfThought、ReAct、RLM、Refine 和 Parallel 等可组合模块。模型在执行时依次从模块级 SetLLM、请求级 core.WithRuntime 和 core.SetDefaultLLM 配置中解析,因此同一程序可以灵活选择不同模型。项目通过 pkg/llms 适配 Anthropic、OpenAI、Google Gemini、Ollama、llama.cpp 及 OpenAI-compatible 服务,底层生成、流式输出、结构化输出和工具调用由 llm-go 提供。它还包含 A2A 多智能体编排、ACE 自改进智能体、MCP 工具集成、智能工具选择以及 GEPA、MIPRO、SIMBA 等优化器。交付形态是供 Go 程序引用的库,同时提供可编译的 dspy-cli;部署环境、密钥管理和 OAuth 生命周期由应用方负责。
应用先用 core.NewSignature 声明输入字段、输出字段和指令,再将其交给 modules.NewChainOfThought、Predict、ReAct、RLM、Refine 或 Parallel 等模块。执行 Process(context.Context, map[string]interface{}) 时,模块按模块级、请求级、包默认值的顺序解析 LLM,调用已配置的提供商,并返回以字段名索引的结果;示例通过 result["answer"] 读取答案。ReAct 可结合工具执行推理,智能工具注册表支持贝叶斯选择、链式组合和 MCP 集成,A2A 协议用于分层组合多个智能体。需要机器可读结果时,可调用 WithStructuredOutput() 生成 JSON 结构化输出,或使用 interceptors.ApplyXMLInterceptors 配置 XML 适配器。优化流程可使用 GEPA、MIPRO、SIMBA、BootstrapFewShot 或 COPRO;命令行还可列出和试运行优化器,并查看 RLM 的 JSONL 会话日志。
- Go 后端团队需要在现有服务中加入带明确输入输出契约的问答、分类或生成流程时,可组合 Signature 与 Predict 或 ChainOfThought。
- 需要让模型调用外部工具的应用开发者,可使用 ReAct、工具链、复合工具和智能工具注册表构建执行流程。
- 处理大上下文任务的团队,可采用 RLM 及其 full、checkpointed、adaptive 回放策略,并通过 CLI 检查会话日志。
- 研究提示词和程序优化的工程团队,可在 GSM8K 等数据集上试用 MIPRO,并选择 GEPA、SIMBA、BootstrapFewShot 或 COPRO。
- 构建研究或协作系统的 Go 开发者,可通过 A2A 协议实现分层多智能体组合,也可参考 ACE 构建自改进智能体。
- 必须支持不同云端或本地模型的产品,可在 Anthropic、OpenAI、Gemini、Ollama、llama.cpp 和 OpenAI-compatible 端点之间配置后端。
这个 Agent 有哪些优点和局限?
- 模块覆盖直接预测、思维链、工具推理、大上下文探索、迭代改进和并行批处理,可在同一 Go API 下组合。
- 同时支持 Anthropic、OpenAI、Gemini、本地 OpenAI-compatible 端点及其他后端,避免核心工作流绑定单一模型提供商。
- 内置 GEPA、MIPRO、SIMBA、BootstrapFewShot 和 COPRO 等质量优化器,并提供 CLI 直接列出和试运行优化器。
- 支持 JSON 和 XML 结构化输出,并明确提供 XML 安全控制相关适配能力。
- A2A、ACE、MCP、工具选择和工具组合覆盖了单智能体到分层多智能体的开发需求。
- 提供商协议和模型元数据依赖独立的 llm-go 项目,引入额外依赖及跨项目升级协调成本。
- Ollama 和 llama.cpp 必须暴露 OpenAI-compatible 端点,不能直接使用任意本地运行接口。
- OpenAI Codex 订阅接入不包含交互式认证;OAuth 登录、刷新和凭据安全存储都由应用方承担。
- 安装说明未给出最低 Go 版本,也未说明不同模块或提供商之间的完整功能差异。
- README 展示了大量模块和优化器,但没有给出性能、成本或质量基准,采用前需要自行验证。
如何安装或部署这个 Agent?
准备 Go 工具链后,在 Go 模块中运行:
go get github.com/XiaoConstantine/dspy-go源码未注明最低 Go 版本。若使用 CLI,可进入 cmd/dspy-cli 并编译:
cd cmd/dspy-cli && go build -o dspy-cli随后为所选提供商设置凭据;README 的 CLI 示例使用:
export GEMINI_API_KEY="your-api-key"Ollama 和 llama.cpp 必须提供 OpenAI-compatible 端点。OpenAI Codex 订阅模式还要求宿主应用自行实现 OAuth 登录、令牌刷新和凭据存储。
如何使用这个 Agent?
CLI 的首次检查与试运行可以使用:
./dspy-cli list
./dspy-cli try mipro --dataset gsm8k
./dspy-cli view session.jsonl --stats在代码中,先通过 llms.NewGeminiLLM("", core.ModelGoogleGeminiPro) 创建模型并调用 core.SetDefaultLLM(llm)。随后用 core.NewSignature 定义 question 输入和 answer 输出,以 modules.NewChainOfThought(signature) 创建模块,再调用 cot.Process(context.Background(), map[string]interface{}{"question": "What is the capital of France?"}),最后读取 result["answer"]。生产代码应处理模型创建和 Process 返回的错误;如需覆盖默认模型,可使用模块的 SetLLM 或请求级 core.WithRuntime。
这个 Agent 与同类方案有什么区别?
相较于原始 DSPy 框架,DSPy-Go 的明确差异是面向 Go 应用的原生实现。提供商层面可在 Anthropic、OpenAI、Gemini、Ollama、llama.cpp 和其他 OpenAI-compatible 服务之间选择;其中 Ollama 与 llama.cpp 需要兼容 OpenAI 的端点。JSON 结构化输出与 XML adapter 是两种可选输出路径,后者通过拦截器接入。