提示词与模式调优 prompt-schema-tuning

这是一个用于自定义文档分析提取功能的技能。它允许用户通过修改分析模式(定义提取哪些字段)和提示模板(指导AI如何提取)来精确控制从学术论文等文档中提取的信息内容和格式。关键词:文档分析、AI提取、提示工程、模式配置、学术研究、信息抽取、大语言模型调优、RAG应用。

RAG应用 0 次安装 0 次浏览 更新于 2/27/2026

name: prompt-schema-tuning description: 自定义从论文中提取哪些信息(模式)以及如何提取(提示词)。当用户想要更改分析字段、指令或提示模板时使用。 tools:

  • get_schema_info
  • list_schema_presets
  • get_preset_details
  • update_schema_field
  • update_schema_instructions
  • reset_schema_to_default
  • list_prompt_templates
  • read_prompt_template
  • update_prompt_template
  • reset_prompt_template

提示词与模式调优

通过修改提取哪些信息(分析模式)以及如何进行提取(提示模板)来自定义文档分析。模式定义了诸如“摘要”或“方法论”等字段。提示词则告诉大语言模型如何填充这些字段。

概述

两层配置控制分析:

  1. 分析模式 - 定义可提取字段、类型和指令的JSON配置

    • 位置:保险库中的 _thoth/analysis_schema.json
    • 四种预设:标准、详细、极简、自定义
    • 由模式服务热重载
  2. 提示模板 - 指导大语言模型的Jinja2模板

    • 位置:保险库中的 _thoth/prompts/{provider}/(自定义)或 templates/prompts/(默认)
    • 特定于提供商:google、openai、default、agent
    • 由文件监视器热重载

核心工具

模式工具

工具 用途 何时使用
get_schema_info 查看当前模式配置 检查活动预设、字段
list_schema_presets 列出所有预设 查看可用选项
get_preset_details 查看预设中的字段 编辑前检查
update_schema_field 添加/更新/删除字段 更改提取内容
update_schema_instructions 更改提取指导 调整大语言模型提取方式
reset_schema_to_default 从模板恢复 修复损坏的配置

提示词工具

工具 用途 何时使用
list_prompt_templates 列出可用模板 查看可编辑内容
read_prompt_template 查看模板内容 检查当前提示词
update_prompt_template 修改模板 修复提取问题
reset_prompt_template 删除自定义版本 恢复为默认

理解模式

模式结构

模式按预设组织。每个预设包含:

  • name - 显示名称
  • description - 用途描述
  • fields - 字段定义的字典
  • instructions - 给大语言模型的自然语言指导

字段规范

每个字段包含:

{
  "type": "string|integer|array",
  "required": true/false,
  "description": "此字段应包含的内容",
  "items": "string" (用于数组)
}

示例:标准预设

{
  "title": {
    "type": "string",
    "required": true,
    "description": "研究论文的标题"
  },
  "summary": {
    "type": "string",
    "required": false,
    "description": "多段落摘要"
  },
  "tags": {
    "type": "array",
    "items": "string",
    "required": false,
    "description": "文章的关键词"
  }
}

理解提示词

提示模板

创建实际大语言模型提示的Jinja2模板。关键变量:

  • {{ content }} - 要分析的文档文本
  • {{ analysis_schema }} - 输出的JSON模式
  • {{ custom_instructions }} - 预设特定的指令
  • {{ chunk }} - 用于映射-归约处理的文本块

提供商变体

每个提供商的模板不同,以优化模型行为:

  • google/ - Gemini特定指导
  • openai/ - GPT特定指导
  • default/ - 通用模板
  • agent/ - 智能体特定提示词

关键模板

  • analyze_content.j2 - 直接分析(短文档)
  • analyze_section.j2 - 映射阶段(长文档)
  • reduce_sections.j2 - 归约阶段(综合)
  • refine_analysis.j2 - 迭代优化

工作流示例

示例1:摘要太短

用户:“我的分析中摘要太短了。我需要更多细节。”

1. 检查当前模式
   get_schema_info()
   → 活动预设:标准

2. 查看预设详情
   get_preset_details(preset="standard")
   → summary: "多段落摘要"

3. 更新字段描述以更具体
   update_schema_field(
     preset="standard",
     field_name="summary",
     field_spec={
       "type": "string",
       "required": false,
       "description": "涵盖目标、方法论、关键结果和影响的全面5-7段摘要。每段应包含4-6个句子,并包含论文中的具体细节。"
     }
   )

4. 同时更新预设指令以强调
   update_schema_instructions(
     preset="standard",
     instructions="提供全面的分析,包含详细的多段落摘要(5-7段)。提取10-15个包含具体细节的关键点。详细描述方法论和结果。"
   )

5. 响应:
   "已更新摘要字段,要求5-7个详细段落,并修改了预设指令以强调全面分析。更改将在您下次运行分析时生效。"

示例2:删除不必要的字段

用户:“我不需要优势和劣势字段。它们对我的研究没用。”

1. 检查哪个预设是活动的
   get_schema_info()
   → 活动:标准

2. 删除第一个字段
   update_schema_field(
     preset="standard",
     field_name="strengths",
     remove=true
   )

3. 删除第二个字段
   update_schema_field(
     preset="standard",
     field_name="weaknesses",
     remove=true
   )

4. 响应:
   "已从标准预设中删除‘strengths’和‘weaknesses’字段。您的分析将不再提取这些字段。"

示例3:添加自定义字段

用户:“我想跟踪哪些论文提到了特定的数据集。添加一个‘datasets_used’字段。”

1. 检查活动预设
   get_schema_info()
   → 活动:标准

2. 添加新字段
   update_schema_field(
     preset="standard",
     field_name="datasets_used",
     field_spec={
       "type": "array",
       "items": "string",
       "required": false,
       "description": "论文中提到的数据集列表,包括它们的名称和简要描述它们是如何被使用的"
     }
   )

3. 更新指令以强调这一点
   get_preset_details(preset="standard")
   # 读取当前指令

   update_schema_instructions(
     preset="standard",
     instructions="[现有指令] 特别注意识别和列出论文中提到的所有数据集,包括数据集名称、来源和使用背景。"
   )

4. 响应:
   "已添加‘datasets_used’字段,将数据集信息提取为字符串数组。更新了指令以强调数据集提取。"

示例4:修复提示词问题

用户:“分析总是漏掉方法论部分。你能检查一下提示词吗?”

1. 列出可用模板
   list_prompt_templates(provider="google")
   → 显示 analyze_content.j2, analyze_section.j2 等。

2. 读取当前提示词
   read_prompt_template(
     template_name="analyze_content.j2",
     provider="google"
   )
   → 显示完整的Jinja2模板

3. 识别问题:提示词没有明确提到方法论

4. 更新模板以强调方法论
   update_prompt_template(
     template_name="analyze_content.j2",
     provider="google",
     content="[更新后的Jinja2模板,增加了强调:
     ‘特别注意方法论部分。提取关于研究设计、方法、程序和分析方法的详细信息。如果方法论分散在多个部分,请综合所有位置的信息。’]"
   )

5. 响应:
   "已更新Google提供商的analyze_content.j2提示词,以强调方法论提取。更改已热重载,将影响您的下一次分析。"

示例5:错误编辑后重置

用户:“我把模式搞乱了。你能恢复它吗?”

1. 检查哪里出错了
   get_schema_info()
   → 可能显示验证错误

2. 重置为默认值
   reset_schema_to_default(confirm=true)
   → 重置整个文件

   # 或者只重置一个预设:
   reset_schema_to_default(preset="custom", confirm=true)

3. 响应:
   "已将模式重置为仓库默认值。您的自定义更改已被删除,但如果您需要恢复任何内容,已保存在.bak文件中。"

模式 vs 提示词:何时编辑什么

编辑模式当:

  • 用户想要提取不同的字段(“添加资金信息”)
  • 字段类型错误(“标签应为数组”)
  • 字段太多/太少(“我不需要所有这些细节”)
  • 字段描述对大语言模型不清晰

编辑提示词当:

  • 大语言模型持续遗漏信息(“找不到方法”)
  • 输出格式错误(“摘要太技术性”)
  • 需要针对提供商的调整(“适用于GPT但不适用于Gemini”)
  • 想要在指导中添加示例或约束

两者都编辑当:

  • 分析方法的重大改变(“关注可重复性”)
  • 字段存在但大语言模型填充效果差(“方法论”字段需要更好的提取)

最佳实践

编辑前

  1. 始终先读取当前配置(get_schema_info, get_preset_details, read_prompt_template
  2. 理解当前配置的内容
  3. 识别具体问题(错误的字段 vs 错误的提取)

编辑模式时

  • 使字段描述详细且具体
  • 使用instructions进行一般指导,字段description用于具体细节
  • 在处理大量文档前先用一篇论文测试
  • 保留备份(工具会自动创建.bak文件)

编辑提示词时

  • 保留必需的Jinja2变量({{ content }}, {{ analysis_schema }}
  • 用短文档和长文档测试
  • 考虑提供商差异(Gemini与GPT行为)
  • 记录更改原因(在提示词中注释)

编辑后

  • 更改立即生效(热重载)
  • 无需重启服务
  • 先用单篇论文测试
  • 如果提取失败,检查验证警告

故障排除

模式验证失败

问题:"模式验证失败:缺少必需键"
解决方案:
1. validate_schema_file() 查看具体错误
2. 修复问题或 reset_schema_to_default()
3. 备份已自动保存

提示词未加载

问题:"未找到提供商的模板"
解决方案:
1. list_prompt_templates() 验证名称和提供商
2. 检查 template_name 的拼写(必须包含 .j2)
3. 提供商必须是 'google', 'openai', 'default', 或 'agent'

大语言模型返回错误格式

问题:"大语言模型输出不匹配模式"
解决方案:
1. read_prompt_template() 检查是否传递了模式
2. 验证 {{ analysis_schema }} 出现在模板中
3. 检查字段类型是否有效(string, integer, array)

自定义提示词未被使用

问题:"我的更改没有影响分析"
解决方案:
1. 验证文件已保存到 _thoth/prompts/{provider}/
2. 检查提供商名称是否匹配模型(google对应gemini,openai对应gpt)
3. 热重载可能需要几秒钟

模式参考

标准预设(15个字段)

平衡分析:title, authors, year, doi, journal, abstract, key_points, summary, objectives, methodology, results, discussion, strengths, weaknesses, tags

详细预设(20个字段)

详尽提取:添加 data, experimental_setup, evaluation_metrics, limitations, future_work, related_work

极简预设(6个字段)

快速筛选:title, authors, year, abstract, key_points (3-5), tags (3-5)

自定义预设

用户定义的模板,用于特殊需求

提示词参考

分析提示词

  • analyze_content.j2 - 短文档的单次分析
  • analyze_section.j2 - 分块文档的映射阶段
  • reduce_sections.j2 - 合并部分分析
  • refine_analysis.j2 - 迭代改进

其他提示词

  • extract_citations*.j2 - 引用提取
  • evaluate_*.j2 - 相关性评估
  • consolidate_tags.j2 - 标签管理
  • research_agent_chat.j2 - 智能体对话

注意事项

  • 模式更改需要有效的JSON结构
  • 提示词更改应保留Jinja2语法
  • 所有编辑都会自动创建.bak备份
  • 更改适用于新分析,不追溯
  • 自定义配置在系统更新后保留(基于保险库)