You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rasa命令行模式下如何记录对话(含意图)?

如何在Rasa命令行模式下记录对话与意图?

嘿,我来帮你搞定这个问题!确实,Rasa默认在命令行模式(比如用rasa shell启动)下,没有像HTTP服务器那样自带的完善对话/意图记录功能,但咱们有几个实用的方法来实现这个需求:

方法一:利用Rasa事件监听器(Event Brokers)

Rasa的事件 broker 功能其实不局限于HTTP模式,命令行模式下也能配置,它可以把所有对话相关事件(包括识别的意图、实体、用户消息、机器人回复等)自动存储到指定的系统中。

举个配置SQLite数据库的例子:

  1. 在你的config.yml文件中添加以下配置:
event_broker:
  type: sql
  url: sqlite:///conversation_logs.db
  1. 正常启动rasa shell即可。

之后所有对话数据都会被写入conversation_logs.db这个SQLite数据库里,你可以用SQL查询工具直接查看,或者导出成CSV等格式做后续分析。除了SQLite,你还可以配置Redis、Kafka等其他类型的事件 broker,满足不同的存储需求。

方法二:自定义动作实现灵活记录

如果需要更个性化的记录格式(比如自定义字段、存到特定文件或业务系统),写一个自定义动作是最佳选择,完全可控:

步骤1:编写自定义动作代码

在actions/actions.py中创建如下动作类:

from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
import json
from datetime import datetime

class ActionLogConversation(Action):
    def name(self) -> Text:
        return "action_log_conversation"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        
        # 提取关键对话数据
        latest_msg = tracker.latest_message
        intent_name = latest_msg['intent']['name']
        intent_confidence = round(latest_msg['intent']['confidence'], 4)
        user_input = latest_msg['text']
        conversation_id = tracker.sender_id
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        
        # 组装日志条目,可按需添加字段
        log_entry = {
            "timestamp": timestamp,
            "conversation_id": conversation_id,
            "user_message": user_input,
            "recognized_intent": intent_name,
            "intent_confidence": intent_confidence
        }
        
        # 写入JSONL格式日志文件,也可替换为数据库写入逻辑
        with open("conversation_logs.jsonl", "a", encoding="utf-8") as log_file:
            log_file.write(json.dumps(log_entry, ensure_ascii=False) + "\n")
        
        return []

步骤2:注册并触发动作

  1. 在domain.yml中注册这个动作:
actions:
  - action_log_conversation
  1. 在rules.yml中添加一条全局规则,让这个动作在每次用户发送消息后自动触发:
rules:
  - rule: 记录每一条用户对话与意图
    steps:
      - intent: *  # 匹配所有意图
      - action: action_log_conversation

完成后启动rasa shell,每次用户发送消息,识别到意图后,相关数据就会自动追加到conversation_logs.jsonl文件中,格式清晰易读,也方便后续的数据分析。

方法三:命令行重定向+简单解析(临时方案)

如果只是临时需要记录,不想改动代码或配置,可以用命令行重定向把rasa shell的输出保存到文件,再提取所需信息:

启动命令:

rasa shell > rasa_conversation.log 2>&1

这个命令会把所有控制台输出(包括用户消息、识别的意图和置信度)都保存到rasa_conversation.log中。之后你可以写个简单的Python/Shell脚本,提取类似User message: "xxx" (intent: yyy, confidence: zzz)这样的行,解析出意图和对话内容。不过这个方法比较简陋,适合快速临时使用,可靠性不如前两种。


内容的提问来源于stack exchange,提问作者Charlotte Junod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:23:14