fix: 修复 NameError/状态污染/类型标注/统计; 补全练习与 main; 新增 config/.gitignore/requirements; 文档统一
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
"""
|
||||
Step 05-07 练习题:进阶能力
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🎯 练习目标:
|
||||
1. 体验 RAG 的检索质量
|
||||
2. 写一个 Self-Correction 闭环
|
||||
3. 设计多 Agent 编排
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
"""
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# 练习 1:提升 SimpleRAG 的检索质量
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
"""
|
||||
任务:
|
||||
SimpleRAG.retrieve() 当前用 Jaccard 相似度 + 简单分词。
|
||||
改造为:把分词改成 "中文按字 + 英文按词 + 大小写归一化" 后再算 Jaccard。
|
||||
|
||||
要求:
|
||||
1. 复用 SimpleRAG 类,不要重写
|
||||
2. 实现 upgrade_retrieve(rag) 替换 rag.retrieve 方法
|
||||
3. 用一个含中英文的小语料验证
|
||||
|
||||
提示:
|
||||
- re.findall(r'[\u4e00-\u9fff]|[A-Za-z]+', text.lower())
|
||||
"""
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# 练习 2:实现 Self-Correction 主循环
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
"""
|
||||
任务:
|
||||
SelfCorrectingAgent 在 concept.py 中是骨架。请补全它的 run() 方法:
|
||||
|
||||
def run(self, requirement: str, generate_fn, validate_fn, max_retries=3):
|
||||
for attempt in range(max_retries):
|
||||
output = generate_fn(requirement, attempt, feedback)
|
||||
validation = validate_fn(output)
|
||||
if validation.passed:
|
||||
return output
|
||||
feedback = self.build_feedback(validation)
|
||||
return output
|
||||
|
||||
要求:
|
||||
1. 第一次 attempt 不带 feedback
|
||||
2. 每次失败用 build_feedback 拼出新的 feedback
|
||||
3. 超过 max_retries 返回最后一次 output(不要抛异常)
|
||||
"""
|
||||
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# 练习 3:给 MultiAgentSystem 加超时与失败回退
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
"""
|
||||
任务:
|
||||
MultiAgentSystem.process() 是顺序调用 searcher -> generator -> validator。
|
||||
任何一个 Agent 抛异常都让整个流程崩。
|
||||
|
||||
要求:
|
||||
1. 在 process() 外层包 try/except,失败时返回 {"error": str(e)}
|
||||
2. 给每个 Agent 加 timeout_seconds 参数(用 time.monotonic)
|
||||
3. 验证:故意让 validator 抛异常,确认 process() 不会让程序崩溃
|
||||
|
||||
提示:
|
||||
- time.monotonic() 不受系统时间影响
|
||||
- 简单演示里可以靠 sleep + 时间比较实现超时
|
||||
"""
|
||||
|
||||
|
||||
def test_exercises():
|
||||
from step_05_07_advanced.concept import SimpleRAG
|
||||
|
||||
rag = SimpleRAG()
|
||||
rag.add_document("JasperReports 是一个 Java 报表库", {"source": "doc1"})
|
||||
rag.add_document("JRXML 是 JasperReports 模板格式", {"source": "doc2"})
|
||||
print(rag.retrieve("JasperReports"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_exercises()
|
||||
Reference in New Issue
Block a user