Jelajahi Sumber

feat:nano banana 2

elksmmx 3 hari lalu
induk
melakukan
695f44f1d6

+ 1 - 1
agent/tools/builtin/browser/baseClass.py

@@ -227,7 +227,7 @@ async def init_browser_session(
     # browser-use 在非 headless 模式下有时会在 Chrome 完全启动前尝试连接 CDP,
     # browser-use 在非 headless 模式下有时会在 Chrome 完全启动前尝试连接 CDP,
     # 导致 "JSONDecodeError: Expecting value" 错误
     # 导致 "JSONDecodeError: Expecting value" 错误
     # TODO: 之后改回 headless: bool = False,或在 browser-use 修复此问题后移除此注释
     # TODO: 之后改回 headless: bool = False,或在 browser-use 修复此问题后移除此注释
-    headless: bool = True,  # 原值: False
+    headless: bool = False,  # 原值: False
     url: Optional[str] = None,
     url: Optional[str] = None,
     profile_name: str = "default",
     profile_name: str = "default",
     user_data_dir: Optional[str] = None,
     user_data_dir: Optional[str] = None,

+ 2 - 1
examples/find knowledge/run.py

@@ -12,7 +12,8 @@ import asyncio
 from pathlib import Path
 from pathlib import Path
 
 
 # Clash Verge TUN 模式兼容:禁止 httpx/urllib 自动检测系统 HTTP 代理
 # Clash Verge TUN 模式兼容:禁止 httpx/urllib 自动检测系统 HTTP 代理
-# os.environ.setdefault("no_proxy", "*")
+os.environ.setdefault("no_proxy", "*")
+os.environ.setdefault("NO_PROXY", "*")
 
 
 # 添加项目根目录到 Python 路径
 # 添加项目根目录到 Python 路径
 sys.path.insert(0, str(Path(__file__).parent.parent.parent))
 sys.path.insert(0, str(Path(__file__).parent.parent.parent))

+ 7 - 7
examples/find knowledge/test.prompt

@@ -1,5 +1,5 @@
 ---
 ---
-model: qwen/qwen3.5-122b-a10b
+model: qwen/qwen3.5-397b-a17b
 temperature: 0.3
 temperature: 0.3
 enable_thinking: false
 enable_thinking: false
 thinking_budget_tokens: 3000
 thinking_budget_tokens: 3000
@@ -10,10 +10,10 @@ $system$
 你必须输出“可审计理由链”(Audit Rationale),覆盖每一步决策与行动。
 你必须输出“可审计理由链”(Audit Rationale),覆盖每一步决策与行动。
 
 
 规则:
 规则:
-1) 每次生成任何行动(包括:给结论、提出假设、选择/不选择工具、修改 query、筛选信息、做归纳)前,先输出一个 STEP 区块。
-2) 每个 STEP 必须包含:ACTION、WHY(2-4条)、EVIDENCE(1-3条,引用输入/工具返回的字段或原句)、UNCERTAINTY(可选)、NEXT。
+1) 每次生成任何行动前,在text中先输出一个思维过程区块。
+2) 每个区块必须包含:ACTION、WHY(2-4条)、EVIDENCE(1-3条,引用输入/工具返回的字段或原句)、UNCERTAINTY(可选)、NEXT。
 3) WHY 必须是“面向读者的简短理由”,不得输出长篇内心独白;用可验证的依据支撑。
 3) WHY 必须是“面向读者的简短理由”,不得输出长篇内心独白;用可验证的依据支撑。
-4) 如果要调用工具:必须在每次工具调用前,先输出一段短理由:为什么选这个工具、为什么现在调用、备选工具为什么不用、期望返回什么...
+4) 如果要调用工具:必须在每次工具调用前,先在text中输出一段短理由:为什么选这个工具、为什么现在调用、备选工具为什么不用、期望返回什么...
 5) 若没有足够依据:在 UNCERTAINTY 中说明缺口,并给出降低不确定性的下一步(通常是调用工具或改写 query)。
 5) 若没有足够依据:在 UNCERTAINTY 中说明缺口,并给出降低不确定性的下一步(通常是调用工具或改写 query)。
 
 
 $user$
 $user$
@@ -110,7 +110,7 @@ Tool Research 的目标是
 ## 第二步:筛选特征维度(控制信号)
 ## 第二步:筛选特征维度(控制信号)
 
 
 ### 1. 调用sub agent搜索知识
 ### 1. 调用sub agent搜索知识
-- 通过sub agent工具调用子agent,在小红书搜索对控制信号的筛选有帮助的知识,并保存在knowledge中
+- 通过sub agent工具调用子agent,使用browser use工具,在小红书搜索对控制信号的筛选有帮助的知识,并保存在knowledge中
 - 向sub agent提供得到的特征,并要求调用skill/dimension_research.md,返回搜索结果
 - 向sub agent提供得到的特征,并要求调用skill/dimension_research.md,返回搜索结果
 - 将研究过程和发现保存在 `knowledge/` 目录,保留原始URL,具体策略参考skill
 - 将研究过程和发现保存在 `knowledge/` 目录,保留原始URL,具体策略参考skill
 
 
@@ -127,7 +127,7 @@ Tool Research 的目标是
 ### 1. 知识研究
 ### 1. 知识研究
 
 
 **调用sub agent搜索工具**:
 **调用sub agent搜索工具**:
-- 通过sub agent工具调用子agent,在小红书搜索对特征提取有帮助的工具的知识,并保存在knowledge中
+- 通过sub agent工具调用子agent,使用browser use工具,在小红书搜索对特征提取有帮助的工具的知识,并保存在knowledge中
 - 向sub agent提供需要提取的特征维度,并要求调用skill/tool_research.md,返回搜索结果
 - 向sub agent提供需要提取的特征维度,并要求调用skill/tool_research.md,返回搜索结果
 - 将研究过程和发现保存在 `knowledge/` 目录,保留原始URL,具体策略参考skill
 - 将研究过程和发现保存在 `knowledge/` 目录,保留原始URL,具体策略参考skill
 
 
@@ -142,7 +142,7 @@ Tool Research 的目标是
 **选择建议**:
 **选择建议**:
 - 优先选择更新、更通用、更多人使用或推荐的工具
 - 优先选择更新、更通用、更多人使用或推荐的工具
 
 
-### 3. 特征提取 **(由于资源有限,这一步跳过,不需要真正提取到特征值。但不能影响其他步骤)**
+### 3. 特征提取
 
 
 **提取过程**:
 **提取过程**:
 - 使用专业工具提取特征值
 - 使用专业工具提取特征值

+ 3 - 2
examples/find knowledge/tool/nanobanana.py

@@ -24,7 +24,8 @@ DEFAULT_TIMEOUT = 120.0
 DEFAULT_IMAGE_PROMPT = "根据输入生成图像。"
 DEFAULT_IMAGE_PROMPT = "根据输入生成图像。"
 
 
 DEFAULT_IMAGE_MODEL_CANDIDATES = [
 DEFAULT_IMAGE_MODEL_CANDIDATES = [
-    "google/gemini-2.5-flash-image",
+    # "google/gemini-2.5-flash-image",
+    "google/gemini-3.1-flash-image-preview"
 ]
 ]
 
 
 
 
@@ -200,7 +201,7 @@ def _normalize_model_id(model_id: str) -> str:
     return m
     return m
 
 
 
 
-@tool(description="通用图像生成工具,可以接受自然语言描述和/或图像输入,生成新的图像")
+@tool(description="通用的图像生成工具,根据文本描述和/或参考图像生成图片。输出格式只有图片,不能输出文字。")
 async def nanobanana(
 async def nanobanana(
     image_path: str = "",
     image_path: str = "",
     image_paths: Optional[List[str]] = None,
     image_paths: Optional[List[str]] = None,

+ 1 - 1
examples/how/tool/nanobanana.py

@@ -200,7 +200,7 @@ def _normalize_model_id(model_id: str) -> str:
     return m
     return m
 
 
 
 
-@tool(description="通用图像生成工具,可以接受自然语言描述和/或图像输入,生成新的图像")
+@tool(description="通用的图像生成工具,根据文本描述和/或参考图像生成图片。输出格式只有图片,不能输出文字。")
 async def nanobanana(
 async def nanobanana(
     image_path: str = "",
     image_path: str = "",
     image_paths: Optional[List[str]] = None,
     image_paths: Optional[List[str]] = None,