syftr 代理优化工具,帮助用户针对给定预算找到更优的代理工作流。用户提供自有数据集,从模型和组件中构建搜索空间,syftr通过先进的多目标贝叶斯优化方法和新型领域专用“帕累托修剪器”,对代理和非代理流的搜索空间进行高效采样,以估算准确性与成本、延迟、吞吐量等竞争目标之间的帕累托前沿(最优权衡曲线)。

帕累托最优解搜索:在指定预算下,平衡准确性与其他竞争目标,生成优化的工作流组合。

可选评估机制:支持对生成的工作流进行灵活评估,验证其实际表现。

多场景适配:可应用于基础模型、合成考试生成、语料库处理等多个场景。

syftr基于多个强大的开源项目构建:

Ray:用于在大型CPU和GPU集群上实现搜索的分布式扩展,提升计算效率。

Optuna:提供灵活的“定义即运行”接口(类似于PyTorch的即时执行),支持先进的多目标优化算法。

LlamaIndex:用于构建复杂的代理和非代理RAG工作流,处理自然语言相关任务。

HuggingFace Datasets:提供快速、协作且统一的数据集接口,方便数据加载和处理。

Trace:优化工作流中的文本组件,如提示词,提升文本处理效果。

syftr 安装和配置

安装步骤

1、克隆syftr代码仓库。

2、执行以下命令:

curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.12.7
source .venv/bin/activate
uv sync --extra dev
所需凭证

示例功能需要以下凭证:

• Azure OpenAI API密钥

• Azure OpenAI端点URL(api_url

• PostgreSQL服务器DSN(若未提供,将使用本地SQLite)

config.yaml.sample复制为config.yaml,编辑其中需要的部分以填入凭证。

配置选项

1、主配置文件config.yaml可指定路径、日志、数据库和Ray参数等,参考config.yaml.sample获取详细说明和示例,重命名该文件,然后根据自身基础设施填充必要细节。

2、环境变量配置:可通过环境变量配置,如export SYFTR_PATHS__ROOT_DIR=/foo/bar

3、数据库设置:默认使用SQLite存储Optuna数据,database.dsn字段可配置任意Optuna支持的关系数据库存储,分布式工作负载建议使用Postgres。

配置完成后,可正常运行examples/1-welcome.ipynb示例。

syftr 快速入门

1、运行make check验证凭证和配置,若未为LLM连接提供配置,大多数连接可能失败。

2、尝试位于examples目录下的Jupyter示例笔记本。

3、或通过用户API直接运行syftr研究:

from syftr import api

s = api.Study.from_file("studies/example-dr-docs.yaml")
s.run()

研究完成后获取结果:

s.wait_for_completion()
print(s.pareto_flows)
[{'metrics': {'accuracy': 0.7, 'llm_cost_mean': 0.000258675},
  'params': {'response_synthesizer_llm': 'gpt-4o-mini',
   'rag_mode': 'no_rag',
   'template_name': 'default',
   'enforce_full_evaluation': True}},
   ...
]

syftr 自定义扩展

自定义LLM

除内置LLM外,可在config.yaml中启用其他兼容OpenAI API的端点。

示例:生成模型配置

local_models:
  default_api_key: "YOUR_API_KEY_HERE"
  generative:
    - model_name: "microsoft/Phi-4-multimodal-instruct"
      api_base: "http://phi-4-host.com/openai/v1"
      max_tokens: 2000
      context_window: 129072
      is_function_calling_model: true
      additional_kwargs:
        frequency_penalty: 1.0
        temperature: 0.1
    - model_name: "deepseek-ai/DeepSeek-R1-Distill-Llama-70B"
      api_base: "http://big-vllm-host:8000/v1"
      max_tokens: 2000
      context_window: 129072
      is_function_calling_model: true
      additional_kwargs:
        temperature: 0.6

示例:嵌入模型配置

local_models:
...
  embedding:
    - model_name: "BAAI/bge-small-en-v1.5"
      api_base: "http://vllmhost:8001/v1"
      api_key: "non-default-value"
      additional_kwargs:
        extra_body:
          truncate_prompt_tokens: 512
    - model_name: "thenlper/gte-large"
      api_base: "http://vllmhost:8001/v1"
      additional_kwargs:
        extra_body:
          truncate_prompt_tokens: 512

配置文件中添加的模型会自动加入默认搜索空间,可针对特定流组件手动启用。