| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/usr/bin/env python3
- """
- 处理上传的知识条目并添加到 pre_upload_list.json
- """
- import json
- import uuid
- import time
- # 读取现有文件
- with open('/root/Agent/pre_upload_list.json', 'r', encoding='utf-8') as f:
- data = json.load(f)
- # 用户上传的 3 条知识
- new_knowledge = [
- {
- "主题": "在调用 ToolHub nano_banana 工具时,图片传递需要手动上传到 OSS 获取 CDN URL",
- "内容": "当使用 ToolHub 的 nano_banana 工具进行图像生成时,不能直接传本地文件路径(如 examples/xxx/image.png),因为 ToolHub 服务运行在远程服务器上,无法访问调用方的本地文件系统。\n\n正确做法:\n1. 先调用 image_uploader 工具将本地图片上传到 OSS\n2. 获取返回的 cdn_url(如 https://res.cybertogether.net/toolhub_images/xxx.png)\n3. 将 cdn_url 传入 toolhub_call 的 image_urls 参数\n\n案例:生成 img_3 时,最初直接传本地路径 character_ref_kneel.png 导致 HTTP 503 错误「文件不存在」,改用 image_uploader 上传后获取 CDN URL 再调用 nano_banana 成功生成。\n\n注意:虽然部分 ToolHub 工具文档声称支持自动上传本地路径,但 nano_banana 实际不支持此功能,需手动处理。",
- "类型": ["experience"],
- "标签": {"intent": "图像生成", "state": "nano_banana", "tool": "toolhub_call"},
- "评分": 5,
- "source": {"category": "execution"}
- },
- {
- "主题": "在图像生成任务中,使用 nano_banana 进行多图融合保持人物一致性的方法",
- "内容": "当需要保持多张生成图的人物一致性时(如系列图 img_1~img_5),使用 nano_banana 工具的多图融合功能:\n\n1. 在 image_urls 数组中传入多张参考图:\n - 底图(当前姿态的 character_ref_*.png)\n - 前序生成结果(如 img_1_restored_v1.png 用于链式一致性)\n2. 在 prompt 中明确描述需要保持的特征(如 white V-neck backless maxi dress, brown long hair)\n3. 使用 aspect_ratio 参数控制输出比例(如 3:4)\n\n案例:img_3 生成时传入 character_ref_kneel.png(跪坐姿态底图)和 img_1_restored_v1.png(前序结果),成功保持了白裙款式、发型、体态的一致性,评估得分 8.5/10。\n\n优势:nano_banana 基于 Gemini 多模态模型,对多图特征融合理解能力强,比传统 IP-Adapter 更灵活。",
- "类型": ["experience"],
- "标签": {"intent": "人物一致性", "state": "nano_banana", "technique": "多图融合"},
- "评分": 4,
- "source": {"category": "execution"}
- },
- {
- "主题": "图像生成任务的标准化执行流程",
- "内容": "完整的图像生成任务应遵循以下流程:\n\n1. **素材验证**:使用 read_file 检查所有参考素材文件存在且可读\n2. **源信息读取**:读取制作表 JSON 和通用创作文件,提取细节描述融入 prompt\n3. **ToolHub 检查**:调用 toolhub_health 确认服务可用,toolhub_search 查找合适工具\n4. **图片上传**:使用 image_uploader 将本地图片转为 CDN URL\n5. **执行生成**:调用 toolhub_call 执行生成,记录完整参数\n6. **结果验证**:使用 evaluate_image 进行自动化评估(单图 6 维度/多图 5 维度一致性)\n7. **日志记录**:追加 generation_log.md,包含素材验证、生成参数、验证结果、评估详情\n\n案例:img_3 任务按此流程执行,从素材验证到日志记录全程可追溯,评估 8.5/10 通过。\n\n关键点:每次生成都必须记录完整参数便于迭代优化;评估结果低于 7 分需调整配置重新生成。",
- "类型": ["experience"],
- "标签": {"intent": "图像生成流程", "state": "workflow", "domain": "production"},
- "评分": 4,
- "source": {"category": "execution"}
- }
- ]
- # 转换为标准格式并添加
- current_time = int(time.time())
- timestamp = time.strftime("%Y%m%d-%H%M%S", time.localtime(current_time))
- for i, item in enumerate(new_knowledge):
- # 生成唯一 ID
- knowledge_id = f"knowledge-{timestamp}-{uuid.uuid4().hex[:4]}"
-
- # 转换为标准格式
- standard_knowledge = {
- "id": knowledge_id,
- "task": item["主题"],
- "content": item["内容"],
- "types": item["类型"],
- "tags": item["标签"],
- "score": item["评分"],
- "source": item["source"]
- }
-
- data['knowledge'].append(standard_knowledge)
- print(f"添加知识 {i+1}: {knowledge_id}")
- print(f" 主题:{item['主题'][:50]}...")
- # 写回文件
- with open('/root/Agent/pre_upload_list.json', 'w', encoding='utf-8') as f:
- json.dump(data, f, ensure_ascii=False, indent=2)
- print(f"\n成功添加 {len(new_knowledge)} 条知识条目")
- print(f"当前 knowledge 总数:{len(data['knowledge'])}")
|