趋近智
在根据章程生成评论之后,宪法AI(CAI)流程中的下一个顺理成章的步骤是修订初始LLM回复以解决这些评论中提出的问题。本部分详细介绍负责生成这些修订的组件的具体实施。与从头训练模型不同,这通常涉及运用一个强大的现有LLM,在精心构建的提示引导下,来执行修订任务。目标是生成一个修订后的回复,,该回复结合了评论中的反馈,使其与章程的符合程度高于初始回复。
核心思路是利用LLM的指令遵循能力来执行修订。在此背景下,“AI修订模型”通常指的是协调此修订生成的过程或系统,而不是一个单独、独立训练的模型架构(尽管那是一种可能但资源消耗更大的方法)。通常,您会为此任务使用一个有能力的(基础)LLM(),或者如果规模或能力有要求,甚至可能是一个更强大的模型(,也许是基于API的模型)。
此过程的输入是在前一步骤中生成的对 (, )。我们旨在生成的输出是 。
生成修订的质量在很大程度上取决于提供给LLM()的提示。提示必须清楚地指示模型根据中提出的问题具体地修改,同时理想情况下保留原始回复有帮助的部分。
这里有两种模板结构。请记住,最佳的提示工程 (prompt engineering)通常需要根据具体的LLM和任务细节进行迭代。
模板1:直接修订指令
[INST] 您的任务是根据一份源自章程的评论来修订一个AI回复。
原始回复:
<response>
{initial_response}
</response>
评论(识别章程违规):
<critique>
{critique}
</critique>
*仅*根据所提供的评论,请修订原始回复,以解决已识别的问题,并确保其符合评论中提及或暗示的原则。在可能的情况下,保持原始回复的意图和有用性,将修改重点放在解决评论上。*只*输出修订后的回复。
[/INST]
修订后的回复:
模板2:强调特定原则(如果评论中提供)
[INST] 原始回复:
{initial_response}
评论(违反原则:{list_of_violated_principles}):
{critique}
修订原始回复以解决评论中描述的问题,并特别注意违反的原则:{list_of_violated_principles}。修订后的回复应符合评论中体现的章程。
直接输出修订后的回复,无需前言。
[/INST]
修订后的回复:
提示工程考量:
自动化修订生成涉及遍历您的 (, ) 对并使用LLM为每个对生成 。
使用LLM并以初始回复及其评论作为提示,生成单个修订后的回复的数据流。
以下是一个演示自动化的Python代码片段:
import logging # 使用日志进行更好的追踪
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 假设 llm_service 是一个预配置的LLM API客户端或本地模型
# critique_data 是一个字典列表:[{'initial_response': str, 'critique': str, 'metadata': {...}}]
REVISION_PROMPT_TEMPLATE = """
[INST] Original Response:
<response>
{initial_response}
</response>
Critique:
<critique>
{critique}
</critique>
Revise the original response to specifically address the issues raised in the critique, ensuring alignment with constitutional principles reflected in the critique. Preserve helpfulness where appropriate. Output only the revised response.
[/INST]
Revised Response:
"""
def generate_revisions(critique_data, llm_service, prompt_template):
"""为评论列表生成修订。"""
revised_data = []
for i, item in enumerate(critique_data):
prompt = prompt_template.format(
initial_response=item['initial_response'],
critique=item['critique']
)
try:
# 示例参数,根据LLM提供商/模型进行调整
response = llm_service.generate(
prompt=prompt,
max_new_tokens=len(item['initial_response']) + 512, # 启发式最大长度
temperature=0.4, # 较低的温度可获得更集中的修订
stop_sequences=["[INST]", "\n\nHuman:", "\n\nAssistant:"] # 防止生成过长内容
)
revised_text = response.strip() # 基本清理
if not revised_text:
logging.warning(f"项目 {i} 生成了空修订。跳过。")
continue
item['revised_response'] = revised_text
revised_data.append(item)
if (i + 1) % 100 == 0: # 定期记录进度
logging.info(f"已为 {i+1}/{len(critique_data)} 个项目生成修订。")
except Exception as e:
logging.error(f"处理项目 {i} 时出错:{e}", exc_info=True)
# 根据需要实现重试逻辑或跳过有问题项目
return revised_data
# 示例用法:
# 假设 critique_outputs 包含来自评论器步骤的数据
# revised_dataset = generate_revisions(critique_outputs, my_llm_client, REVISION_PROMPT_TEMPLATE)
# logging.info(f"成功生成了 {len(revised_dataset)} 条修订。")
# revised_dataset 现在包含三元组(如果保留元数据则包含更多信息)
# 适合在下一步中构建SFT数据集。
生成的修订不能保证完美。常见的失败模式包括:
缓解策略包括:
此修订生成过程的输出是一个数据集,至少包含元组(, , )。这个数据集是CAI监督学习 (supervised learning)阶段下一个重要步骤的依据:即构建最终数据集并微调目标LLM(),使其内化章程原则,详细内容将在下一节中说明。此处生成的修订质量直接影响最终微调阶段的有效性。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•