Просмотр исходного кода

Merge remote-tracking branch 'origin/main' into supeng-dev

supeng 1 день назад
Родитель
Сommit
ba2644c722

+ 9 - 9
examples/feature_extract/config.py

@@ -16,7 +16,7 @@ RUN_CONFIG = RunConfig(
     max_iterations=1000,
 
     # 任务名称
-    name="内容制作",
+    name="内容解构",
 
     # 知识管理配置
     knowledge=KnowledgeConfig(
@@ -32,19 +32,19 @@ RUN_CONFIG = RunConfig(
         enable_injection=True,
 
         # 默认字段(保存/搜索时自动注入)
-        owner="sunlit.howard@gmail.com",  # 所有者(空则尝试从 git config user.email 获取,再空则用 agent:{agent_id})
-        default_tags={"project": "production"},  # 默认 tags(会与工具调用参数合并)
+        owner="srt_feature_extract_1",  # 所有者(空则尝试从 git config user.email 获取,再空则用 agent:{agent_id})
+        default_tags={"project": "feature_extract"},  # 默认 tags(会与工具调用参数合并)
         default_scopes=["org:cybertogether"],  # 默认 scopes
-        default_search_types=["strategy", "tool","plan"],  # 默认搜索类型过滤
-        default_search_owner="sunlit.howard@gmail.com"  # 默认搜索 owner 过滤(空则不过滤)
+        default_search_types=["tool", "usecase", "definition"],  # 默认搜索类型过滤
+        default_search_owner="srt_feature_extract_1"  # 默认搜索 owner 过滤(空则不过滤)
     )
 )
 
 
 # ===== 任务配置 =====
 
-INPUT_DIR = "examples/plan/huahua"       # 输入素材目录
-OUTPUT_ID = "output_huahua"                   # 输出目录 ID,输出保存在 examples/plan/outputs/{OUTPUT_ID}/
+INPUT_DIR = "examples/feature_extract/huahua"        # 输入素材目录
+OUTPUT_DIR = "examples/feature_extract/huahua/output"  # 输出目录,直接保存在输入目录内
 
 
 # ===== 基础设施配置 =====
@@ -56,6 +56,6 @@ LOG_LEVEL = "INFO"
 LOG_FILE = None  # 设置为文件路径可以同时输出到文件
 
 # ===== 浏览器配置 =====
-# 可选值: "cloud" (云浏览器) 或 "local" (本地浏览器)
-BROWSER_TYPE = "cloud"
+# 可选值: "cloud" (云浏览器) 或 "local" (本地浏览器) 或 "container" (容器浏览器,支持预配置账户)
+BROWSER_TYPE = "container"
 HEADLESS = True

+ 9 - 7
examples/feature_extract/run.py

@@ -41,7 +41,7 @@ from agent.utils import setup_logging
 from agent.tools.builtin.browser.baseClass import init_browser_session, kill_browser_session
 
 # 导入项目配置
-from config import RUN_CONFIG, SKILLS_DIR, TRACE_STORE_PATH, DEBUG, LOG_LEVEL, LOG_FILE, BROWSER_TYPE, HEADLESS, INPUT_DIR, OUTPUT_ID
+from config import RUN_CONFIG, SKILLS_DIR, TRACE_STORE_PATH, DEBUG, LOG_LEVEL, LOG_FILE, BROWSER_TYPE, HEADLESS, INPUT_DIR, OUTPUT_DIR
 
 
 async def main():
@@ -57,8 +57,8 @@ async def main():
     base_dir = Path(__file__).parent
     project_root = base_dir.parent.parent
     prompt_path = base_dir / "requirement.prompt"
-    output_dir = base_dir / "output"
-    output_dir.mkdir(exist_ok=True)
+    output_dir = Path(OUTPUT_DIR)
+    output_dir.mkdir(parents=True, exist_ok=True)
 
     # 1. 配置日志
     setup_logging(level=LOG_LEVEL, file=LOG_FILE)
@@ -80,8 +80,8 @@ async def main():
     # 4. 构建任务消息
     print("4. 构建任务消息...")
     print(f"   - 输入目录: {INPUT_DIR}")
-    print(f"   - 输出 ID: {OUTPUT_ID}")
-    messages = prompt.build_messages(input_dir=INPUT_DIR, output_id=OUTPUT_ID)
+    print(f"   - 输出目录: {OUTPUT_DIR}")
+    messages = prompt.build_messages(input_dir=INPUT_DIR, output_dir=OUTPUT_DIR)
 
     # 5. 初始化浏览器
     import platform
@@ -90,12 +90,14 @@ async def main():
         actual_browser_type = "cloud"
         print("⚠️ Windows 平台检测到本地浏览器配置,自动切换为云浏览器模式")
 
-    browser_mode_name = "云浏览器" if actual_browser_type == "cloud" else "本地浏览器"
+    browser_mode_names = {"cloud": "云浏览器", "local": "本地浏览器", "container": "容器浏览器"}
+    browser_mode_name = browser_mode_names.get(actual_browser_type, actual_browser_type)
     print(f"5. 正在初始化{browser_mode_name}...")
     await init_browser_session(
         browser_type=actual_browser_type,
         headless=HEADLESS,
-        url="about:blank"
+        url="https://www.google.com/",
+        profile_name=""
     )
     print(f"   ✅ {browser_mode_name}初始化完成\n")
 

+ 16 - 6
examples/production/requirement.prompt

@@ -58,11 +58,21 @@ $system$
 ### 第二步:搜索制作策略(如何基于制作需求完成内容生成的方法论)
 
 **前置**:基于 analysis.json 确认需求。
-**方法**:你要调用 `strategy_search` agent来完成具体的搜索工作,并根据以下标准进行评估;如果评估不通过,要指示该agent继续搜索。
-**标准**:
-核心问题:哪些制作策略能同时支持好亮点和下限点?
-策略评估维度:与当前需求场景的匹配度、亮点/下限点覆盖程度、依赖工具能力(是否可用)、优点、局限性、风险。
-**输出** 将最终确认的可参考的制作策略输出到`%output_dir%/strategy.json`,schema 如下:
+
+**方法**:你 MUST 使用 agent 工具调用 strategy_research subagent 完成搜索工作。
+
+**你的职责**:
+1. 读取 analysis.json,提取亮点和下限点
+2. 调用 agent 工具,将搜索任务委托给 strategy_research subagent:
+   - 使用 `agent(task="...", agent_type="strategy_research")`
+   - task 参数需明确说明:基于哪些亮点和下限点搜索策略
+3. 评估 subagent 返回的策略是否满足以下标准:
+   - 核心问题:哪些制作策略能同时支持好亮点和下限点?
+   - 评估维度:与当前需求场景的匹配度、亮点/下限点覆盖程度、依赖工具能力(是否可用)、优点、局限性、风险
+4. 如果评估不通过,继续调用 agent 工具指示 subagent 补充搜索
+5. 将最终确认的策略整理输出到 `%output_dir%/strategy.json`
+
+**输出** `%output_dir%/strategy.json`,schema 如下:
 
 ```jsonschema
 {
@@ -94,7 +104,7 @@ $system$
 - 需求全覆盖:analysis.json 每个上限点和下限点至少出现在一个阶段的 关联需求 中
 - 素材利用:已有素材在输入中标注路径
 **方法**:
-如果对使用什么方法、什么工具或者具体工具能力边界有疑虑,可以使用 `tool_research` agent进行调研。
+在制定工序前,MUST 使用 agent 工具调用 tool_research subagent 调研 strategy.json 中涉及的具体工具能力和使用方法:`agent(task="调研 strategy.json 中各策略的工具能力边界、使用方法、参数配置建议、与需求的适配性", agent_type="tool_research")`
 
 
 工序制定的参考策略:双向收敛构建法

+ 7 - 3
examples/production/strategy_research.prompt

@@ -9,13 +9,15 @@ $system$
 你是社媒内容专家,擅长调研和分析内容制作流程和计划。你尤其关注使用AI工具或获取网络资源来完成内容制作,尽量减少实景拍摄等需要人类参与的制作。
 
 ## 任务
-你的任务是为指定的制作需求搜索制作策略,即:如何基于制作需求完成内容生成的方法论
+你的任务是为指定的制作需求搜索制作策略,即:如何基于制作需求完成内容生成的方法论。
+
+主 agent 会在 task 中告知你具体的亮点和下限点,你的搜索必须围绕这些需求展开。
 
 **搜索优先级**:
-1. **知识库优先**:用 `search_knowledge` 按需求关键词搜索,查看已有策略经验、工具评估、工作流总结。已有成熟策略则直接评估适用性。
+1. **知识库优先**:用 `knowledge_search` 按需求关键词搜索,查看已有策略经验、工具评估、工作流总结。已有成熟策略则直接评估适用性。
 2. **线上调研**:知识库搜索结果不充分时,进行线上搜索;可能的搜索角度包括:制作工序角度、工具能力等。
 
-**策略评估维度**:与当前需求场景的匹配度、依赖工具能力(是否可用)、优点、局限性、风险。
+**策略评估维度**:与当前需求场景的匹配度、亮点/下限点覆盖程度、依赖工具能力(是否可用)、优点、局限性、风险。
 
 最终列举值得参考的搜索结果,说明选择理由。
 
@@ -30,6 +32,8 @@ $system$
       "source": "string — 来源(knowledge_id / URL / 帖子链接)",
       "core_idea": "string — 核心思路",
       "tool_dependencies": ["string — 依赖的工具能力"],
+      "highlight_coverage": ["string — 能覆盖的亮点"],
+      "baseline_coverage": ["string — 能覆盖的基础下限点"],
       "pros": ["string"],
       "cons": ["string"],
       "risks": ["string"],

+ 3 - 3
examples/research/config.py

@@ -56,6 +56,6 @@ LOG_LEVEL = "INFO"
 LOG_FILE = None  # 设置为文件路径可以同时输出到文件
 
 # ===== 浏览器配置 =====
-# 可选值: "cloud" (云浏览器) 或 "local" (本地浏览器)
-BROWSER_TYPE = "cloud"
-HEADLESS = True
+# 可选值: "cloud" (云浏览器) 或 "local" (本地浏览器) 或 "container" (容器浏览器,支持预配置账户)
+BROWSER_TYPE = "container"
+HEADLESS = False

+ 45 - 0
examples/research/research.prompt

@@ -0,0 +1,45 @@
+---
+model: qwen3.5-plus
+temperature: 0.3
+---
+
+$system$
+
+## 角色
+你是图像修复技术专家,擅长使用搜索工具查找和分析图像还原方法。
+
+**搜索策略**:
+1. 使用 browser 工具搜索相关关键词
+2. 分析搜索结果,提取可行的技术方案
+3. 评估每种方案的优缺点和适用场景
+
+**评估维度**:
+- 技术可行性
+- 所需工具/服务
+- 效果质量
+- 成本和难度
+
+**输出** `%output_dir%/research_<round>.json`,schema 如下:
+
+```jsonschema
+{
+  "trace": "string — 搜索过程,包括使用的关键词、搜索结果概况等",
+  "methods": [
+    {
+      "name": "string — 方法名称",
+      "source": "string — 来源 URL",
+      "description": "string — 方法描述",
+      "tools_required": ["string — 需要的工具或服务"],
+      "pros": ["string — 优点"],
+      "cons": ["string — 缺点"],
+      "difficulty": "easy | medium | hard",
+      "cost": "free | paid | mixed"
+    }
+  ]
+}
+```
+
+
+$user$
+
+请搜索如何还原一张人像图的方法和技术。可以尝试搜索"人像图修复"、"老照片还原"、"AI图像修复"等关键词。

+ 5 - 9
examples/research/run.py

@@ -86,18 +86,14 @@ async def main():
     messages = prompt.build_messages(input_dir=INPUT_DIR, output_dir=OUTPUT_DIR)
 
     # 5. 初始化浏览器
-    import platform
-    actual_browser_type = BROWSER_TYPE
-    if platform.system() == "Windows" and BROWSER_TYPE == "local":
-        actual_browser_type = "cloud"
-        print("⚠️ Windows 平台检测到本地浏览器配置,自动切换为云浏览器模式")
-
-    browser_mode_name = "云浏览器" if actual_browser_type == "cloud" else "本地浏览器"
+    browser_mode_names = {"cloud": "云浏览器", "local": "本地浏览器", "container": "容器浏览器"}
+    browser_mode_name = browser_mode_names.get(BROWSER_TYPE, BROWSER_TYPE)
     print(f"5. 正在初始化{browser_mode_name}...")
     await init_browser_session(
-        browser_type=actual_browser_type,
+        browser_type=BROWSER_TYPE,
         headless=HEADLESS,
-        url="about:blank"
+        url="https://www.google.com/",
+        profile_name=""
     )
     print(f"   ✅ {browser_mode_name}初始化完成\n")