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
提示词与模式调优
通过修改提取哪些信息(分析模式)以及如何进行提取(提示模板)来自定义文档分析。模式定义了诸如“摘要”或“方法论”等字段。提示词则告诉大语言模型如何填充这些字段。
概述
两层配置控制分析:
-
分析模式 - 定义可提取字段、类型和指令的JSON配置
- 位置:保险库中的
_thoth/analysis_schema.json - 四种预设:标准、详细、极简、自定义
- 由模式服务热重载
- 位置:保险库中的
-
提示模板 - 指导大语言模型的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”)
- 想要在指导中添加示例或约束
两者都编辑当:
- 分析方法的重大改变(“关注可重复性”)
- 字段存在但大语言模型填充效果差(“方法论”字段需要更好的提取)
最佳实践
编辑前
- 始终先读取当前配置(
get_schema_info,get_preset_details,read_prompt_template) - 理解当前配置的内容
- 识别具体问题(错误的字段 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备份 - 更改适用于新分析,不追溯
- 自定义配置在系统更新后保留(基于保险库)