
实施AI驱动的测验生成机制
在这一章节中,我们将探索创建一个AI驱动的测验生成器的应用案例,该应用展示了如何利用第三方API、数据集创建以及为AI模型设计提示。这个项目说明了AI在生成教育内容,特别是测验方面的实用应用。
第1节:准备环境
构建我们的AI驱动测验生成器的第一步涉及设置环境,并确保我们能够访问必要的第三方API。这个设置包括屏蔽警告消息,以确保在执行过程中输出干净,从而使开发过程更加顺畅和易读。
# 导入警告库来控制警告消息
import warnings
# 忽略所有警告消息,确保在执行期间输出干净
warnings.filterwarnings('ignore')
# 加载用于项目的第三方服务的API令牌
from utils import get_circle_ci_api_key, get_github_api_key, get_openai_api_key
# 获取CircleCI、GitHub和OpenAI的个人API密钥
circle_ci_api_key = get_circle_ci_api_key()
github_api_key = get_github_api_key()
openai_api_key = get_openai_api_key()
第2节:创建测验数据集
我们的测验生成器的核心是数据集,它将从中生成问题。这个数据集包含来自不同类别的主题,每个类别都有独特的事实,这些事实可以用来构建测验问题。
# 定义用于结构化测验问题的模板
quiz_question_template = "{question}"
# 初始化测验银行,其中包含主题、类别和事实
quiz_bank = """
这里有三个新的测验问题,遵循给定的格式:
1. 主题: 历史冲突
类别: 历史, 政治
事实:
- 开始于1914年,结束于1918年
- 涉及两大联盟:盟军和中央国
- 西线广泛使用堑壕战
2. 主题: 革命性通信技术
类别: 科技, 历史
事实:
- 由亚历山大·格拉汉姆·贝尔于1876年发明
- 革新了远程通信
- 传输的第一句话是“沃森先生,请过来,我想见你”
3. 主题: 美国标志性地标
类别: 地理, 历史
事实:
- 1886年由法国赠送给美国
- 象征自由和民主
- 位于纽约港的自由岛上
"""
#### 第3节:构建测验生成提示
为了根据用户选择的类别生成定制化的测验,我们设计了一个详细的提示模板,引导AI创建测验。此模板概述了AI应遵循的步骤,从类别选择到问题生成。
```python
# 定义分隔不同部分的测验提示的分隔符
section_delimiter = "####"
# 构建一个详细的提示模板,指导AI生成定制化的测验
quiz_generation_prompt_template = f"""
生成定制化测验的指示:
每个问题由四个井号分隔,即 {section_delimiter}
用户选择测验的类别。确保问题与所选类别相关。
步骤 1: {section_delimiter} 从以下列表中识别用户选择的类别:
* 文化
* 科学
* 艺术
步骤 2: {section_delimiter} 从测验银行中选择最多两个与所选类别相符的主题:
{quiz_bank}
步骤 3: {section_delimiter} 根据选定的主题创建测验,为每个主题制定三个问题。
测验格式:
问题 1: {section_delimiter} <插入问题 1>
问题 2: {section_delimiter} <插入问题 2>
问题 3: {section_delimiter} <插入问题 3>
"""
#### 第4节:使用Langchain结构化提示
有了准备好的提示模板后,我们使用Langchain的能力将其结构化以便由AI模型处理。这包括设置聊天提示、选择AI模型以及解析其输出。
```python
# 导入Langchain中用于提示结构化和AI模型交互的必要组件
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.schema.output_parser import StrOutputParser
# 将详细的测验生成提示转换为AI可处理的结构化格式
structured_chat_prompt = ChatPromptTemplate.from_messages([("user", quiz_generation_prompt_template)])
# 选择用于生成测验问题的语言模型
language_model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# 设置输出解析器以将AI响应转换为可读格式
response_parser = StrOutputParser()
第5节:执行测验生成过程
最后,我们使用Langchain的表达语言将所有组件结合在一起,形成一个无缝的测验生成管道。
# 将结构化提示、语言模型和输出解析器连接起来形成测验生成管道
quiz_generation_pipeline = structured_chat_prompt | language_model | response_parser
# 执行管道以生成测验(执行示例未显示)
在这一节中,我们将整个AI驱动的测验生成过程的设置和执行封装在一个单一的可重用函数中。这种设计模式促进了模块化和可维护性,允许轻松调整和维护。函数generate_quiz_assistant_pipeline
将所有必需的组件——提示创建、模型选择和输出解析——组合成一个连贯的工作流,可以通过自定义输入进行调用。
def generate_quiz_assistant_pipeline(user_category):
# 使用用户提供的类别执行测验生成管道
# 注意:这里没有展示具体的执行代码,因为需要API密钥等配置才能真正运行
pass