news 2026/9/4 12:30:58

screenshot-to-code 后端开发实战:Poetry 工具链、Pytest 测试与 Prompt 摘要调试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
screenshot-to-code 后端开发实战:Poetry 工具链、Pytest 测试与 Prompt 摘要调试

screenshot-to-code 后端开发实战:Poetry 工具链、Pytest 测试与 Prompt 摘要调试

【免费下载链接】screenshot-to-codeDrop in a screenshot and convert it to clean code (HTML/Tailwind/React/Vue)项目地址: https://gitcode.com/GitHub_Trending/sc/screenshot-to-code

本文围绕 screenshot-to-code 仓库backend/README.md中给出的三条后端开发工作流展开:用poetry run pyright运行类型检查、用poetry run pytest运行测试,以及用utils.py里的print_prompt_summary快速可视化 LLM prompt。读完本文,你可以在本仓库的后端环境中完整跑起类型检查与测试套件,并能对发送给模型的 prompt 消息列表做摘要化检视,定位截图转代码流程中的提示词组装问题。

后端技术栈与环境基线

在动手之前,先明确这套开发工作流所依赖的环境。后端是 FastAPI 应用,包管理使用 Poetry,相关声明集中在 backend/pyproject.toml:

  • Python 版本约束为^3.10,核心依赖包括fastapiuvicornopenaianthropicgoogle-genaiplaywright等;
  • 开发依赖组中声明了pytest = "^7.4.3"pyright = "^1.1.352"pytest-asyncio = "^0.21",这正是 README 中两条poetry run命令背后可调用的工具;
  • 项目声明package-mode = false,即 Poetry 只负责依赖管理与虚拟环境,后端代码本身不作为可安装包分发。

应用入口在 backend/main.py:它先调用load_dotenv()加载环境变量,再创建FastAPI实例并挂载generate_codescreenshotevals等路由。backend/config.py 则集中读取OPENAI_API_KEYANTHROPIC_API_KEYGEMINI_API_KEYREPLICATE_API_KEY等环境变量,并定义IS_DEBUG_ENABLEDDEBUG_DIR等调试开关——这些变量通常写入backend/.env(仓库 README 的 Getting Started 章节有完整的环境变量配置示例)。

运行类型检查:poetry run pyright

backend/README.md的第一条命令是:

poetry run pyright

它通过 Poetry 虚拟环境中安装的 pyright 对后端 Python 代码做静态类型检查。检查行为由 backend/pyrightconfig.json 控制,内容简短但信息量完整:

{ "exclude": ["image_generation.py"], "typeCheckingMode": "basic", "reportMissingTypeStubs": "none", "reportUnknownVariableType": "warning" }

逐项解读:

  • "typeCheckingMode": "basic":采用基础检查级别,只报告高置信度的类型错误,而不是 strict 模式下的全量诊断,适合以动效为主、快速迭代的应用型项目;
  • "exclude": ["image_generation.py"]:显式排除该文件,从源码结构看它是较早引入的图像生成模块,被排除在类型检查之外;
  • "reportMissingTypeStubs": "none":对第三方库缺少类型存根(stub)的情况不报错,避免moviepypillow-heif这类依赖的 stub 缺失干扰开发流;
  • "reportUnknownVariableType": "warning":允许Unknown变量存在但给出警告,属于一种渐进式收紧类型质量的策略。

实际使用时,建议先完成poetry install并进入后端目录(或激活 Poetry 环境)再执行该命令;命令在 backend 目录下执行时,pyright 会自动读取同级的pyrightconfig.json

运行测试:poetry run pytest与测试约定

README 的第二条命令是:

poetry run pytest

测试的执行规则定义在 backend/pytest.ini:

[pytest] testpaths = tests python_files = test_*.py python_classes = Test* python_functions = test_* addopts = -v --tb=short asyncio_mode = auto

这份配置约定了:

  • 测试只从backend/tests目录收集(testpaths = tests),该目录下有 40 余个测试文件,覆盖 agent 引擎(test_agent_engine.py)、各家模型 provider(test_anthropic_provider_config.pytest_gemini_provider_session.pytest_openai_provider_session.py)、工具运行时(test_agent_tool_runtime.py)、资产提取(test_asset_extraction.py)、评测系统(test_eval_runner.pytest_eval_sessions.py)等模块;
  • addopts = -v --tb=short:默认以详细模式运行并输出精简的失败堆栈,无需每次手动传参;
  • asyncio_mode = auto:配合pytest-asyncio,让async def test_*用例被自动识别为异步测试,无需逐个加@pytest.mark.asyncio标记。

例如针对 prompt 摘要功能的测试 backend/tests/test_prompt_summary.py 就是一个典型样例:它构造包含纯文本和text/image_url混合 content 的消息列表,断言format_prompt_summary的输出中包含"SYSTEM: lorem ipsum""[2 images]",并捕获 stdout 验证print_prompt_summary输出的方框字符与标题。运行poetry run pytest时,这一整组用例都会按上述约定被收集并执行。

Prompt 摘要工具:print_prompt_summary的用法与实现

backend/README.md的核心内容是“Prompt Summary”一节:

Useprint_prompt_summaryfromutils.pyto quickly visualize prompts:

from utils import print_prompt_summary print_prompt_summary(prompt_messages)

这个工具面向的场景很具体:screenshot-to-code 后端在生成代码前会把系统提示词、用户输入、截图(以image_url形式内嵌)等组装成List[ChatCompletionMessageParam]消息列表,列表往往很长且含大量 base64 数据,直接打印既冗长又看不清结构。print_prompt_summary就是为此设计的“快速检视”入口。

其实现位于 backend/utils.py,核心逻辑分两层:

  1. 摘要格式化(format_prompt_summary):遍历每条消息,读取role;若content是列表,则累加所有text块、统计image_url块的数量;若content是字符串则直接取用。默认truncate=True时,超过 40 个字符的文本会被截断为前 40 字符加省略号,图像则以+ [N images]后缀标注。
  2. 方框打印print_prompt_summary):根据各行长度计算框宽(截断模式下上限 80 列,完整模式下上限 120 列,下限 20 列),对超长行按词换行,最终输出带┌─…─┐边框、居中标题为PROMPT SUMMARY的等宽框体。

因此一段实际输出形如:

┌──────────────────────────────────────────────┐ │ PROMPT SUMMARY │ ├──────────────────────────────────────────────┤ │ SYSTEM: You are an expert web developer... │ │ USER: Convert this screenshot to HTML + [1 │ │ images] │ └──────────────────────────────────────────────┘

utils.py中还提供了与摘要互补的两个工具,调试 prompt 时可以按信息粒度选用:

  • pprint_prompt:深拷贝消息列表后经truncate_data_strings把每个长字符串截为 40 字符(附... (N chars)),再以indent=4打印 JSON,适合查看消息结构(但比摘要更原始);
  • print_prompt_preview(配合 format_prompt_preview):按消息顺序编号输出,每条消息预览默认最多 280 字符,超出的部分保留“头部一半 + 尾部四分之一”并以... [collapsed N chars] ...标记,媒体内容统一标注为[N media],适合在不打印 base64 的前提下看清每条提示词的要点。

调试建议:在llm.py或各 provider 的调用点附近临时插入print_prompt_summary(messages),确认角色顺序、文本截断位置与图像数量是否符合预期;若要核对完整提示词内容,改用print_prompt_preview或直接查看PROMPT_REPORTS_ENABLED开启后的/evals/prompt-reports报告(该开关的语义见 backend/config.py)。

小结

backend/README.md虽然简短,但它定义了本仓库后端开发的三件基础武器:poetry run pyright(配合 backend/pyrightconfig.json 的 basic 模式做类型把关)、poetry run pytest(配合 backend/pytest.ini 的自动异步模式与统一收集规则跑全量测试),以及 backend/utils.py 中的 prompt 摘要工具链(print_prompt_summary/print_prompt_preview/pprint_prompt)。把这三者串起来,就构成了在 screenshot-to-code 后端中“改代码 → 查类型 → 跑测试 → 检视 prompt”的完整调试闭环。

【免费下载链接】screenshot-to-codeDrop in a screenshot and convert it to clean code (HTML/Tailwind/React/Vue)项目地址: https://gitcode.com/GitHub_Trending/sc/screenshot-to-code

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 12:30:03

SpringBoot全栈开发实战:茶文化推广系统架构设计与核心模块实现

简介:本资源是一套完整的基于SpringBoot的茶文化推广系统毕业设计源码包,面向Java初学者与高校计算机专业毕业生,解决传统文化类Web应用开发实践与课程设计选题需求。压缩包共463个文件,含124个Java后端核心代码、104个Vue前端组件…

作者头像 李华
网站建设 2026/9/4 12:30:01

WordPress导航主题深度解析:从SEO优化到实战部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 12:28:48

MiniMax H3本地部署:ComfyUI整合包下载与视频生成实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 12:28:29

如何搭建 Label Studio 开发环境:4步从源码到本地热重载

如何搭建 Label Studio 开发环境:4步从源码到本地热重载 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/la/label-studio …

作者头像 李华
网站建设 2026/9/4 12:27:23

基于YOLO骨干的密度图人群计数方法

简介:本资源是一套基于YOLO模型实现人群计数的完整开发与部署方案,面向深度学习初学者及计算机视觉方向实践者,聚焦图像识别与实时目标检测在安防、客流分析等场景中的落地应用。压缩包共35个文件,含18个Python脚本(涵…

作者头像 李华
网站建设 2026/9/4 12:26:24

AI图像生成与Workspace协同:Google Pics实践指南

AI 图像生成与编辑应用 Google Pics,最值得关注的地方不是“又多了一个画图工具”,而是它被放进了 Workspace 全家桶。这个定位意味着,你生成一张图之后,不必再下载、转存、塞进聊天框,而是可以直接从文档、幻灯片或 D…

作者头像 李华