DSPy.rb人工智能框架技能Skill dspy-ruby

这个技能提供了关于DSPy.rb框架的全面指导,DSPy.rb是一个用于在Ruby应用中构建和管理LLM(大语言模型)应用程序的框架。它支持创建类型安全签名、模块化设计、配置多LLM提供商、实现AI代理系统、优化提示和测试功能,适用于开发可预测的AI应用。关键词:DSPy.rb,Ruby,LLM,人工智能,类型安全,模块化,AI应用,代理系统,提示优化。

AI应用 0 次安装 0 次浏览 更新于 3/9/2026

名称:dspy-ruby 描述:此技能应在使用DSPy.rb时应用,DSPy.rb是一个用于构建类型安全、可组合LLM应用程序的Ruby框架。当实现可预测的AI功能、创建LLM签名和模块、配置语言模型提供商(OpenAI、Anthropic、Gemini、Ollama)、构建带工具的代理系统、优化提示或测试Ruby应用程序中的LLM驱动功能时使用此技能。

DSPy.rb 专家

概述

DSPy.rb是一个Ruby框架,使开发人员能够编程LLM,而非提示它们。无需手动编写提示,可通过类型安全、可组合的模块定义应用程序需求,这些模块可以像常规代码一样测试、优化和版本控制。

此技能提供全面指导,涵盖:

  • 为LLM操作创建类型安全签名
  • 构建可组合模块和工作流
  • 配置多个LLM提供商
  • 实现带工具的代理
  • 测试和优化LLM应用程序
  • 生产部署模式

核心能力

1. 类型安全签名

为LLM操作创建具有运行时类型检查的输入/输出合约。

何时使用:定义任何LLM任务,从简单分类到复杂分析。

快速参考

class EmailClassificationSignature < DSPy::Signature
  description "分类客户支持邮件"

  input do
    const :email_subject, String
    const :email_body, String
  end

  output do
    const :category, T.enum(["Technical", "Billing", "General"])
    const :priority, T.enum(["Low", "Medium", "High"])
  end
end

模板:参见assets/signature-template.rb获取全面示例,包括:

  • 基本签名与多种字段类型
  • 用于多模态任务的视觉签名
  • 情感分析签名
  • 代码生成签名

最佳实践

  • 始终提供清晰、具体的描述
  • 对受限输出使用枚举
  • 使用desc:参数包含字段描述
  • 尽可能使用特定类型而非通用String

完整文档:参见references/core-concepts.md中关于签名和类型安全的部分。

2. 可组合模块

构建封装LLM操作的可重用、可链接模块。

何时使用:实现任何LLM驱动的功能,特别是复杂的多步骤工作流。

快速参考

class EmailProcessor < DSPy::Module
  def initialize
    super
    @classifier = DSPy::Predict.new(EmailClassificationSignature)
  end

  def forward(email_subject:, email_body:)
    @classifier.forward(
      email_subject: email_subject,
      email_body: email_body
    )
  end
end

模板:参见assets/module-template.rb获取全面示例,包括:

  • 带单个预测器的基本模块
  • 链接模块的多步骤管道
  • 带条件逻辑的模块
  • 错误处理和重试模式
  • 有历史的带状态模块
  • 缓存实现

模块组合:链接模块以创建复杂工作流:

class Pipeline < DSPy::Module
  def initialize
    super
    @step1 = Classifier.new
    @step2 = Analyzer.new
    @step3 = Responder.new
  end

  def forward(input)
    result1 = @step1.forward(input)
    result2 = @step2.forward(result1)
    @step3.forward(result2)
  end
end

完整文档:参见references/core-concepts.md中关于模块和模块组合的部分。

3. 多种预测器类型

为任务选择正确的预测器:

Predict:具有类型安全输入/输出的基本LLM推理

predictor = DSPy::Predict.new(TaskSignature)
result = predictor.forward(input: "data")

ChainOfThought:添加自动推理以提高准确性

predictor = DSPy::ChainOfThought.new(TaskSignature)
result = predictor.forward(input: "data")
# 返回:{ reasoning: "...", output: "..." }

ReAct:使用工具的代理,具有迭代推理

predictor = DSPy::ReAct.new(
  TaskSignature,
  tools: [SearchTool.new, CalculatorTool.new],
  max_iterations: 5
)

CodeAct:动态代码生成(需要dspy-code_act gem)

predictor = DSPy::CodeAct.new(TaskSignature)
result = predictor.forward(task: "Calculate factorial of 5")

何时使用每种

  • Predict:简单任务、分类、提取
  • ChainOfThought:复杂推理、分析、多步骤思考
  • ReAct:需要外部工具的任务(搜索、计算、API调用)
  • CodeAct:适合用生成代码解决的任务

完整文档:参见references/core-concepts.md中关于预测器的部分。

4. LLM提供商配置

支持OpenAI、Anthropic Claude、Google Gemini、Ollama和OpenRouter。

快速配置示例

# OpenAI
DSPy.configure do |c|
  c.lm = DSPy::LM.new('openai/gpt-4o-mini',
    api_key: ENV['OPENAI_API_KEY'])
end

# Anthropic Claude
DSPy.configure do |c|
  c.lm = DSPy::LM.new('anthropic/claude-3-5-sonnet-20241022',
    api_key: ENV['ANTHROPIC_API_KEY'])
end

# Google Gemini
DSPy.configure do |c|
  c.lm = DSPy::LM.new('gemini/gemini-1.5-pro',
    api_key: ENV['GOOGLE_API_KEY'])
end

# 本地Ollama(免费、私有)
DSPy.configure do |c|
  c.lm = DSPy::LM.new('ollama/llama3.1')
end

模板:参见assets/config-template.rb获取全面示例,包括:

  • 基于环境的配置
  • 针对不同任务的多模型设置
  • 带可观测性的配置(OpenTelemetry、Langfuse)
  • 重试逻辑和后备策略
  • 预算跟踪
  • Rails初始器模式

提供商兼容性矩阵

功能 OpenAI Anthropic Gemini Ollama
结构化输出
视觉(图像) ⚠️ 有限
图像URL
工具调用 可变

成本优化策略

  • 开发:Ollama(免费)或gpt-4o-mini(廉价)
  • 测试:temperature=0.0的gpt-4o-mini
  • 生产简单任务:gpt-4o-mini、claude-3-haiku、gemini-1.5-flash
  • 生产复杂任务:gpt-4o、claude-3-5-sonnet、gemini-1.5-pro

完整文档:参见references/providers.md获取所有配置选项、提供商特定功能和故障排除。

5. 多模态与视觉支持

使用统一的DSPy::Image接口处理图像和文本。

快速参考

class VisionSignature < DSPy::Signature
  description "分析图像并回答问题"

  input do
    const :image, DSPy::Image
    const :question, String
  end

  output do
    const :answer, String
  end
end

predictor = DSPy::Predict.new(VisionSignature)
result = predictor.forward(
  image: DSPy::Image.from_file("path/to/image.jpg"),
  question: "What objects are visible?"
)

图像加载方法

# 从文件
DSPy::Image.from_file("path/to/image.jpg")

# 从URL(仅OpenAI)
DSPy::Image.from_url("https://example.com/image.jpg")

# 从base64
DSPy::Image.from_base64(base64_data, mime_type: "image/jpeg")

提供商支持

  • OpenAI:完全支持,包括URL
  • Anthropic、Gemini:仅base64或文件加载
  • Ollama:取决于模型的有限多模态支持

完整文档:参见references/core-concepts.md中关于多模态支持的部分。

6. 测试LLM应用程序

为LLM逻辑编写标准RSpec测试。

快速参考

RSpec.describe EmailClassifier do
  before do
    DSPy.configure do |c|
      c.lm = DSPy::LM.new('openai/gpt-4o-mini',
        api_key: ENV['OPENAI_API_KEY'])
    end
  end

  it '正确分类技术邮件' do
    classifier = EmailClassifier.new
    result = classifier.forward(
      email_subject: "Can't log in",
      email_body: "Unable to access account"
    )

    expect(result[:category]).to eq('Technical')
    expect(result[:priority]).to be_in(['High', 'Medium', 'Low'])
  end
end

测试模式

  • 为单元测试模拟LLM响应
  • 使用VCR进行确定性API测试
  • 测试类型安全和验证
  • 测试边缘情况(空输入、特殊字符、长文本)
  • 集成测试完整工作流

完整文档:参见references/optimization.md中关于测试的部分。

7. 优化与改进

使用优化技术自动改进提示和模块。

MIPROv2优化

require 'dspy/mipro'

# 定义评估指标
def accuracy_metric(example, prediction)
  example[:expected_output][:category] == prediction[:category] ? 1.0 : 0.0
end

# 准备训练数据
training_examples = [
  {
    input: { email_subject: "...", email_body: "..." },
    expected_output: { category: 'Technical' }
  },
  # 更多示例...
]

# 运行优化
optimizer = DSPy::MIPROv2.new(
  metric: method(:accuracy_metric),
  num_candidates: 10
)

optimized_module = optimizer.compile(
  EmailClassifier.new,
  trainset: training_examples
)

A/B测试不同方法

# 测试ChainOfThought与ReAct
approach_a_score = evaluate_approach(ChainOfThoughtModule, test_set)
approach_b_score = evaluate_approach(ReActModule, test_set)

完整文档:参见references/optimization.md中关于优化的部分。

8. 可观测性与监控

跟踪生产环境中的性能、令牌使用和行为。

OpenTelemetry集成

require 'opentelemetry/sdk'

OpenTelemetry::SDK.configure do |c|
  c.service_name = 'my-dspy-app'
  c.use_all
end

# DSPy自动创建追踪

Langfuse追踪

DSPy.configure do |c|
  c.lm = DSPy::LM.new('openai/gpt-4o-mini',
    api_key: ENV['OPENAI_API_KEY'])

  c.langfuse = {
    public_key: ENV['LANGFUSE_PUBLIC_KEY'],
    secret_key: ENV['LANGFUSE_SECRET_KEY']
  }
end

自定义监控

  • 令牌跟踪
  • 性能监控
  • 错误率跟踪
  • 自定义日志

完整文档:参见references/optimization.md中关于可观测性的部分。

快速入门工作流

对于新项目

  1. 安装DSPy.rb和提供商gems
gem install dspy dspy-openai  # 或dspy-anthropic、dspy-gemini
  1. 配置LLM提供商(参见assets/config-template.rb):
require 'dspy'

DSPy.configure do |c|
  c.lm = DSPy::LM.new('openai/gpt-4o-mini',
    api_key: ENV['OPENAI_API_KEY'])
end
  1. 创建签名(参见assets/signature-template.rb):
class MySignature < DSPy::Signature
  description "任务的清晰描述"

  input do
    const :input_field, String, desc: "描述"
  end

  output do
    const :output_field, String, desc: "描述"
  end
end
  1. 创建模块(参见assets/module-template.rb):
class MyModule < DSPy::Module
  def initialize
    super
    @predictor = DSPy::Predict.new(MySignature)
  end

  def forward(input_field:)
    @predictor.forward(input_field: input_field)
  end
end
  1. 使用模块
module_instance = MyModule.new
result = module_instance.forward(input_field: "test")
puts result[:output_field]
  1. 添加测试(参见references/optimization.md):
RSpec.describe MyModule do
  it '产生预期输出' do
    result = MyModule.new.forward(input_field: "test")
    expect(result[:output_field]).to be_a(String)
  end
end

对于Rails应用

  1. 添加到Gemfile
gem 'dspy'
gem 'dspy-openai'  # 或其他提供商
  1. config/initializers/dspy.rb创建初始器(参见assets/config-template.rb获取完整示例):
require 'dspy'

DSPy.configure do |c|
  c.lm = DSPy::LM.new('openai/gpt-4o-mini',
    api_key: ENV['OPENAI_API_KEY'])
end
  1. app/llm/目录创建模块
# app/llm/email_classifier.rb
class EmailClassifier < DSPy::Module
  # 实现在此
end
  1. 在控制器/服务中使用
class EmailsController < ApplicationController
  def classify
    classifier = EmailClassifier.new
    result = classifier.forward(
      email_subject: params[:subject],
      email_body: params[:body]
    )
    render json: result
  end
end

常见模式

模式:多步骤分析管道

class AnalysisPipeline < DSPy::Module
  def initialize
    super
    @extract = DSPy::Predict.new(ExtractSignature)
    @analyze = DSPy::ChainOfThought.new(AnalyzeSignature)
    @summarize = DSPy::Predict.new(SummarizeSignature)
  end

  def forward(text:)
    extracted = @extract.forward(text: text)
    analyzed = @analyze.forward(data: extracted[:data])
    @summarize.forward(analysis: analyzed[:result])
  end
end

模式:带工具的代理

class ResearchAgent < DSPy::Module
  def initialize
    super
    @agent = DSPy::ReAct.new(
      ResearchSignature,
      tools: [
        WebSearchTool.new,
        DatabaseQueryTool.new,
        SummarizerTool.new
      ],
      max_iterations: 10
    )
  end

  def forward(question:)
    @agent.forward(question: question)
  end
end

class WebSearchTool < DSPy::Tool
  def call(query:)
    results = perform_search(query)
    { results: results }
  end
end

模式:条件路由

class SmartRouter < DSPy::Module
  def initialize
    super
    @classifier = DSPy::Predict.new(ClassifySignature)
    @simple_handler = SimpleModule.new
    @complex_handler = ComplexModule.new
  end

  def forward(input:)
    classification = @classifier.forward(text: input)

    if classification[:complexity] == 'Simple'
      @simple_handler.forward(input: input)
    else
      @complex_handler.forward(input: input)
    end
  end
end

模式:重试与后备

class RobustModule < DSPy::Module
  MAX_RETRIES = 3

  def forward(input, retry_count: 0)
    begin
      @predictor.forward(input)
    rescue DSPy::ValidationError => e
      if retry_count < MAX_RETRIES
        sleep(2 ** retry_count)
        forward(input, retry_count: retry_count + 1)
      else
        # 后备到默认或抛出
        raise
      end
    end
  end
end

资源

此技能包含全面的参考材料和模板:

参考(按需加载获取详细信息)

  • core-concepts.md:签名、模块、预测器、多模态支持和最佳实践的完整指南
  • providers.md:所有LLM提供商配置、兼容性矩阵、成本优化和故障排除
  • optimization.md:测试模式、优化技术、可观测性设置和监控

资产(快速入门模板)

何时使用此技能

触发此技能当:

  • 在Ruby应用程序中实现LLM驱动的功能
  • 为AI操作创建类型安全接口
  • 构建带工具使用的代理系统
  • 设置或故障排除LLM提供商
  • 优化提示和提高准确性
  • 测试LLM功能
  • 为AI应用添加可观测性
  • 从手动提示工程转换为编程方法
  • 调试DSPy.rb代码或配置问题