ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

instructor 文档维护脚本全解析:从 Markdown 清理到 AI 驱动的 Sitemap 生成

instructor 文档维护脚本全解析:从 Markdown 清理到 AI 驱动的 Sitemap 生成 instructor 文档维护脚本全解析从 Markdown 清理到 AI 驱动的 Sitemap 生成【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructor本文以 instructor 开源仓库中的 scripts/README.md 为核心脉络系统讲解仓库scripts/目录下 6 个文档维护工具的设计意图、命令行用法与源码实现。这些脚本服务于 instructor 项目自身文档的日常维护——包括 Markdown 特殊字符清理、博客摘要标签校验、AI 辅助的 Sitemap 生成以及围绕from_provider新 API 的旧代码模式迁移。读完本文你将掌握这套文档质量保障流水线的完整操作方式并能将其中的审计、清理与重构思路复用到自己的项目中。脚本目录概览scripts/目录存放用于维护和改善 instructor 文档与项目结构的工具脚本覆盖清理—校验—生成—审计—修复五个环节脚本类别核心职责make_clean.py清理移除 Markdown 中的特殊空白字符将破折号统一为普通连字符check_blog_excerpts.py校验检查所有博客文章是否包含!-- more --摘要标签make_sitemap.py生成借助 GPT-4o-mini 生成带摘要、关键词与交叉链接的增强版sitemap.yamlfix_api_calls.py修复将client.chat.completions.create等旧调用统一为client.createfix_old_patterns.py修复将instructor.from_openai(...)/instructor.patch(...)迁移到from_provideraudit_patterns.py审计扫描文档中残留的旧 API 模式、旧初始化模式与疑似未使用的导入下文按 README 的组织顺序逐一展开并结合各自源码补充实现细节。1. make_clean.pyMarkdown 文件清理器用途清理 Markdown 文件中特殊的空白字符并将 em dash—替换为普通连字符-。清理逻辑的源码实现查看 make_clean.py 的clean_markdown_content函数可以看清它做了四件事将—em dash与–en dash全部替换为-对每一行调用unicodedata.normalize(NFKC, line)进行 Unicode 规范化统一码位表示用正则[\u200B\u200C\u200D\uFEFF]移除零宽空格ZWSP、零宽非连接符、零宽连接符与 BOM 字符将不换行空格\u00a0替换为普通空格并执行rstrip()去掉行尾空白。整个流程逐行处理、保留行内缩进因此保留有意的排版格式与清理问题字符两者兼得。文件读写均显式指定encodingutf-8统计输出会报告处理的文件总数与被修改文件数make_clean.py。命令行用法# 清理 docs/ 下所有 markdown 文件 python scripts/make_clean.py # 试运行预览将要发生的修改不会真正写入文件 python scripts/make_clean.py --dry-run # 清理其他目录 python scripts/make_clean.py --docs-dir path/to/docs--dry-run模式除了打印Would modify: file外还会对每个将修改的文件展示首处差异的原始行与清理后行使用repr输出便于看清不可见字符非常适合提交前核对make_clean.py。Pre-commit 集成README 说明该脚本在包含docs/目录下 Markdown 文件的提交中会自动运行。当前仓库的 .pre-commit-config.yaml 主要配置了 Rufflint format、uv.lock校验、ty类型检查等 hooks脚本的 hook 配置遵循同一套 pre-commit 机制脚本本身通过sys.exit(0 if success else 1)约定退出码check_blog_excerpts.py这正是 pre-commit 判断通过/失败的依据。2. check_blog_excerpts.py博客摘要校验器用途确保docs/blog/posts/下每篇博客文章都包含!-- more --标签用于站点摘要的正确截断。工作方式脚本递归扫描博客目录中的所有.md文件检查内容是否包含!-- more --字符串缺失该标签的文件会被逐个列出并最终导致脚本以退出码 1 结束check_blog_excerpts.py# 检查所有博客文章 python scripts/check_blog_excerpts.py # 检查其他目录 python scripts/check_blog_excerpts.py --blog-posts-dir path/to/posts由于 pre-commit 钩子以非零退出码判定失败该脚本天然适合接入提交前检查一旦新增博客忘记写摘要分隔符提交即被拦截。该目录下目前已有 60 篇博客文章docs/blog/posts/手工检查显然不可行这正是脚本的价值所在。3. make_sitemap.pyAI 增强的文档 Sitemap 生成器用途遍历docs/目录借助 OpenAI GPT-4o-mini 分析每个 Markdown 文件生成包含摘要、关键词、主题、引用与交叉链接建议的sitemap.yaml。工作流程结合 make_sitemap.py 源码其核心流水线为遍历traverse_docs递归收集所有.md文件并为每个文件计算 MD5 内容哈希make_sitemap.py链接提取extract_markdown_links用正则\[([^\]])\]\(([^)])\)提取文档内链过滤外部链接与锚点目录引用自动补index.mdnormalize_path再把相对路径换算为相对docs/根目录的统一路径make_sitemap.pyAI 分析analyze_content调用gpt-4o-mini要求模型按SUMMARY:/KEYWORDS:/TOPICS:/REFERENCES:四个固定字段返回结构化结果make_sitemap.py写出最终以yaml.dump(..., default_flow_styleFalse, sort_keysTrue)写入指定输出文件make_sitemap.py。仓库根目录的 sitemap.yaml 即为该脚本的产物例如architecture.md: ai_references: [] cross_links: [] hash: 141a2c4c63d93091402d5bf4e39b04f8 keywords: - Instructor - LLM providers - Pydantic Model - Schema Converter - API Request - Response Parser - Validator - Retry Mechanism references: [] summary: The Instructor Architecture document elucidates the internal workings of... topics: - Core Components - Request Flow - Data Validation - LLM Integration - Structured Output输出结构每个文件条目包含以下字段即 README 给出的骨架file.md: summary: Brief description of the content keywords: [keyword1, keyword2, keyword3] topics: [topic1, topic2, topic3] references: [other-file.md, another-file.md] ai_references: [ai-detected-reference.md] cross_links: [suggested-related-file.md] hash: content-hash-for-caching其中references来自正则提取的确定性结果ai_references来自 LLM 对文本中提及页面的识别cross_links则基于内容相似度给出的相关文档建议。缓存、并发与重试缓存已有 sitemap 中hash与当前文件内容哈希一致时直接复用既有分析结果仅重算references避免重复调用 APImake_sitemap.py并发使用asyncio.Semaphore(max_concurrency)限制同时进行的分析请求配合as_completed边完成边推进进度条make_sitemap.py重试通过tenacity装饰器配置最多尝试 3 次、指数退避等待min4s, max10s并在每次重试前打印提示make_sitemap.py单文件多次失败时降级为占位摘要不影响整体流程。命令行用法与依赖# 默认设置生成 sitemap根目录 docs输出 sitemap.yaml python scripts/make_sitemap.py # 自定义参数并发数 10、相似度阈值 0.4 python scripts/make_sitemap.py \ --root-dir docs \ --output-file sitemap.yaml \ --max-concurrency 10 \ --min-similarity 0.4 # 使用自定义 API Key python scripts/make_sitemap.py --api-key your-openai-key要求OpenAI API Key通过OPENAI_API_KEY环境变量或--api-key传入依赖openai、typer、rich、tenacity、pyyamluv add openai typer rich tenacity pyyaml4. fix_api_calls.pyAPI 调用模式标准化用途把文档与 notebook 中冗长的旧 API 调用替换为简化版本共四组映射fix_api_calls.py旧模式新模式client.chat.completions.create(...)client.create(...)client.chat.completions.create_partial(...)client.create_partial(...)client.chat.completions.create_iterable(...)client.create_iterable(...)client.chat.completions.create_with_completion(...)client.create_with_completion(...)注意源码中模式匹配顺序刻意将create_with_completion放在最前避免长匹配被create的短正则提前命中截断。脚本会递归处理docs/下所有.md与.ipynb文件notebook 中的代码单元同样适用并输出处理的文件数 / 修改的文件数 / 替换总数汇总# 试运行查看将被修改的文件与替换数 python scripts/fix_api_calls.py --dry-run # 实际应用修改 python scripts/fix_api_calls.py # 只处理单个文件 python scripts/fix_api_calls.py --file docs/index.md # 指定自定义文档目录 python scripts/fix_api_calls.py --docs-dir path/to/docs5. fix_old_patterns.py客户端初始化模式迁移到 from_provider用途将旧式客户端初始化写法统一迁移为 instructor 现代统一的from_providerAPIinstructor/v2/auto_client.py 中定义instructor.from_openai(OpenAI())→instructor.from_provider(openai/model-name)instructor.from_anthropic(Anthropic())→instructor.from_provider(anthropic/model-name)instructor.patch(OpenAI())→instructor.from_provider(openai/model-name)覆盖的 Provider 映射源码中的PROVIDER_MAPPING表fix_old_patterns.py覆盖 25 个 provideropenai、anthropic、google、cohere、mistral、groq、litellm、ollama、azure、bedrock、vertex、genai归一为google、deepseek、fireworks、cerebras、together、anyscale、perplexity、writer、openrouter、sambanova、truefoundry、cortex、databricks、xai。这与 docs/integrations/ 目录中维护的接入指南一一对应。模型名提取策略脚本会尽力从上下文匹配位置前后各 200 字符中提取model...参数提取不到时回退到各 provider 的默认模型如 OpenAI 默认gpt-4o、Anthropic 默认claude-3-5-sonnet-20241022并明确提示默认模型可能需要人工复核fix_old_patterns.py。instructor.patch(...)场景则由类名反查 provider如GoogleGenerativeAI→google、VertexAI→vertexfix_old_patterns.py。命令行用法# 试运行 python scripts/fix_old_patterns.py --dry-run # 应用修改 python scripts/fix_old_patterns.py # 处理单个文件 python scripts/fix_old_patterns.py --file docs/integrations/openai.md注意模型名尽量从现有代码提取但准确性仍需人工复核。from_provider的统一用法可参考 docs/concepts/from_provider.md。6. audit_patterns.py旧模式审计用途只读扫描找出文档中需要更新的旧模式区别于会改文件的修复脚本。三类检查audit_patterns.py旧 API 调用client.chat.completions.create/create_partial/create_iterable/create_with_completion旧初始化模式instructor.from_*、instructor.patch疑似未使用导入当文档已使用from_provider时标记仅出现一次的import openai/import anthropic等导入行如导入后不再使用即为可清理项。命令行用法# 详细报告按文件列出问题与行号 python scripts/audit_patterns.py # 仅输出汇总统计每类模式的总出现次数 python scripts/audit_patterns.py --summary # 审计单个文件 python scripts/audit_patterns.py --file docs/index.md # 自定义文档目录 python scripts/audit_patterns.py --docs-dir path/to/docs详细模式下每个问题的行号会先显示前 10 个超出部分以... (N total)折叠audit_patterns.py。典型工作流是先audit_patterns.py摸清存量再用fix_api_calls.py/fix_old_patterns.py定点修复最后复查确认清零。Pre-commit 集成与手动运行README 规定make_clean.py与check_blog_excerpts.py面向含 Markdown 提交与含博客文件提交的自动检查场景hook 通过.pre-commit-config.yaml声明当前仓库的 .pre-commit-config.yaml 中实际启用了 Ruff、uv.lock一致性检查、依赖同步检查、requirements.txt导出与ty类型检查等 hooks共同构成提交前的质量闸门。日常使用中也可以手动执行任意脚本完成一次性操作# 预览 markdown 清理效果 python scripts/make_clean.py --dry-run # 检查博客摘要标签 python scripts/check_blog_excerpts.py # 重新生成 sitemap python scripts/make_sitemap.py新增脚本的规范README 为向scripts/添加新工具制定了五条约定这也是审计现有脚本的共同特征文档化在 scripts/README.md 中补充脚本用途与用法说明Pre-commit 集成如适合自动化在.pre-commit-config.yaml中注册 hook退出码约定脚本以适当的错误码退出如check_blog_excerpts.py的0/1供 CI/钩子判定帮助文本命令行脚本提供--help功能各脚本均基于argparse或typer实现测试提交前手动验证脚本行为。依赖与故障排查大部分脚本仅依赖 Python 标准库argparse、re、pathlib、unicodedata等仅make_sitemap.py需要额外依赖上文已给出uv add命令。Pre-commit 钩子失败时确认脚本可执行chmod x scripts/*.py核对.pre-commit-config.yaml中的脚本路径先手动运行脚本定位具体错误。Sitemap 生成异常时确认 OpenAI API Key 已正确设置环境变量或--api-key检查到 API 的网络连通性逐文件查看报错信息——脚本本身已对单文件失败做了重试与降级兜底。Markdown 清理异常时先用--dry-run预览改动检查 docs 目录下文件权限确认 Markdown 文件为 UTF-8 编码。这套工具链体现了文档维护的工程化思路用确定性脚本保证格式一致性用 AI 能力自动生成 SEO 元数据与交叉链接再用审计脚本兜底代码模式迁移。理解其设计后你可以按同样的清理 → 校验 → 生成 → 审计 → 修复循环来管理任何规模的文档仓库。【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表