提示资格化代理(MCP + Gemini)
间隔重复记忆卡构建器 + 数学推理代理
两个使用(某种技术或方法)的小型代理 双子座 + MCP工具 在……之下 严格的(有资格的)系统提示 执行具有可验证输出的多步任务:
- SRS卡牌构建器: 问答Markdown → 解析卡片 → 质量控制 → 间隔重复计划 → CSV工件(或CSV制品)
- 数学代理(或数学助手): 分步算术计划 → 调用工具进行计算和验证 → 最终答案
满足任务约束条件: 使用一个经过验证的提示,而非摘要生成器/股票分析工具/加密货币工具/简单工具,并展示多步骤规划+验证过程,同时产生具体成果。
______________________________________________________________________
快速入门
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# Environment (pick one key you actually have)
export GEMINI_API_KEY=""
export LLM_MODEL="gemini-2.0-flash"运行SRS代理(生成CSV文件)
SRS_MD_FILE=examples/cards.md python examples/srs_agent_client.py
cat outputs/flashcards_schedule.csv运行数学代理
MATH_PROBLEM="2**5 + 3*(7-2)" python examples/math_agent_client.py在文本提示上运行提示评估器(MCP工具)
python examples/run_eval_via_mcp.py -f examples/weak_prompt.txt
# result → outputs/weak_prompt.json (many falses by design)______________________________________________________________________
新的最终提示(合格)
将此保存为 examples/student_prompt_strong.txt然后,使用以下命令进行评估。
You are an SRS Assistant that turns markdown Q/A into a spaced-repetition deck. Think step by step and explicitly plan before each action. Use tool calls only for computation. Keep reasoning structured and separate from tool execution.
TOOLS:
- parse_markdown(md: str) -> JSON {"cards": [{"q": str, "a": str}]}
- quality_check(cards_json: str, min_len:int=3, max_len:int=260) -> JSON {"ok": bool, "errors": [str]}
- schedule_cards(cards_json: str, start_date: str, daily_new:int, intervals:str) -> JSON {"scheduled": [{"q": str, "a": str, "learn_on": str, "reviews_on": [str]}]}
- export_csv(scheduled_json: str, filename: str) -> str
PIPELINE (follow exactly, one step per turn):
1) [planning] Reason about the next step and inputs (no tool yet).
2) [parsing] FUNCTION_CALL: parse_markdown|
3) [validation] FUNCTION_CALL: quality_check||3|260
4) If quality_check.ok is false, [fixing] retry parse_markdown once with the same markdown; then quality_check again.
5) [planning] Choose scheduling parameters; then FUNCTION_CALL: schedule_cards||||1,3,7,14,30
6) [export] FUNCTION_CALL: export_csv||outputs/flashcards_schedule.csv
7) [report] FINAL_ANSWER: []
OUTPUT FORMAT (STRICT; ONE LINE ONLY PER TURN):
- FUNCTION_CALL: function_name|param1|param2|...
- FINAL_ANSWER: [count]
INTERNAL SELF-CHECKS:
- After parse_markdown: ensure cards_json is valid JSON and has ≥1 items with both q and a (≤260 chars).
- After quality_check: require ok==true and errors==[]; otherwise retry QC once (then FINAL_ANSWER: [0] if still failing).
- After schedule_cards: every item has learn_on and reviews_on; count matches input cards.
- After export_csv: returned path is non-empty; then emit FINAL_ANSWER with scheduled count.
ERROR HANDLING / FALLBACKS:
- If any tool returns invalid JSON or errors: retry that tool once with the same inputs.
- If the retry fails: emit FINAL_ANSWER: [0].
- Never call the same tool more than twice in a row.
EXAMPLE (format only):
[planning] Decide to parse the provided markdown.
FUNCTION_CALL: parse_markdown|
[validation] Inspect parsed cards and run quality checks.
FUNCTION_CALL: quality_check|{"cards":[{"q":"...","a":"..."}]}|3|260
[planning] Schedule with start date 2025-10-12 and daily_new 10.
FUNCTION_CALL: schedule_cards|{"cards":[{"q":"...","a":"..."}]}|2025-10-12|10|1,3,7,14,30
[export] Export the schedule to CSV.
FUNCTION_CALL: export_csv|{"scheduled":[{"q":"...","a":"...","learn_on":"...","reviews_on":["..."]}]}|outputs/flashcards_schedule.csv
[report] Output the final count.
FINAL_ANSWER: [3]评估提示:
python examples/run_eval_via_mcp.py -f examples/student_prompt_strong.txt
# result → outputs/student_prompt_strong.json (expected: all true)______________________________________________________________________
为什么这满足了任务要求
- 合格的提示 严格控制大型语言模型(LLM):采用固定的JSON模式或单行函数调用,设定流程顺序,进行明确的自我检查,并设置回退机制。
- 多步骤与工具使用: 大型语言模型(LLM)计划;MCP工具执行确定性任务(解析/质量控制/调度/导出,或计算/验证)。
- 可验证的输出: 用于SRS的CSV文件;数学问题的中间步骤验证+最终答案。
- 否 一个总结工具/库存工具/加密货币工具/“简易”工具。
______________________________________________________________________
库(Repo)结构
examples/
cards.md
srs_agent_client.py
math_agent_client.py
run_eval_via_mcp.py
student_prompt_strong.txt # ← the qualified “final prompt” used for grading
tools/
srs_tools.py # parse_markdown, quality_check, schedule_cards, export_csv
cot_tools.py # show_reasoning, calculate, verify
eval_tools.py # evaluate_prompt (uses the evaluator system prompt)
outputs/
.gitkeep # CSVs & JSONs written here at runtime
README.md
requirements.txt
.env.example建议 .gitignore:
.venv/
__pycache__/
.DS_Store/
.env
outputs/*.csv______________________________________________________________________
示例输入/输出
输入Markdown(examples/cards.md):
Q: What is Bayes' theorem?
A: P(A|B) = [P(B|A) * P(A)] / P(B)
Q: Define precision in classification.
A: TP / (TP + FP)输出CSV(outputs/flashcards_schedule.csv):
q,a,learn_on,reviews_on
"What is Bayes' theorem?","P(A|B) = [P(B|A) * P(A)] / P(B)","2025-10-12","2025-10-13|2025-10-15|2025-10-19|2025-10-26|2025-11-11"
"Define precision in classification.","TP / (TP + FP)","2025-10-12","2025-10-13|2025-10-15|2025-10-19|2025-10-26|2025-11-11"______________________________________________________________________
故障排除
- 429配额/速率限制: 稍后重播;演示要简短。
- 404 模型未找到: 使用
gemini-2.0-flash(支持于v1betagenerateContent)。 - JSON-RPC的“框线绘制”错误: 确保工具日志被记录到 STDERR(标准错误输出) (已在工具中设置)。
command not found: #: 不要在同一行shell命令后添加注释。
______________________________________________________________________
演示视频(YouTube)
在此粘贴您的链接: https://youtu.be/OwcyiJnZipo(该链接为YouTube视频链接,直接翻译为中文即保持原样,因为网址本身不包含可翻译的文本内容)
