当前位置: 首页 > news >正文

Forge中的项目管理:构建LLM驱动的任务管理系统

Forge中的项目管理:构建LLM驱动的任务管理系统

【免费下载链接】forgeA Python framework for self-hosted LLM tool-calling and multi-step agentic workflows项目地址: https://gitcode.com/GitHub_Trending/forge54/forge

Forge是一个功能强大的Python框架,专为自托管LLM工具调用和多步骤代理工作流设计。它提供了完整的任务管理生命周期,包括系统提示、工具执行、上下文压缩和护栏机制,帮助开发者构建可靠的LLM驱动任务管理系统。

核心功能概览

Forge的任务管理系统建立在几个关键组件之上,这些组件协同工作,确保LLM能够可靠地完成复杂任务:

  • WorkflowRunner:定义工具、选择后端、运行结构化代理循环,管理完整的任务生命周期
  • 工具规范(ToolSpec):描述LLM可以调用的Python函数及其参数
  • 上下文管理:自动处理对话历史,防止上下文窗口溢出
  • 护栏机制:包括步骤执行、先决条件检查、重试提示和错误恢复

三种集成模式

Forge提供了灵活的集成方式,可根据项目需求选择最合适的模式:

特性WorkflowRunner代理模式中间件模式
验证和救援解析
重试提示
响应工具调用者添加自动注入调用者添加
步骤执行是(调用者连接)
先决条件是(调用者连接)
上下文压缩调用者连接ContextManager

快速开始:构建你的第一个任务管理系统

安装与设置

首先,克隆Forge仓库并安装依赖:

git clone https://gitcode.com/GitHub_Trending/forge54/forge cd forge pip install .

创建简单的天气查询工作流

下面是一个完整的示例,展示如何创建一个天气查询任务管理系统:

from pydantic import BaseModel, Field from forge.core.workflow import Workflow, ToolDef, ToolSpec from forge.core.runner import WorkflowRunner from forge.clients.llamafile import LlamafileClient from forge.server import setup_backend, BudgetMode # 定义工具函数 def get_weather(city: str) -> str: return f"72°F and sunny in {city}" def report_weather(city: str, weather: str) -> str: return f"Weather report: {weather}" # 定义工具参数模型 class GetWeatherParams(BaseModel): city: str = Field(description="City name") class ReportWeatherParams(BaseModel): city: str = Field(description="City name") weather: str = Field(description="Weather description") # 创建工作流 workflow = Workflow( name="weather", description="Look up weather and report it.", tools={ "get_weather": ToolDef( spec=ToolSpec( name="get_weather", description="Get current weather for a city", parameters=GetWeatherParams, ), callable=get_weather, ), "report_weather": ToolDef( spec=ToolSpec( name="report_weather", description="Report the weather", parameters=ReportWeatherParams, ), callable=report_weather, ), }, required_steps=["get_weather"], # 必须调用的步骤 terminal_tool="report_weather", # 结束工作流的工具 ) # 设置后端和上下文管理器 server, ctx = await setup_backend( backend="llamaserver", gguf_path="path/to/Ministral-3-8B-Instruct-2512-Q8_0.gguf", budget_mode=BudgetMode.FORGE_FULL, ) # 创建客户端和运行器 client = LlamafileClient( gguf_path="path/to/Ministral-3-8B-Instruct-2512-Q8_0.gguf", mode="native", recommended_sampling=True, ) runner = WorkflowRunner(client=client, context_manager=ctx, stream=True) # 运行工作流 await runner.run(workflow, "What's the weather in Paris?") await server.stop()

任务管理的核心组件

工作流定义

工作流是Forge任务管理的基础,它定义了完成特定任务所需的工具、步骤和规则。通过Workflow类,你可以指定:

  • 工具集合及其调用方式
  • 必须执行的步骤(required_steps
  • 结束工作流的终端工具(terminal_tool
  • 工具之间的依赖关系(先决条件)

上下文管理

长时间运行的任务会累积大量对话历史,可能超出LLM的上下文窗口限制。Forge的上下文管理系统自动处理这一问题:

from forge.context import ContextManager, TieredCompact # 默认:分层压缩,保留最近2条消息 ctx = ContextManager(strategy=TieredCompact(keep_recent=2), budget_tokens=8192) # 无压缩(适用于不会超出限制的短工作流) ctx = ContextManager(strategy=NoCompact(), budget_tokens=8192)

上下文压缩分三个阶段进行:

  1. 总结旧的工具结果,保持最近的消息完整
  2. 压缩对话中间部分,保留系统提示和最近上下文
  3. 激进压缩,只保留系统提示和最后几个对话

护栏机制

Forge内置了多种护栏机制,确保任务可靠执行:

护栏功能
步骤执行验证在终端工具执行前是否调用了所有必需的工具
先决条件强制工具之间的依赖关系(例如:必须先读取再编辑)
重试提示当工具调用验证失败时,提示LLM重试
救援循环从LLM的文本输出中恢复格式错误的工具调用
错误恢复工具执行错误后重新提示,而不是崩溃
压缩防止长对话中的上下文溢出

多终端工具

工作流可以有多个有效的结束点,通过将终端工具指定为列表实现:

workflow = Workflow( ... terminal_tool=["set_ac", "no_action"], # 任一工具都可以结束工作流 )

高级任务管理功能

工具先决条件

工具可以声明依赖关系,确保在调用特定工具前必须先调用其他工具:

# 名称匹配:任何对read_file的调用都满足先决条件 ToolDef( spec=edit_spec, callable=edit_file, prerequisites=["read_file"], ) # 参数匹配:必须使用相同的path调用过read_file ToolDef( spec=edit_spec, callable=edit_file, prerequisites=[{"tool": "read_file", "match_arg": "path"}], )

多轮对话

通过on_message回调和initial_messages参数,Forge支持构建持续的多轮对话系统:

# 消费者管理对话历史 conversation: list[Message] = [] # 第一轮 - 正常运行,on_message收集所有内容 runner = WorkflowRunner(client=client, context_manager=ctx, on_message=lambda msg: conversation.append(msg)) await runner.run(workflow, "first question") # 后续轮次 - 用完整历史作为种子,添加新的用户消息 turn_messages: list[Message] = [] runner = WorkflowRunner(client=client, context_manager=ctx, on_message=lambda msg: turn_messages.append(msg)) seed = list(conversation) seed.append(Message(MessageRole.USER, "follow-up question", MessageMeta(MessageType.USER_INPUT))) await runner.run(workflow, "follow-up question", initial_messages=seed) conversation.extend(turn_messages)

优先级队列与任务抢占

SlotWorker提供了基于优先级的任务排队和自动抢占功能,适用于多任务共享单个推理资源的场景:

from forge import SlotWorker, WorkflowRunner # 创建运行器和工作器 runner = WorkflowRunner(client=client, context_manager=ctx) worker = SlotWorker(runner) await worker.start() # 定义优先级 USER = 0 # 最高优先级 ESCALATED = 1 ROUTINE = 2 # 最低优先级 # 提交任务 result = await worker.submit(calendar_wf, "what's on my schedule?", priority=USER) result = await worker.submit(ac_wf, "check temperature", priority=ROUTINE)

当高优先级任务提交时,正在运行的低优先级任务会被自动取消,确保重要任务优先执行。

最佳实践与性能优化

过滤瞬态消息

在长时间运行的会话中,过滤掉重试提示和错误消息等瞬态内容,保持上下文清洁:

from forge.core.messages import MessageType TRANSIENT_TYPES = { MessageType.RETRY_NUDGE, MessageType.STEP_NUDGE, MessageType.PREREQUISITE_NUDGE, MessageType.TEXT_RESPONSE, } def on_message(self, msg: Message) -> None: if msg.metadata.type not in TRANSIENT_TYPES: self.messages.append(msg)

采样参数优化

不同模型家族有不同的推荐温度、top_p和top_k参数。启用推荐采样可显著提高性能:

client = LlamafileClient( gguf_path="path/to/model.gguf", mode="native", recommended_sampling=True, # 启用推荐采样参数 )

取消机制

使用cancel_event实现协作式取消,允许在任务运行时中断:

import asyncio cancel = asyncio.Event() # 在另一个协程或回调中触发取消 cancel.set() try: result = await runner.run(workflow, "task", cancel_event=cancel) except WorkflowCancelledError as e: print(f"Cancelled at iteration {e.iteration}") print(f"Completed steps: {e.completed_steps}")

总结

Forge提供了一个强大而灵活的框架,用于构建LLM驱动的任务管理系统。通过其直观的API和内置的可靠性特性,开发者可以专注于业务逻辑而非基础设施细节。无论是简单的单步工具调用还是复杂的多步骤工作流,Forge都能提供一致且可靠的执行环境。

要深入了解更多高级功能,请参阅官方文档:

  • 用户指南
  • 架构文档
  • 模型指南
  • 评估指南

【免费下载链接】forgeA Python framework for self-hosted LLM tool-calling and multi-step agentic workflows项目地址: https://gitcode.com/GitHub_Trending/forge54/forge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/886319/

相关文章:

  • Lovable电商网站搭建,为什么你的A/B测试总失败?揭秘头部DTC品牌私藏的5层数据埋点架构(含Segment+PostHog+自研BEAM追踪器对比实测)
  • GPT-5.5论文润色评测:它真的能提升论文学术质感吗?
  • Unity多维排序机制全解析:渲染、执行与序列化顺序
  • PySide6桌面宠物框架:如何用Python代码打造你的专属数字伙伴?
  • 2023全新Slimefun4入门指南:500+新物品与配方的终极探索
  • 2026视频号视频保存到相册终极指南:7种方法实测,这4款工具免费又好用 - 科技热点发布
  • 2026快手去水印视频解析在线提取终极测评:6种方法实测,这4款小程序最稳 - 科技热点发布
  • 深度解析NotaGen数据增强策略:15种调号扩展与休止符优化
  • Taotoken多模型聚合平台为Matlab开发者带来的效率提升场景
  • 5分钟解决Windows PDF处理难题:Poppler-windows一站式解决方案
  • 精密之眼:西恩士汽车弹簧清洁度分析仪装置的核心技术与工程化设计 - 工业干货社
  • 反向海淘独立站分层架构设计与模块解耦思路
  • 对比直接使用厂商 API 观察 Taotoken 在账单清晰度方面的优势
  • 2026小红书去水印工具实测排行:这4款免费无广告小程序,真正好用不踩雷 - 科技热点发布
  • 01 - Python 简介与环境搭建
  • 逆向分析蓝牙设备通信?手把手教你配置nRF Sniffer 4.1.1到Wireshark 4.2.3
  • 差分隐私GDP机制紧密度量化:从隐私剖面到∆度量的实践指南
  • Rokid AR眼镜高精度图像识别实战:Unity亚像素定位与PnP优化
  • C++随机打乱函数的项目实践
  • 实测 okbiye AI 毕业论文功能:流程拆解 + 使用指南,论文写作效率直接拉满
  • ModernWMS二次开发指南:如何基于开源项目定制企业专属WMS
  • 2026年最新免费在线去水印软件横评:6种方法实测,这4款小程序成最终赢家 - 科技热点发布
  • 小红书视频怎么下载到手机?2026年6种方法实测,这4款免费小程序最靠谱 - 科技热点发布
  • 5秒解锁B站缓存视频:m4s-converter完整使用指南
  • 02 - 第一个 Python 程序
  • 如何用软件魔法扩展你的Windows数字工作空间
  • 2026这6款神级降AI率工具大曝光,一键把AI检测率精准控到安全区!
  • angular-tree-component核心功能解析:拖拽、复选框与虚拟滚动全攻略
  • 事件幂等性失效导致资损?DeepSeek架构师紧急复盘:4种隐形漏洞+实时熔断配置模板
  • 告别SVN恐惧症:美术策划也能轻松上手的Unity PlasticSCM极简入门(附团队项目拉取实战)