logo
0
0
WeChat Login
feat:更新实验5-8测试框架

AI应用课程实验指南(实验5-8)

欢迎来到AI应用课程的高级能力构建阶段!本项目包含4个进阶实验,帮助你掌握工作流编排、工具调用、知识检索增强(RAG)和质量控制等生产级AI应用开发技术。

🎯 学习目标

通过这4个实验,你将学习:

  1. 实验5:使用 LangGraph 构建状态图工作流,实现基于意图的条件路由
  2. 实验6:构建具备工具调用能力的 AI Agent,实现模型与外部函数的交互
  3. 实验7:构建完整的 RAG(检索增强生成)系统,学习文档加载、向量化、检索和生成
  4. 实验8:在 RAG 基础上增加质量控制机制,实现人工审核触发逻辑

📋 环境准备

1. 系统要求

  • Python: 3.10 或更高版本
  • 操作系统: Linux / macOS / Windows
  • Ollama: 本地AI模型服务

2. 安装新增依赖

cd ai-course-labs pip install -r requirements.txt

新增依赖包括:

  • langgraph>=0.2.0 - 实验5工作流编排
  • chromadb>=0.4.22 - 实验7-8向量存储
  • langchain-chroma>=0.1.0 - ChromaDB集成

3. 准备知识库

实验7-8需要预置的知识库文档,已包含在 test_data/knowledge_base/ 目录:

  • langchain_intro.txt - LangChain框架介绍
  • vector_db.txt - 向量数据库原理
  • prompt_engineering.txt - Prompt工程技术

�� 快速开始

运行测试

# 运行单个实验测试 pytest grader/test_lab5.py -v pytest grader/test_lab6.py -v pytest grader/test_lab7.py -v pytest grader/test_lab8.py -v # 运行所有实验5-8测试 pytest -m "lab5 or lab6 or lab7 or lab8" -v # 运行全部测试 pytest grader/ -v # 查看详细错误信息 pytest grader/test_lab5.py -v --tb=short

📂 项目结构

ai-course-labs/ ├── grader/ # 测评系统 │ ├── fixtures.py # 共享测试夹具(Ollama健康检查、ChromaDB初始化) │ ├── test_lab5.py # 实验5测评脚本 │ ├── test_lab6.py # 实验6测评脚本 │ ├── test_lab7.py # 实验7测评脚本 │ └── test_lab8.py # 实验8测评脚本 │ ├── student_code/ # 学生代码目录 │ ├── lab5/main.py # 实验5:LangGraph工作流 │ ├── lab6/main.py # 实验6:工具调用Agent │ ├── lab7/main.py # 实验7:RAG系统 │ └── lab8/main.py # 实验8:人工审核RAG │ ├── test_data/ │ └── knowledge_base/ # 预置知识库文档 │ ├── langchain_intro.txt │ ├── vector_db.txt │ └── prompt_engineering.txt │ ├── requirements.txt # Python依赖 ├── pytest.ini # Pytest配置 └── README.md # 本文件

�� 实验详情

实验5:LangGraph工作流路径验证

目标:使用 LangGraph 构建状态图工作流,实现基于输入意图的条件路由

文件位置student_code/lab5/main.py

需要实现run_workflow(input_data: dict) -> dict

任务要求

  • 创建 StateGraph 并定义工作流状态
  • 添加节点:start、order_handler、info_handler、end
  • 实现条件路由逻辑(根据 intent 字段路由)
  • 追踪执行路径

关键要求

  • intent == "order" 时,路由到 order_handler
  • intent == "info" 时,路由到 info_handler
  • 其他情况路由到 error_handler
  • 返回字典包含 route_takenfinal_outputexecution_path

测试用例

  • ✅ 订单路由正确性(30%)
  • ✅ 信息查询路由正确性(30%)
  • ✅ 执行路径追踪(20%)
  • ✅ 无效意图处理(20%)
  • 🌟 输出结构、路由隔离(加分项)

实验6:工具调用的结果验证

目标:构建具备工具调用能力的 AI Agent

文件位置student_code/lab6/main.py

需要实现agent_executor(query: str, available_tools: List) -> dict

模拟工具(已提供):

  • get_stock_price(symbol) - 查询股票价格(AAPL返回175.0)
  • add_numbers(a, b) - 计算两数之和
  • get_weather(city) - 查询天气(北京返回25℃晴)

任务要求

  • 将 Python 函数包装为 LangChain Tool
  • 创建支持工具调用的 Agent
  • 根据查询自动选择合适的工具
  • 正确传递参数并获取结果

关键要求

  • 返回字典包含 tool_usedtool_inputtool_outputfinal_answer
  • 工具选择准确(如"苹果股价"→get_stock_price)
  • 参数传递正确(如"10加20"→a=10, b=20)
  • 工具输出正确获取

测试用例

  • ✅ 股票价格工具选择(35%)
  • ✅ 加法工具选择(35%)
  • ✅ 参数传递正确性(25%)
  • ✅ 工具输出获取(25%)
  • ✅ 天气查询处理(15%)
  • 🌟 最终回答结构(加分项)

实验7:RAG系统的检索与生成验证

目标:构建完整的 RAG(检索增强生成)系统

文件位置student_code/lab7/main.py

需要实现ask_rag(question: str, collection_name: str) -> dict

任务要求

  • 加载并分割知识库文档(chunk_size=500, overlap=50)
  • 使用 Ollama Embeddings 进行向量化
  • 将向量存储到 ChromaDB
  • 根据问题检索相关文档块(top_k=3)
  • 基于检索结果生成答案

关键要求

  • 返回字典包含 answersource_chunkssimilarity_scoreshas_answer
  • 检索到与问题相关的文档块
  • 答案基于检索到的文档内容
  • 相似度分数按降序排列,范围0-1

测试用例

  • ✅ 检索相关性(30%)
  • ✅ 答案忠实度(25%)
  • ✅ 空结果处理(20%)
  • ✅ Top-K检索(15%)
  • ✅ 相似度分数(10%)
  • 🌟 输出结构完整性(加分项)

实验8:人工介入的触发逻辑

目标:在 RAG 基础上增加质量控制机制

文件位置student_code/lab8/main.py

需要实现ask_rag_with_review(question: str, confidence_threshold: float) -> dict

任务要求

  • 复用实验7的RAG系统
  • 计算综合置信度(相似度50% + 覆盖度30% + 答案长度20%)
  • 根据置信度返回不同状态
  • 低置信度时触发人工审核

关键要求

  • 返回字典包含 statusconfidence_scoreanswerreview_reasonsource_chunks
  • 三种状态:
    • success - 高置信度(≥0.7)
    • low_confidence - 中等置信度(0.5-0.7)
    • review_needed - 低置信度(<0.5),需要人工审核
  • review_needed 状态必须包含审核原因

测试用例

  • ✅ 高置信度场景(30%)
  • ✅ 低置信度触发审核(30%)
  • ✅ 中等置信度警告(20%)
  • ✅ 置信度阈值调节(20%)
  • 🌟 输出结构、文档块保留(加分项)

🛠️ 调试建议

常见问题排查

问题现象可能原因解决方法
LangGraph 导入错误依赖未安装pip install langgraph
ChromaDB 初始化失败依赖未安装pip install chromadb langchain-chroma
知识库文档未找到文件路径错误检查 test_data/knowledge_base/ 目录
向量化速度慢文档过大调整 chunk_size 参数
Agent 不选择工具Prompt 设计问题优化工具描述,使用 ReAct Prompt
相似度分数异常嵌入模型问题确认 Ollama 服务正常

本地调试

每个实验文件都包含测试代码:

# 调试实验5 python student_code/lab5/main.py # 调试实验6 python student_code/lab6/main.py # 调试实验7 python student_code/lab7/main.py # 调试实验8 python student_code/lab8/main.py

查看详细日志

# 显示打印输出 pytest grader/test_lab7.py -v -s # 显示完整错误堆栈 pytest grader/test_lab7.py -v --tb=long # 只运行失败的测试 pytest grader/test_lab7.py -v --lf

📊 评分标准

每个实验的测试用例都有明确的权重:

实验必需测试加分项总分
实验5100%额外加分100+
实验6100%额外加分100+
实验7100%额外加分100+
实验8100%额外加分100+

🎓 学习资源

官方文档

推荐阅读

  1. 工作流编排:理解状态机和条件路由的设计模式
  2. 工具调用:掌握 Function Calling 和 Agent 机制
  3. RAG 系统:学习检索增强生成的最佳实践
  4. 质量控制:了解生产环境中的可靠性保障

🤝 获取帮助

提交作业前检查清单

  • 实验5:工作流路由正确,执行路径追踪完整
  • 实验6:工具选择准确,参数传递正确
  • 实验7:检索相关文档,答案基于文档生成
  • 实验8:置信度计算准确,审核触发逻辑正确
  • 所有必需测试通过
  • 代码注释清晰

🎉 完成标志

当你看到以下输出时,恭喜你完成了实验5-8!

======================== test session starts ========================= ... grader/test_lab5.py::TestLab5::... PASSED [...] grader/test_lab6.py::TestLab6::... PASSED [...] grader/test_lab7.py::TestLab7::... PASSED [...] grader/test_lab8.py::TestLab8::... PASSED [...] ======================== XX passed in XX.XXs =========================

祝学习愉快! 🚀

完成实验5-8后,你将掌握生产级AI应用开发的核心技术,包括工作流编排、工具集成、知识检索和质量控制!