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

如何将Watson中的上下文变量提取并存储到本地文件?

把Watson上下文变量导出到本地文件的解决方案

我来帮你搞定这个需求!Watson Assistant本身没法直接写入本地文件,但我们可以通过两种简单的方式实现:Webhook对接本地服务或者用SDK本地拉取数据,下面给你详细讲每种方法的操作步骤和代码示例。

方法一:Webhook + 本地后端脚本(实时导出)

这个方法能在Watson提取到变量的同时,实时把数据发送到你的本地脚本并写入文件,适合需要即时保存的场景。

步骤1:编写本地HTTP服务(以Python Flask为例)

先写一个简单的本地服务,用来接收Watson发来的上下文数据并写入文件:

from flask import Flask, request

app = Flask(__name__)

@app.route('/save-watson-variable', methods=['POST'])
def save_variable():
    # 解析Watson发送的JSON数据
    request_data = request.get_json()
    # 从上下文里提取你需要的number_extract变量
    extracted_number = request_data['context']['number_extract']
    
    # 写入本地文件,这里可以自定义文件路径和文件名
    # 用追加模式('a')可以保留历史数据,改成'w'会每次覆盖
    with open('./watson_extracted_numbers.txt', 'a', encoding='utf-8') as file:
        file.write(f"提取到的数字: {extracted_number}\n")
    
    # 给Watson返回响应,确保对话能正常继续
    return {'context': request_data['context']}, 200

if __name__ == '__main__':
    # 启动本地服务,允许外部访问
    app.run(host='0.0.0.0', port=5000, debug=True)

步骤2:让Watson能访问到你的本地服务

因为Watson是云端服务,没法直接访问你的本地端口,所以需要用内网穿透工具(比如ngrok)把本地5000端口暴露成公网URL。运行ngrok命令:

ngrok http 5000

之后你会得到一个类似https://xxxx-xx-xx-xx-xx.ngrok.io的公网地址,后面要用到这个地址。

步骤3:在Watson Assistant里配置Webhook

  1. 打开你的Watson技能,进入「设置」→「Webhook」
  2. 添加Webhook URL:你的ngrok地址/save-watson-variable
  3. 找到你提取number_extract的对话节点,在节点的「选项」里勾选「调用Webhook」,并设置把上下文数据发送过去

这样当对话运行到这个节点时,Watson就会把上下文数据发送到你的本地脚本,脚本会自动把变量写入文件。

方法二:用Watson SDK本地拉取并保存(批量/按需导出)

如果不需要实时导出,你也可以在本地运行脚本,直接调用Watson的API获取对话上下文,然后保存到文件,适合测试或者批量导出的场景。

步骤1:安装Watson SDK

先安装IBM Watson的Python SDK:

pip install ibm-watson ibm-cloud-sdk-core

步骤2:编写拉取并保存的脚本

from ibm_watson import AssistantV2
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
import json

# 替换成你自己的Watson配置信息
API_KEY = "你的Watson API密钥"
ASSISTANT_URL = "你的Watson服务URL"
ASSISTANT_ID = "你的技能ID"

# 初始化Watson客户端
authenticator = IAMAuthenticator(API_KEY)
assistant = AssistantV2(
    version='2021-06-14',
    authenticator=authenticator
)
assistant.set_service_url(ASSISTANT_URL)

# 创建对话会话
session_response = assistant.create_session(assistant_id=ASSISTANT_ID).get_result()
session_id = session_response['session_id']

# 发送测试输入(或者你可以用实际的对话历史)
message_response = assistant.message(
    assistant_id=ASSISTANT_ID,
    session_id=session_id,
    input={'text': '包含数字的用户输入,比如"我的订单号是12345"'}
).get_result()

# 提取上下文里的number_extract变量
extracted_number = message_response['context']['skills']['main skill']['user_defined']['number_extract']

# 保存到本地JSON文件(也可以改成TXT格式)
save_data = {
    "提取到的数字": extracted_number,
    "对话时间": message_response['output']['generic'][0]['timestamp']
}
with open('./watson_context_variables.json', 'w', encoding='utf-8') as file:
    json.dump(save_data, file, ensure_ascii=False, indent=4)

# 关闭会话
assistant.delete_session(assistant_id=ASSISTANT_ID, session_id=session_id)

print("变量已成功保存到本地文件!")

注意事项

  • 两种方法都要确保你的本地文件路径有读写权限
  • 用Webhook时,ngrok的地址每次重启会变,如果需要固定地址,可以考虑用内网穿透的付费服务,或者把后端部署到云服务器上
  • 如果你用的是Watson Assistant的旧版本(V1 API),代码需要做少量调整,不过V2是目前的推荐版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:39