⚡ AdalFlow 是一个类似 PyTorch 的库,用于构建并自动优化任何语言模型工作流,从聊天机器人、RAG 到智能代理。⚡
AdalFlow 为 AdaL CLI 提供强大支持 — AI 编程助手
LLM-AutoDiff 和 Learn-to-Reason Few-shot In Context Learning 在所有自动提示优化库中达到了最高准确率。
查看文档
用 pip 安装 AdalFlow:
pip install adalflow
from adalflow import Agent, Runner
from adalflow.components.model_client.openai_client import OpenAIClient
from adalflow.core.types import (
ToolCallActivityRunItem,
RunItemStreamEvent,
ToolCallRunItem,
ToolOutputRunItem,
FinalOutputItem
)
import asyncio
# 定义工具
def calculator(expression: str) -> str:
"""计算数学表达式。"""
try:
result = eval(expression)
return f"{expression} 的结果是 {result}"
except Exception as e:
return f"错误: {e}"
async def web_search(query: str="what is the weather in SF today?") -> str:
"""根据查询进行网络搜索。"""
await asyncio.sleep(0.5)
return "旧金山今天大部分时间多云,午后会有一些阳光,气温大约 67 °F (20 °C)。"
def counter(limit: int):
"""一个计数器,数到上限为止。"""
final_output = []
for i in range(1, limit + 1):
stream_item = f"计数: {i}/{limit}"
final_output.append(stream_item)
yield ToolCallActivityRunItem(data=stream_item)
yield final_output
# 创建带工具的代理
agent = Agent(
name="MyAgent",
tools=[calculator, web_search, counter],
model_client=OpenAIClient(),
model_kwargs={"model": "gpt-4o", "temperature": 0.3},
max_steps=5
)
runner = Runner(agent=agent)
# 同步调用 - 返回带有完整执行历史的 RunnerResult
result = runner.call(
prompt_kwargs={"input_str": "计算 15 * 7 + 23 并计数到 5"}
)
print(result.answer)
# 输出: 15 * 7 + 23 的结果是 128。计数器已计数到 5: 1, 2, 3, 4, 5。
# 访问步骤历史
for step in result.step_history:
print(f"步骤 {step.step}: {step.function.name} -> {step.observation}")
# 输出:
# 步骤 0: calculator -> 15 * 7 + 23 的结果是 128
# 步骤 1: counter -> ['计数: 1/5', '计数: 2/5', '计数: 3/5', '计数: 4/5', '计数: 5/5']
# 异步调用 - 输出结构与同步调用类似
result = await runner.acall(
prompt_kwargs={"input_str": "旧金山天气怎么样?并计算 42 * 3"}
)
print(result.answer)
# 输出: 旧金山今天大部分时间多云,午后会有一些阳光,气温大约 67 °F (20 °C)。
# 42 * 3 的结果是 126。
# 异步流式 - 实时事件处理
streaming_result = runner.astream(
prompt_kwargs={"input_str": "计算 100 + 50 并计数到 3"},
)
# 实时处理流事件
async for event in streaming_result.stream_events():
if isinstance(event, RunItemStreamEvent):
if isinstance(event.item, ToolCallRunItem):
print(f"🔧 调用: {event.item.data.name}")
elif isinstance(event.item, ToolCallActivityRunItem):
print(f"📝 活动: {event.item.data}")
elif isinstance(event.item, ToolOutputRunItem):
print(f"✅ 输出: {event.item.data.output}")
elif isinstance(event.item, FinalOutputItem):
print(f"🎯 最终: {event.item.data.answer}")
# 输出:
# 🔧 调用: calculator
# ✅ 输出: 100 + 50 的结果是 150
# 🔧 调用: counter
# 📝 活动: 计数: 1/3
# 📝 活动: 计数: 2/3
# 📝 活动: 计数: 3/3
# ✅ 输出: ['计数: 1/3', '计数: 2/3', '计数: 3/3']
# 🎯 最终: 100 + 50 的结果是 150。已成功计数到 3。
运行这些示例前请设置好你的 OPENAI_API_KEY 环境变量。
查看快速入门:了解 AdalFlow 如何在 15 分钟内端到端地优化 LM 工作流。
有关追踪、人在回路等更多内容,请前往文档。
[2025年9月] LAD-VF: 从形式化方法反馈出发,利用 LLM 自动微分实现免微调机器人规划
- 使用 LLM 自动微分,实现免微调机器人规划
- 集成形式化方法反馈以进行机器人控制
[2025年1月] 自动微分任意 LLM 工作流:告别手动提示工程
- 将 LLM 应用视为自动微分图
- 比 DsPy 更高效且性能更优
[2025年12月] 通过基于采样的动量扩展文本梯度
- 使用动量加权文本梯度实现稳定、可扩展的提示优化
- Gumbel-Top-k 采样改进了探索,并能无缝集成 TextGrad、DSPy-COPRO 和 AdalFlow
AdalFlow 是日益壮大的、用于自动优化 LLM 提示与工作流库生态中的一员。以下是相关格局:
| 库 | 方法 | 核心理念 |
|---|---|---|
| AdalFlow | PyTorch 风格的自动微分 | 将 LLM 工作流视为自动微分图;在一个训练循环中统一文本梯度下降 + 少样本引导优化 |
| DSPy | 声明式编程 | 编写可组合的 Python 代码而非提示词;编译器自动优化提示词和权重 |
| Agent Lightning | 框架无关的代理训练器 | 将任何代理(LangChain、OpenAI SDK、AutoGen 等)转化为可优化实体,仅需少量代码修改;支持强化学习、自动提示优化和监督式微调 |
| TextGrad | 文本梯度下降 | 通过文本实现自动微分;使用 LLM 反馈作为梯度,优化提示词、代码和解决方案 |
AdalFlow 的定位: AdalFlow 从以上所有工作中汲取灵感(见致谢),并将它们统一到一个类似 PyTorch 的框架中。你可以在 Parameter、Generator、AdalComponent 和 Trainer 中组合使用文本梯度(类似 TextGrad)、少样本引导(类似 DSPy)和指令历史记录。
我们与德克萨斯大学奥斯汀分校的 VITA 团队 密切合作,由 Dr. Atlas Wang 领导,并与 Dr. Junyuan Hong 合作,他为推动项目进展提供了宝贵支持。
如需合作,请联系 Li Yin。
我们正在寻找一位开发者关系(Dev Rel)专员来帮助我们建设社区并支持用户。如果你感兴趣,请联系 Li Yin。
AdalFlow 的完整文档可在 adalflow.sylph.ai 获取。
AdalFlow 的命名是为了纪念 Ada Lovelace,这位先驱女数学家,她首次认识到机器可以超越单纯的计算。作为一个由女性创始人领导的团队,我们旨在激励更多女性投身于人工智能事业。
AdalFlow 是一个社区驱动的项目,我们欢迎所有人加入我们,共同构建 LLM 应用的未来。
加入我们的 Discord 社区,提问、分享你的项目,并获取 AdalFlow 的最新动态。
如需贡献,请阅读我们的贡献者指南。
现有许多工作极大地启发了 AdalFlow 库!以下是一个非详尽的列表: