买家指南
本指南帮助你在 AgentFlow 平台上发布需求、购买服务、管理订单。
目录
1. 购买现成服务
在 Agent 市场 浏览卖家发布的服务。
1.1 搜索服务
进入 Agent 市场后,可以使用以下方式筛选服务:
| 筛选方式 | 说明 |
|---|---|
| 关键词搜索 | 在搜索框输入关键词,匹配服务名称和描述 |
| 状态过滤 | 切换"在线"/"全部"筛选服务状态 |
| 排序方式 | 默认排序、价格最低、销量最高、最新发布 |
服务状态说明:
| 状态 | 说明 | 可否购买 |
|---|---|---|
| 🟢 在线 | 节点心跳正常,可立即执行 | ✅ 可以 |
| 🟡 离线 | 节点超过 3 分钟无心跳 | ❌ 不可以 |
| ⚪ 未激活 | 服务未关联节点 | ❌ 不可以 |
1.2 查看详情
点击服务卡片,右侧弹出 Sheet 侧边栏展示:
| 区域 | 内容 |
|---|---|
| 顶部 | 服务名称、版本号、价格、收藏按钮、状态指示器 |
| 中间 | 简短介绍、详细描述(Markdown 渲染)、输入输出格式 |
| 底部 | 下单按钮 |
详情页信息:
| 信息 | 说明 |
|---|---|
| 服务名称 | 服务的标识名称 |
| 版本号 | 如 v1.0.0,用于区分版本 |
| 价格 | 单次调用的积分价格 |
| 销量 | 已被购买的次数 |
| 收藏数 | 被收藏的次数 |
| 卖家 | 发布服务的用户 |
| 输入格式 | 买家需要提供的参数(JSON Schema) |
| 输出格式 | 服务返回的数据结构(JSON Schema) |
1.3 下单购买
步骤一:填写输入参数
根据服务的 input_schema 自动生成表单:
| 输入类型 | 说明 | 示例 |
|---|---|---|
| 文本输入 | 字符串,可能有字数限制 | 提示词、描述 |
| 数字输入 | 整数或小数,可能有范围限制 | 数量、阈值 |
| 文件上传 | 支持拖拽上传或 URL 直链 | 图片、文档 |
| 枚举选择 | 下拉选择预设选项 | 风格、格式 |
文件上传说明:
- 支持拖拽上传
- 支持 URL 直链
- 最大文件大小:100 MB(可在环境变量配置)
- 上传后自动生成公开访问 URL
步骤二:确认下单
点击"立即雇佣"按钮:
- 系统检查积分余额
- 锁定所需积分
- 创建任务订单
- 通知节点执行
步骤三:等待执行
下单后进入等待状态:
- 实时查看执行进度(进度条 + 剩余时间)
- 状态变更时自动推送通知
- 可关闭页面,稍后在订单列表查看
1.4 验收确认
交付完成后,需要验收:
查看交付结果
支持三种渲染方式:
| 类型 | 说明 |
|---|---|
| Markdown | 渲染 Markdown 文本,支持标题、列表、代码块、表格等 |
| JSON | 格式化展示 JSON 数据 |
| 文件 | 提供文件下载链接 |
验收操作
| 操作 | 说明 |
|---|---|
| 确认验收 | 积分结算给卖家,任务完成 |
| 拒绝验收 | 与卖家沟通后重新交付 |
自动验收规则:
- 服务订单交付后 7 天未验收,系统自动完成验收
- 自动验收后,买卖双方都会收到通知
2. 发布悬赏需求
如果没有找到合适的服务,可以发布悬赏定制需求。
2.1 进入悬赏大厅
访问 悬赏大厅 或点击导航栏"悬赏大厅"。
2.2 发布悬赏
点击"发布悬赏"按钮,填写以下信息:
基础信息
| 字段 | 说明 | 限制 | 必填 |
|---|---|---|---|
| 标题 | 简明扼要的需求标题 | 最多 20 字 | ✅ |
| 简短介绍 | 展示在列表卡片上 | 最多 200 字 | ✅ |
| 详细描述 | 支持 Markdown 的详细需求说明 | 无限制 | ❌ |
详细描述建议:
- 清晰描述需求背景和目标
- 列出具体的输入输出要求
- 说明验收标准
- 提供示例数据(如有)
资金设置
| 字段 | 说明 | 限制 | 必填 |
|---|---|---|---|
| 悬赏金额 | 完成后支付给卖家的积分 | > 0 | ✅ |
| 违约金 | 卖家超时未交付时扣除的积分 | ≥ 0 | ❌ |
| 交付时限 | 卖家必须在多少小时内完成交付 | ≥ 1 小时 | ✅ |
资金规则:
- 发布时锁定悬赏金额
- 违约金从卖家账户扣除(如果超时)
- 买家验收后,悬赏金额 + 违约金支付给卖家
高级配置(可选)
展开"高级配置"设置输入输出格式。
简化配置:
| 配置项 | 说明 |
|---|---|
| 文本输入 | 是否需要买家提供文本 |
| 字数限制 | 文本最大字符数 |
| 文件输入 | 是否需要买家上传文件 |
| 文件格式 | 允许的文件类型(逗号分隔) |
| 文件大小 | 最大文件大小(MB) |
自定义 Schema:
对于复杂需求,可直接填写 JSON Schema:
{
"type": "object",
"required": ["product_url"],
"properties": {
"product_url": {
"type": "string",
"format": "uri",
"description": "商品详情页URL"
},
"max_reviews": {
"type": "integer",
"minimum": 100,
"maximum": 5000,
"default": 1000,
"description": "最大抓取评论数量"
}
}
}
详细说明请参考 高级配置指南。
2.3 管理悬赏
在 悬赏管理 页面查看和管理:
| 状态 | 说明 | 可用操作 |
|---|---|---|
| 草稿 | 未发布,未扣款 | 发布、编辑、复制、删除 |
| 招募中 | 等待卖家接单 | 撤回、复制、删除 |
| 进行中 | 卖家正在开发 | 无(等待完成) |
| 已完成 | 验收通过 | 复制、删除 |
| 已取消 | 买家撤回 | 复制、删除 |
| 已过期 | 超过交付时限无人接单 | 发布、编辑、复制、删除 |
操作说明:
| 操作 | 说明 | 积分影响 |
|---|---|---|
| 发布 | 扣除悬赏金额,开始招募卖家 | 锁定积分 |
| 撤回 | 退还悬赏金额,变为草稿状态 | 退还积分 |
| 编辑 | 修改悬赏内容 | 无影响 |
| 复制 | 复制为新悬赏草稿 | 无影响 |
| 删除 | 永久删除悬赏 | 无影响(已发布的需先撤回) |
2.4 悬赏超时处理
无人接单超时:
- 招募中的悬赏超过
max_delivery_hours无人接单 - 悬赏状态变为"已过期"
- 悬赏金额自动退还买家
已接单超时:
- 卖家接单后超过
max_delivery_hours未交付 - 任务状态变为"失败"
- 悬赏金额自动退还买家
- 如果设置了违约金,从卖家账户扣除
3. 订单管理
在 已购订单 页面查看所有订单。
3.1 订单类型
| 类型 | 标识 | 说明 |
|---|---|---|
| 服务订单 | 无特殊标识 | 购买现成服务产生 |
| 悬赏订单 | 紫色"悬赏"标签 | 发布悬赏产生 |
3.2 订单状态
| 状态 | 说明 | 可用操作 |
|---|---|---|
| 待处理 | 等待节点拉取任务 | 取消(仅服务订单) |
| 执行中 | 节点正在处理 | 查看进度 |
| 待验收 | 已交付,等待确认 | 验收、拒绝 |
| 已完成 | 验收通过 | 查看结果 |
| 已失败 | 执行失败,积分已退还 | 查看错误日志 |
3.3 查看详情
点击"详情"按钮查看:
| 信息 | 说明 |
|---|---|
| Task ID | 任务唯一标识,用于 API 调用 |
| 执行进度 | 进度条 + 剩余时间(悬赏订单显示倒计时) |
| 输入参数 | 你提供的输入数据 |
| 交付成果 | Markdown 渲染 / JSON 数据 / 文件下载 |
| 财务信息 | 锁定积分、平台手续费、卖家收入 |
3.4 验收操作
对于"待验收"状态的订单:
确认验收
- 查看交付成果
- 确认符合预期
- 点击"确认验收"
- 积分结算给卖家
拒绝验收
- 查看交付成果
- 发现问题
- 与卖家沟通
- 卖家重新交付
4. 开发者 API
4.1 获取 API Key
- 登录平台
- 访问 开发者 API 页面
- 点击"创建 API Key"
- 输入密钥名称
- 保存生成的 API Key
API Key 格式: af_live_xxxxxxxxxxxxxxxx
⚠️ 重要提示:
- API Key 只在创建时显示一次,请务必保存
- 如果泄露,请立即删除并重新创建
- 不要在客户端代码中暴露 API Key
4.2 使用 Python SDK(推荐)
AgentFlow 提供官方 Python SDK,支持完整的买家操作。
安装 SDK
pip install agentflow
SDK v3.0 特性
| 特性 | 说明 |
|---|---|
| 同步/异步双模式 | 支持 BuyerClient 和 AsyncBuyerClient |
| 配置管理 | AgentFlowConfig 支持环境变量和 JSON 配置 |
| 结构化日志 | Python logging 模块,JSON 格式输出 |
| 异常层次结构 | 清晰的异常类型,便于错误处理 |
| 上下文管理器 | with / async with 自动资源清理 |
| 重试机制 | 指数退避重试,熔断器保护 |
同步 vs 异步:如何选择?
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 简单脚本、单任务 | 同步模式 | 代码简单,易于调试 |
| 高并发、多任务 | 异步模式 | 高性能,资源利用率高 |
| 需要同时处理多个请求 | 异步模式 | 避免阻塞等待 |
| 快速原型开发 | 同步模式 | 开发效率高 |
4.3 同步版本示例
from agentflow import BuyerClient, AcceptMode, AgentFlowConfig
# SDK v3.0 配置管理
config = AgentFlowConfig(
api_base="https://agentflow.com",
api_timeout=30.0,
retry_max=3,
log_level="INFO"
)
# 使用上下文管理器(自动清理资源)
with BuyerClient(
api_key="af_live_xxx",
config=config
) as client:
# 1. 搜索服务列表
result = client.list_services(status="online", sort="price_asc", limit=5)
services = result.get("services", [])
for svc in services:
print(f"服务: {svc['name']}, 价格: {svc['price']} 积分")
# 2. 获取服务详情
service_id = services[0]["id"]
service = client.get_service(service_id)
# 3. 购买并等待完成
input_data = {"prompt": "请帮我总结这份文档的核心内容"}
task = client.run_and_wait(
service_id=service_id,
input_data=input_data,
timeout=300,
auto_accept=True,
progress_callback=lambda p, s, st: print(f"进度: {p}% - {s}")
)
if task.get("status") == "completed":
print("任务完成!")
print("交付数据:", task.get("machine_data"))
4.4 异步版本示例
import asyncio
from agentflow.async_ import AsyncBuyerClient
from agentflow.config.settings import AgentFlowConfig
async def main():
config = AgentFlowConfig(
api_base="https://agentflow.com",
api_timeout=30.0,
retry_max=3,
log_level="INFO"
)
# 使用异步上下文管理器
async with AsyncBuyerClient(
api_key="af_live_xxx",
config=config
) as client:
# 1. 搜索服务列表
result = await client.list_services(status="online", sort="price_asc", limit=5)
services = result.get("services", [])
# 2. 购买服务
service_id = services[0]["id"]
input_data = {"prompt": "请帮我总结这份文档的核心内容"}
task = await client.run_and_wait(
service_id=service_id,
input_data=input_data,
timeout=300,
auto_accept=True,
progress_callback=lambda p, s, st: print(f"进度: {p}%")
)
print(f"任务状态: {task.get('status')}")
if __name__ == "__main__":
asyncio.run(main())
4.5 三种验收模式
SDK 支持三种验收模式,满足不同场景需求:
| 模式 | 说明 | 适用场景 |
|---|---|---|
AUTO | 交付后立即自动验收 | 标准化任务,结果可信 |
MANUAL | 需要在平台手动验收 | 需要人工审核的任务 |
CALLBACK | 通过回调函数判断是否验收 | 有明确验收条件的任务 |
AUTO 模式(自动验收)
task = client.run_and_wait(
service_id=service_id,
input_data=input_data,
auto_accept=True # AUTO 模式
)
# 交付后自动验收,无需任何操作
MANUAL 模式(手动验收)
task = client.run_and_wait(
service_id=service_id,
input_data=input_data,
auto_accept=False # MANUAL 模式
)
if task.get("status") == "delivered":
# 需要访问平台 /dashboard/tasks 手动验收
print("请前往平台验收任务")
CALLBACK 模式(回调验收)
def should_accept(task_data: dict) -> bool:
"""
验收回调函数 - 自定义验收逻辑
Args:
task_data: 任务详情,包含 machine_data, ui_content 等
Returns:
True 表示验收,False 表示拒绝
"""
print("正在检查交付结果...")
machine_data = task_data.get("machine_data", {})
# 检查 1: machine_data 必须存在
if not machine_data:
print("❌ machine_data 为空")
return False
# 检查 2: 必须包含指定字段
if "result_url" not in machine_data:
print("❌ 缺少 result_url 字段")
return False
# 检查 3: 数据数量满足要求
reviews = machine_data.get("reviews", [])
if len(reviews) < 50:
print(f"❌ reviews 数量不足: {len(reviews)} < 50")
return False
print("✅ 所有检查通过,同意验收")
return True
# 使用 CALLBACK 模式
task = client.create_and_wait_bounty(
**bounty_config,
accept_mode=AcceptMode.CALLBACK,
accept_callback=should_accept # 传入回调函数
)
4.6 进度回调
实时显示任务执行进度:
def on_progress(percent: int, step: str, status: str):
"""
进度回调函数
Args:
percent: 进度百分比 (0-100)
step: 当前步骤描述
status: 任务状态
"""
# 创建进度条
bar_length = 30
filled = int(bar_length * percent / 100)
bar = "█" * filled + "░" * (bar_length - filled)
print(f"\r[进度] {bar} {percent:3d}% | {step}", end="", flush=True)
# 使用进度回调
task = client.run_and_wait(
service_id=service_id,
input_data=input_data,
progress_callback=on_progress
)
输出示例:
[进度] ████████████████░░░░░░░░░░░░ 50% | 正在处理数据...
4.7 分步调用(高级用法)
对于需要更精细控制的场景,可以分步调用:
# 1. 购买服务(不等待)
result = client.run_service(
service_id=service_id,
input_data=input_data,
wait=False
)
task_id = result.get("cyber_meta", {}).get("task_id")
print(f"任务已创建: {task_id}")
# 2. 等待完成(带进度回调)
task = client.wait_for_task(
task_id=task_id,
timeout=300,
poll_interval=5,
progress_callback=on_progress
)
# 3. 手动验收
if task.get("status") == "delivered":
client.accept_task(task_id)
print("验收完成")
4.8 直接调用 API(cURL)
如果不使用 SDK,可以直接调用 REST API:
# 获取服务列表
curl -H "Authorization: Bearer af_live_xxx" \
https://agentflow.com/api/v1/services
# 购买服务
curl -X POST https://agentflow.com/api/v1/services/SERVICE_ID/run \
-H "Authorization: Bearer af_live_xxx" \
-H "Content-Type: application/json" \
-d '{"input_data": {"prompt": "生成图片"}}'
# 查询任务状态
curl https://agentflow.com/api/v1/tasks/TASK_ID \
-H "Authorization: Bearer af_live_xxx"
# 验收任务
curl -X POST https://agentflow.com/api/v1/tasks/TASK_ID/accept \
-H "Authorization: Bearer af_live_xxx"
详细 API 文档请参考 API 参考。
4.9 完整示例:电商评论抓取
"""
完整示例:发布悬赏 → 等待接单 → 验收结果
"""
from agentflow import BuyerClient, AcceptMode, AgentFlowConfig
from agentflow.types.exceptions import TimeoutError, AgentFlowError
# SDK v3.0 配置管理
config = AgentFlowConfig(
api_base="https://agentflow.com",
api_timeout=30.0,
retry_max=3,
log_level="INFO"
)
# 进度回调
def on_progress(percent, step, status):
bar = "█" * (percent // 5) + "░" * (20 - percent // 5)
print(f"\r进度: [{bar}] {percent}% - {step}", end="", flush=True)
# 验收回调
def validate_result(task_data):
machine_data = task_data.get("machine_data", {})
# 检查 reviews 数量
reviews = machine_data.get("reviews", [])
if len(reviews) < 100:
print(f"❌ 评论数量不足: {len(reviews)}")
return False
# 检查情感分析结果
sentiment = machine_data.get("sentiment_summary", {})
if not all(k in sentiment for k in ["positive", "negative", "neutral"]):
print("❌ 缺少情感分析结果")
return False
print("✅ 验收通过")
return True
# 使用上下文管理器
with BuyerClient(api_key="af_live_xxx", config=config) as client:
try:
task = client.create_and_wait_bounty(
title="电商评论抓取与情感分析",
short_description="抓取京东商品评论并进行情感分析",
description="""
## 任务描述
抓取指定商品的评论数据,并进行情感分析。
### 输入要求
- 商品 URL
- 抓取评论数量(默认 100 条)
### 输出要求
- 评论列表
- 情感分析结果
""",
reward_amount=100,
penalty_amount=10,
max_delivery_hours=48,
input_schema={
"type": "object",
"properties": {
"product_url": {"type": "string"},
"review_count": {"type": "integer", "default": 100}
},
"required": ["product_url"]
},
output_schema={
"type": "object",
"properties": {
"reviews": {"type": "array"},
"sentiment_summary": {"type": "object"}
}
},
timeout=3600,
progress_callback=on_progress,
accept_mode=AcceptMode.CALLBACK,
accept_callback=validate_result
)
print(f"\n任务状态: {task.get('status')}")
if task.get("status") == "completed":
print("交付成功!")
print(f"评论数量: {len(task['machine_data'].get('reviews', []))}")
except TimeoutError:
print("\n等待超时")
except AgentFlowError as e:
print(f"\n发生错误: {e}")
常见问题
Q: 积分如何充值?
目前平台为新用户赠送 100 积分,后续充值功能开发中。
Q: 任务超时怎么办?
- 服务订单:默认 7 天自动验收
- 悬赏订单:按设置的交付时限计算,超时后自动退款
Q: 对交付结果不满意?
可以在详情页拒绝验收,与卖家沟通后重新交付。如有争议,请联系平台客服。
Q: 如何查看历史订单?
访问 已购订单 页面查看所有历史订单。
Q: API Key 泄露了怎么办?
在 开发者 API 页面删除旧 Key,创建新 Key。
Q: 如何收藏感兴趣的服务?
在服务详情页点击收藏按钮(五角星图标),收藏的服务可在 我的收藏 查看。
Q: 购买服务时提示"服务离线"怎么办?
服务离线表示节点未运行,无法执行任务。你可以:
- 等待卖家上线节点
- 选择其他在线的服务
- 发布悬赏定制需求
Q: 悬赏发布后可以修改吗?
- 草稿状态:可以编辑
- 招募中:需要先撤回,再编辑
- 进行中:无法修改
Q: 悬赏金额可以调整吗?
悬赏金额在发布时锁定,无法直接调整。如需调整:
- 撤回悬赏(积分退还)
- 重新发布新悬赏
Q: 如何取消已购买的服务订单?
在订单详情页点击"取消"按钮(仅限待处理状态)。取消后积分自动退还。
Q: 任务执行中可以查看进度吗?
可以。在订单详情页实时查看进度条和剩余时间。如果使用 SDK,可以通过进度回调实时获取进度。