GitHub_Trending/co/computer-use-preview日志系统详解:调试与问题定位最佳实践
在日常开发和运维过程中,日志系统是排查问题、优化性能的关键工具。GitHub_Trending/co/computer-use-preview项目的日志系统虽然未采用专业日志框架,但通过精心设计的打印语句和状态跟踪机制,依然能够有效支持调试与问题定位。本文将详细解析该项目的日志实现方式,帮助开发者快速掌握调试技巧和最佳实践。
日志系统架构概览
GitHub_Trending/co/computer-use-preview项目的日志系统主要通过print函数和termcolor库实现,核心代码集中在agent.py文件中。系统采用分层日志策略,将日志信息分为普通打印、彩色提示和表格输出三种类型,分别用于不同场景的信息展示。
日志类型分布
| 日志类型 | 实现方式 | 应用场景 | 代码位置 |
|---|---|---|---|
| 普通打印 | print() |
基本状态信息、错误详情 | agent.py |
| 彩色提示 | termcolor.cprint() |
警告、错误等重要信息 | agent.py |
| 表格输出 | rich.table.Table |
结构化数据展示 | agent.py |
日志流程控制
日志系统与代理循环紧密集成,形成完整的信息反馈机制。主要流程如下:
graph TD
A[开始代理循环] --> B[生成模型响应]
B --> C{是否成功}
C -->|是| D[提取推理和函数调用]
C -->|否| E[打印错误信息并重试]
D --> F[判断是否有函数调用]
F -->|是| G[执行函数并记录日志]
F -->|否| H[打印完成信息并退出]
G --> I[更新环境状态]
I --> B
关键日志实现解析
错误处理与重试机制
项目在agent.py的get_model_response方法中实现了带重试机制的错误处理,通过print输出异常信息,并使用指数退避策略进行重试:
def get_model_response(
self, max_retries=5, base_delay_s=1
) -> types.GenerateContentResponse:
for attempt in range(max_retries):
try:
response = self._client.models.generate_content(
model=self._model_name,
contents=self._contents,
config=self._generate_content_config,
)
return response # Return response on success
except Exception as e:
print(e) # 打印异常详情
if attempt < max_retries - 1:
delay = base_delay_s * (2**attempt)
message = (
f"Generating content failed on attempt {attempt + 1}. "
f"Retrying in {delay} seconds...\n"
)
termcolor.cprint( # 使用彩色打印警告信息
message,
color="yellow",
)
time.sleep(delay)
else:
termcolor.cprint( # 使用彩色打印错误信息
f"Generating content failed after {max_retries} attempts.\n",
color="red",
)
raise
结构化日志输出
在函数调用过程中,项目使用rich.table.Table创建结构化日志,清晰展示推理过程和函数调用信息:
table = Table(expand=True)
table.add_column(
"Gemini Computer Use Reasoning", header_style="magenta", ratio=1
)
table.add_column("Function Call(s)", header_style="cyan", ratio=1)
table.add_row(reasoning, "\n".join(function_call_strs))
if self._verbose:
console.print(table) # 打印结构化表格
print()
这种方式使开发者能够直观地了解代理的决策过程和执行步骤,极大提高了调试效率。
安全确认日志
项目在agent.py中实现了安全确认机制,当需要用户确认时,会输出详细的安全提示信息:
termcolor.cprint(
"Safety service requires explicit confirmation!",
color="yellow",
attrs=["bold"],
)
print(safety["explanation"]) # 打印安全说明
decision = ""
while decision.lower() not in ("y", "n", "ye", "yes", "no"):
decision = input("Do you wish to proceed? [Yes]/[No]\n")
调试实践指南
基本日志查看
默认情况下,项目会输出基本日志信息。要查看详细日志,可在运行时确保verbose参数设置为True(默认值):
agent = BrowserAgent(
browser_computer=computer,
query=args.query,
model_name=args.model,
verbose=True # 启用详细日志
)
关键日志位置
以下是调试过程中需要重点关注的日志输出位置:
- 模型响应错误:agent.py - 打印模型调用异常详情
- 函数执行状态:agent.py - 展示函数调用表格
- 安全确认提示:agent.py - 安全操作确认信息
- 代理循环结束:agent.py - 打印最终推理结果
问题定位流程
当遇到问题时,建议按照以下流程进行定位:
- 检查agent.py输出的异常信息,确定是否为模型调用错误
- 查看函数调用表格,确认参数是否正确传递
- 检查环境状态变化,通过computer.py中的
current_state方法获取当前状态 - 若涉及浏览器操作,可查看playwright.py中的相关方法实现
高级日志优化建议
虽然当前日志系统已能满足基本需求,但仍有以下优化空间:
引入专业日志框架
建议使用Python标准库中的logging模块替代直接使用print,实现日志级别控制和输出重定向:
import logging
# 初始化日志配置
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("agent.log"),
logging.StreamHandler()
]
)
# 使用日志代替print
logging.error(f"Generating content failed: {e}")
增加日志上下文信息
在关键操作日志中增加更多上下文信息,如时间戳、代理ID等,便于分布式环境下的日志追踪:
# 改进示例
from datetime import datetime
def log_with_context(message, level="info"):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
context = f"[{timestamp}] [Agent ID: {self.agent_id}]"
full_message = f"{context} {message}"
if level == "info":
print(full_message)
elif level == "warning":
termcolor.cprint(full_message, color="yellow")
elif level == "error":
termcolor.cprint(full_message, color="red")
实现日志轮转
为避免日志文件过大,建议实现日志轮转机制,可使用logging.handlers.RotatingFileHandler或TimedRotatingFileHandler:
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler(
"agent.log",
maxBytes=1024*1024*5, # 5MB
backupCount=5 # 保留5个备份
)
总结
GitHub_Trending/co/computer-use-preview项目的日志系统通过简洁有效的设计,为开发者提供了必要的调试信息。本文详细介绍了日志系统的实现细节和使用方法,包括:
- 日志系统的架构和类型分布
- 关键日志实现代码解析
- 实际调试操作指南
- 日志系统的优化建议
通过合理利用现有日志和实施优化建议,开发者可以更高效地定位和解决问题,提升开发效率。完整的日志实现代码可参考agent.py文件,更多使用示例可查阅项目README.md。
掌握这些日志调试技巧,将帮助你在使用和开发该项目时事半功倍,快速解决遇到的各种问题。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00