DSPy-Go
用 Go 构建可组合、可优化并支持多模型的 LLM 工作流与智能体。
- Star 数
- ★ 203
- 最近更新
- 4 天前
- License
- MIT
- 主语言
- Go
- FA 评分
- 49/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台OpenAI API · Claude APICodex(部分支持)
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 中 · 需要几步配置
- 开始前需要
- 典型场景
- Go 后端团队需要在现有服务中加入带明确输入输出契约的问答、分类或生成流程时,可组合 Signature 与 Predict 或 ChainOfThought。
- 不适合
- 希望开箱即用、无需自行实现 OAuth 登录与凭据存储的团队
- 需要现成性能/成本基准来选型模块与优化器的团队
这个 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 工具链后,在 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 有哪些优点和局限?
- 模块覆盖直接预测、思维链、工具推理、大上下文探索、迭代改进和并行批处理,可在同一 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 与同类方案有什么区别?
相较于原始 DSPy 框架,DSPy-Go 的明确差异是面向 Go 应用的原生实现。提供商层面可在 Anthropic、OpenAI、Gemini、Ollama、llama.cpp 和其他 OpenAI-compatible 服务之间选择;其中 Ollama 与 llama.cpp 需要兼容 OpenAI 的端点。JSON 结构化输出与 XML adapter 是两种可选输出路径,后者通过拦截器接入。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| DSPy-Go 当前 | 49 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 203 | 4 天前 | Go | OpenAI API · Claude API |
| npcpy 智能体开发框架 | 43 · 缺口较多 | 代码库 / SDK免费 + 模型费 | ★ 1.5k | 4 天前 | Python | Codex · Claude Code · OpenAI API · Claude API |
| Selectools | 65 · 存在缺口 | 代码库 / SDK免费 + 模型费 | ★ 11 | 3 天前 | Python | OpenAI API · Claude API |
| Nausicaa | 85 · 表现良好 | 命令行工具免费 + 模型费 | ★ 33 | 1 个月前 | TypeScript | ChatGPT · OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
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 错误,生产代码不应照搬该错误处理方式。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
Changes _From v0.89.0 to v0.89.1_ - b0c3273 build(deps): bump thulite theme packages and Hugo for docs (#385) - 0599943 build(deps): bump Go dependencies and fix x/net vulnerabilities (#378) - 686b915 build(deps): bump docs npm dependencies and fix audit alerts (#379) - 7242bb1 fix: use modernc.org/sqlite for CGO-free SQLite stores (#367) - b96618b build(deps): consolidate open Go dependency updates - ee9c335 fix(deps): patch docs brace-expansion vulnerabilities - be36e3a build(deps): bump google.golang.org/genai in / (#368) …在 GitHub 查看 ↗ -
发布说明摘录
Changes _From v0.88.1 to - d68228d fix(cli): sync llm-go dependency - 95f3845 fix(rlm): hide failed batch responses - d58dca9 fix(rlm): preserve subquery token totals - cad2f00 fix(rlm): preserve provider token totals - 171f594 fix(rlm): preserve failed query accounting - d89a0fc fix(rlm): propagate query accounting failures - 84bfeb1 fix(rlm): make async cleanup deterministic - e0e69e0 fix(rlm): enforce budgets between subcalls - 0717a26 fix(core): normalize incomplete token totals - 29b544d fix(rlm): enforce tree-wide token budgets - 92a4530 fix(config): wrap metrics with tracing …在 GitHub 查看 ↗ -
发布说明摘录
Changes _From v0.88.0 to - 57bf1f1 bump llm-go to v0.3.1 - e4f58b8 configure grouped Go dependency updates - 67c2a8a fix Apache Thrift vulnerability - 10394ca fix vulnerable dependencies - b5ba0d3 bump llm-go dep - ee8649e fix cli dep - 3f0d2a0 bump llm-go - 732ea61 refactor: remove direct Anthropic SDK dependency在 GitHub 查看 ↗