趋近智
"虽然自动化指标能提供关于性能、召回率和流畅度的有用信号,但它们常常未能捕捉到生产环境中LLM应用质量的全貌。诸如实用性、特定情况下的事实准确性、安全性、语气恰当性以及与用户意图的一致性等方方面面,是众所周知难以通过算法衡量的。仅依靠自动化评估可能导致部署那些在基准测试中表现良好但在实际情况中无法满足用户需求的系统。在此,融入人类判断变得不可或缺。"
人工参与(HITL)的反馈和标注流程提供所需的定性数据,以弥补定量指标未能覆盖的不足。它们能帮助您理解应用在特定交互中成功或失败的原因,识别不易察觉的问题,并收集高质量数据以持续改进。整合人工参与机制是成熟、可投入生产的LLM系统的一个标志,这类系统优先考虑用户满意度和可靠性。
自动化指标,例如用于摘要的ROUGE或用于翻译的BLEU,是为特定NLP任务开发的,它们与人类对现代LLM处理的生成任务质量的感知关联性通常较差。一个回复可能对参考文本获得高相似度得分,但仍然可能无用、事实不准确或不安全。
人类反馈擅长评估:
系统地收集这些反馈,能让您超越简单的通过/失败测试,并对应用行为有更全面的认识。
反馈收集方法从被动观察到主动请求不等。
机制的选择依据应用、用户群、可用资源和反馈过程的具体目标而定。通常,多种方法结合能产生最佳结果。
有效地收集反馈需要将这些机制整合到您的应用工作流和工具中。
获取用户反馈最直接的方式是,将简单的UI元素(按钮、星级评分、评论框)直接嵌入 (embedding)应用界面中,靠近生成的回复。这能最大限度地减少用户的操作阻力。确保这些元素不显眼但可被发现。收集到的数据需要与交互的上下文 (context)信息(输入、输出、时间戳、适用的用户ID、应用状态)一同记录。
LangSmith旨在支持反馈收集和分析。它提供了一种结构化的方式,将反馈数据直接与您的LangChain应用的执行记录关联起来。
您可以使用LangSmith客户端以编程方式记录针对特定运行ID的反馈。这能将人类判断直接与生成回复的链或代理的详细运行记录关联起来,有助于调试。
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tracers.context import collect_runs
from langsmith import Client
# 确保LangSmith环境变量已设置
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = "YOUR_LANGSMITH_API_KEY"
# os.environ["LANGCHAIN_PROJECT"] = "YOUR_PROJECT_NAME"
# os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
# 初始化LangSmith客户端
client = Client()
# 定义一个简单的链
llm = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的助手。"),
("user", "{input}")
])
chain = prompt | llm
# 执行链并捕获运行ID
run_id = None
try:
# 使用collect_runs来捕获运行上下文
with collect_runs() as cb:
response = chain.invoke({"input": "解释一下编程中的递归原理。"})
# 从捕获的运行中检索运行ID
if cb.traced_runs:
run_id = cb.traced_runs[0].id
print(f"LLM Response: {response.content[:100]}...") # 打印部分回复
print(f"运行ID: {run_id}")
except Exception as e:
print(f"链执行错误: {e}")
# 模拟收集用户反馈(例如,来自网页UI)
if run_id:
user_feedback_score = 1 # 示例:1表示“好”,0表示“差”
user_comment = "解释清晰,但可以用一个更简单的例子。"
feedback_key = "quality_rating" # 为此类反馈定义一个一致的键
try:
# 将反馈记录到LangSmith,与特定运行关联
client.create_feedback(
run_id=run_id,
key=feedback_key,
score=user_feedback_score, # 可以是二进制、量表(0-1,1-5)等
comment=user_comment,
feedback_source_type="user", # 区分用户反馈、评审员反馈或模型反馈
# 您还可以添加source_info,例如{"userId": "user123"}
)
print(f"反馈已成功记录到运行: {run_id}")
except Exception as e:
print(f"将反馈记录到LangSmith时出错: {e}")
else:
print("无法获取运行ID,未记录反馈。")
LangSmith也提供一个网页界面,协作人员可以在其中手动审查运行记录、添加评论、分配分数和标记 (token)运行。这有助于有针对性的调试会话或手动标注工作流程。
对于大规模标注工作或特殊要求,您可能需要与Label Studio、Prodigy、Scale AI等专门的数据标注平台集成,或构建自定义的内部工具。这些平台提供更精密的界面、工作流管理、质量控制功能和标注员管理能力。通过这些工具收集的数据通常可以导出并链接回LangSmith运行记录,或用于创建评估数据集。
收集反馈只是第一步;理解其含义需要结构化。
收集人类反馈的最终目的是推动应用改进。
改进LLM应用的典型人工反馈回路。用户交互生成回复,反馈被收集并记录(通常通过LangSmith等平台),进行分析,然后用于调试问题、更新评估数据集或微调 (fine-tuning)提示词 (prompt)和模型,从而实现改进的应用部署。
反馈如何转化为行动:
实施成功的人工参与流程涉及处理以下问题:
"尽管存在这些问题,整合人类反馈是一项重要实践,用于构建不仅功能完善,而且可靠、值得信赖、真正对用户有帮助的LLM应用在生产环境中。它将评估从纯粹的自动化检查转变为由经验驱动的持续学习过程。"
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•