絶対値を返します。 例えば-1を入力すると1が返ります。
足し算を行います。
AI の会話の状態をリセットします。 会話の話題転換を強制的に行う場合に使います。
一つの発話の中に複数のアクションを埋め込みます。各アクションで以下のことができます。
- 発話
- 音楽ファイルの再生
- アクション毎に感情の設定
- アクション毎に force_trigger_type を指定して特殊なアクションの実行
- HLS(ストリーミング)再生
- text: 発話内容
- sound: 再生する音楽ファイル名
- streaming_sound: 再生する音楽の名前
- emotion_type: 感情
- force_trigger_type: 変更先のトリガータイプ
- その他: force_trigger_type への引数になります
{content sound="happy_birthday.wav"}
{content streaming_sound="20210304_sakura_v3"}
{content streaming_video="20210304_sakura_v3"}
{content sound="happy_birthday.wav" text="ハッピバースデー"}
じゃあ歌うね!{content sound="sing.wav"}歌ったよ!
普通の感情{content text="笑っちゃうね" emotion_type="laughing"}
天気喋るね。{content text="晴れだって" force_trigger_type=weather_trigger weather=sunny max_temp=10 min_temp=2}
{content text="昔々あるところにおじいさんとおばあさんが..."}{content text="そこでおじいさんは..."}
会話ログの検索を行います。 検索結果の値(発話内容など)を返します。発話が見つからなかった場合空文字を返すので、条件に組み込めます。 複数マッチするものが有った場合、最も新しい発言を返します。
- search: 検索対象の文字列(ユーザー発話)
- 省略時はすべての発話になります
- start: 検索開始時刻
- time モジュールを使うことを想定しています。
- 直接指定時は
20180101-000000
等 - 未指定の場合、30日前になります
- end: 検索終了時刻
- start と同じ
- 未指定の場合、今現在になります
- target: 検索対象の ES 上のパス(未指定なら
tweet.text
でユーザー発話)- tweet.text: ユーザー発話
- reply.text: システム発話
- reply.bot_id: 応答した bot の ID
# 過去30日で「ラーメン」と言ってるユーザー発言を取る
{dialogue_log search="ラーメン"}
# 2018/01/01 から2018/01/18 までで「ラーメン」と言ってるユーザー発話をとる
{dialogue_log search="ラーメン" start=20180101-000000 end=20180118-000000}
# ロボット自身の直前の発話をとる(過去30日さかのぼって検索しその最新)
{dialogue_log target="reply.text"}
# ロボット自信の直前の発話をとる(過去5分以内。できれば↑よりこっちつかってね)
{dialogue_log target="reply.text" start={time addminutes="-5"}}
地震情報を取得して話します。
- format
- 出力フォーマット
- 天気モジュールと同様にキーワードを指定して使います。以下が使えます。
time
: 地震発生時刻が入ります e.g.12時15分
epicenter
: 震央の地名が入ります e.g.東京湾
、不明
max_intensity
: 最大震度が入ります e.g.4
,5弱
magnitude
: マグニチュードが入りますdepth
: 震源の深さが入ります。e.g.20キロ
、ごく浅い
content
: 固定付加文というものが入ります。e.g.この地震による津波の心配はありません。
time頃に震源地epicenterの地震があったんだって!最大震度はmax_intensityでマグニチュードはmagnitudeで震源の深さはdepth、commentらしいよ!
編集距離を計算します。
halucas の感情を設定します。
英語モードに設定します。 英語モードになると、聞き取るのも話すのも英語になります。
機能発話であることを知らせる効果音を鳴らしたあと、効果音と発話が被らないよう少し待ってから発話します。
運勢を占います。
総合運・恋愛運・金運・仕事運・健康運が占えます。
format
で発話内容を指定する必要があります。
※birth_date
を引数で指定しないかつ誕生日が未設定の場合は空文字を返すので、誕生日を引数で渡さない場合は、knowledge
などを使って誕生日が設定済みであることを確認してから呼び出してください。
date
:- 占う日付です。
DatetimeDetector
で検出可能な日付が使えます。(e.g.今日
、明日
、3月14日
)- 何も指定しない場合は今日の日付を使います。
birth_date
:- 占う対象人物の生年月日 or 誕生日です。
DatetimeDetector
で検出可能な日付が使えます。- 何も指定しない場合は設定されている誕生日を使います。
format
: 出力フォーマットです。以下のキーワードが使えます。date
: 占った日付を表す文字列。今日・明日・明後日・昨日・一昨日以外の場合は具体的な日付を「○月○日」の形式で返します。birth_date
: 占う対象人物の誕生日を「○月○日」の形式で返します。sign
: 誕生日の星座。e.g.やぎ 座
color
: ラッキーカラー。item
: ラッキーアイテム。title
: 総合運のタイトル。summary
: 総合運のまとめ。text_short
: 総合運のかんたんな説明。text_long
:総合運の長い説明。point
:総合運の点数 (5段階評価で1=悪い、5=良い)。rank
:総合運の順位。love_title
:恋愛運のタイトル。love_summary
:恋愛運のまとめ。love_text_short
:恋愛運のかんたんな説明。love_text_long
:恋愛運の長い説明。love_point
:恋愛運の点数 (5段階評価)。love_rank
:恋愛運の順位。money_title
:金運のタイトル。money_summary
:金運のまとめ。money_text_short
:金運のかんたんな説明。money_text_long
:金運の長い説明。money_point
:金運の点数 (5段階評価)。money_rank
:金運の順位。work_title
:仕事運のタイトル。work_summary
:仕事運のまとめ。work_text_short
:仕事運のかんたんな説明。work_text_long
:仕事運の長い説明。work_point
:仕事運の点数 (5段階評価)。work_rank
:仕事運の順位。health_title
:仕事運のタイトル。health_summary
:健康運のまとめ。health_text_short
:健康運のかんたんな説明。health_text_long
:健康運の長い説明。health_point
:健康運の点数 (5段階評価)。health_rank
:健康運の順位。
今日の総合運を占う
{fortune format=title!signの運勢は第rank位だよ!「summary」みたいだよー!}
西洋占星術で占う今日の総合運!やぎ 座の運勢は第6位だよ!「気楽に過ごすと、最高のアイデアが湧きそう」みたいだよー!
恋愛運を占って補足説明する
{fortune format=signの恋愛運は第love_rank位だよ!「love_text_long」だってさー!}
やぎ 座の恋愛運は第12位だよ!「言葉に気をつけたい日。思いつきや発言はよけいなトラブルに発展する恐れがあります。またよかれと思っても、相手のことにあまり口を出さないこと。逆に干渉と受け取られて不快感を抱かせます。一歩距離をおくことです。」だってさー!
占う対象人物の誕生日を指定して仕事運を占う
{fortune birth_date=1月1日 format=birth_date生まれの仕事運はwork_point点だよ!「work_summary」らしいよー!}
1月1日生まれの仕事運は1点だよ!「平穏無事な運気。アイデアを書き留めると〇」らしいよー!
占う日付を指定してラッキーアイテムとラッキーカラーを取得
{fortune date=明日 format=dateのラッキーアイテムはitem!ラッキーカラーはcolorだよー!}
明日のラッキーアイテムはリュック!ラッキーカラーはレモンイエローだよー!
ロミィの名前(の正規表現)を返します。
指定された起点から指定された時間発話をブロックします。 1日1回だけそのルールを発話、1度発話したらN時間そのルールは発話しない、1回だけその発話をするとかができます。
key
: このインターバルを一意に特定できるてきとうな文字列。gohan
とか。とりあえず各 interval に違う key つけとけばいいです。from
: 何を起点にするか。指定しない場合interval
になります。interval
: 前回そのルールを通ってからactivation
: アクティベーションしてからdialogue
: 最後の会話から
once
: 指定すると1度しかその interval を通れなくなります。 from=activation と組み合わせて使うといいでしょう。once=1
みたいに指定。1を2に変えても1回しか通らないので注意。
- time モジュールで使える時間指定いろいろ:起点からどれだけの間 interval をブロックするか指定します
1度通ったら2日と2時間ブロック
{interval adddays=2 addhours=2 key=futsuka_nijikan}
1度通ったら今日はブロック
{interval zone=endday key=aiueo}
1度通ったら明日いっぱいまでブロック
{interval zone=endday adddays=1 key=aiueo}
1度通ったら今週末(日曜23:59:59)までブロック
{interval zone=endweek key=shuumatsu}
直前の何らかの会話から2時間はブロック
{interval from=dialogue addhours=2 key=dialogue_2h}
その日何か会話していたら、次の日の朝6時まではブロック
{interval from=dialogue zone=endday addhours=6 key=dialogue_next_day_6am}
アクティベーション3日目以降に1回だけ
{interval from=activation once=1 zone=startday adddays=3 key=sorosoro_naretakana}
与えた文字列が NG ワードを含むかを返します。 NG の場合 "1" が、それ以外の場合空文字 "" が返ります。
- halucas の知識を参照することができます。
- 知識は「主語」「述語」「目的語」の三項関係で記述されています。
- 知識は複数の bot 間で参照しあうことができます。
- method
- get, set, update_object, update_subject, delete のいずれかを指定します
- 何も指定しなかった場合は get になります
- method=get のとき subject と predicate を指定すると、 object が返ってきます
- method=get のとき object と predicate を指定すると、 subject が返ってきます
- それ以外の method では subject, predicate, object を3つとも指定して下さい
- subject
- 主語を指定します
- 例:
山田
- 例:
- 主語を指定します
- subject_type
- 主語の型を指定します
- subject を指定したときだけ、指定してください
- 例えば'山田'と言った場合、人名と社名どっちもありうるので明示的に書くようにしています
- 例:
person
- predicate
- 述語を指定します
- 例:
relation_for_owner
- 例:
- 述語を指定します
- predicate_type
- 述語の型を指定します
- object
- 目的語を指定します
- 例:
恋人
- 例:
- 目的語を指定します
- object_type
- 目的語の型を指定します
- datetime_format
- 日付のフォーマットを指定します。
- https://docs.python.org/ja/3/library/datetime.html#strftime-and-strptime-format-codes
- method=get の場合にのみ有効
「 山田
との 心理的距離
が 心理的距離1
のとき」という条件で何かをする場合は、 cond
に以下のように書きます。
{knowledge subject=山田 predicate=心理的距離} == 心理的距離1
山田との関係性を発話したい場合は、 utterance
に以下のように書きます。
山田は{knowledge subject=山田 predicate=relation_for_owner}なんだよね!
ScenarioGraph 変数を使うこともできます。 例えば ff_name
という変数に今話題にしている人名が入っているなら以下のように書けます。
{knowledge subject=[ff_name] predicate=心理的距離} == 心理的距離1
[ff_name]は{knowledge subject=[ff_name] predicate=心理的距離}なんだよね!
「 人フォーム
の 関係性
が 親友
であるエンティティ」を1つ取得する場合は、以下のように書きます。
悩んでるなら、{knowledge object=親友 predicate=relation_for_owner}に相談してみたら?
「 halucas
の 好きなもの
は チョコレート
」という知識を追加するときは、以下のように書きます。
チョコレート食べたいなあ{knowledge method=set subject=owner predicate=preference object=チョコレート}
ScenarioGraph 変数を使うこともできます。
[food]食べたいなあ{knowledge method=set subject=owner predicate=preference object=[food]}
オーナーは初期設定では「オーナー」という名前になっています。 ScenarioGraph 変数に入っている値でこれを上書きしたい場合、以下のようにします。
オッケー![temp_name]よろしくね!{knowledge method=update_object subject=owner predicate=name object=[temp_name]}
object を更新するときは update_object を、 subject を更新するときは update_subject を使ってください。
Romi のモード(喋ってる、寝てる、英語、 etc.)を返します。 モード一覧: https://github.com/projectlucas/lucathing/blob/master/lucathing/entity/devicestate/lucas_mode.py#L15
ロミィを寝かしたり起こしたりします
ニュースを喋ります。
- query
- なんについてのニュースを取得するか指定します
- 指定しなければ直近の適当なニュースをとってきます
- 時間表現を入れることもできます(今日、とか)
- other_news
- 1を入れると直近しゃべってない記事のみを返してくれます
- 15分間ニュースについて話さないと、直近喋った記事一覧はリセットされます
- 1を入れると直近しゃべってない記事のみを返してくれます
- restrict_domain
- 1を入れると、事前に設定したドメインの記事のみを返すようになります
- ニュースのドメインは以下の方法で確認できます
- kibana
module: halucas.module.news AND body: *articles*
で検索してください
- SGでニュースを発話させるときに format に
<ドメイン>
を入れる- 例:
{news query=$0 format="<タイトル>のドメインは<ドメイン>だよ"}
- 例:
- kibana
- domains
- 返したいドメインを
,
で区切って指定します
- 返したいドメインを
- format
- 話す内容を指定します。
- 以下のタグを使います。それぞれ無い場合もあります。
<タイトル>
: 記事タイトル<本文>
: 本文。くそながい場合が多いです。<説明>
: 多分その記事の要約です。<説明か本文>
: 説明文があれば説明文を、なければ本文が入ります。発行日
: 発行日時。下で説明する datetime_format で表示形式を指定できます。ソース
: ニュース提供元著者
: ニュースを書いた人URL
: 記事 URLドメイン
: 記事のドメイン(例:asahi.com
nhk.or.jp
)
- datetime_format
ニュースは毎回ランダムに選ばれます。ニュースモジュールを叩くたびに違うニュースが返ってくるので、ニュースモジュールは一度だけ叩くのをおすすめします。 タイトルを話して、次のターンで詳細を話す等は現在実質できません。
(.*)のニュースを教えて
{news query=$1}
{news query=$1 format="<発行日>のニュースは<タイトル>だよ。<説明か本文>だって。" datetime_format="%m月%d日"}
{news query=$1 other_news=1}
{news query=$1 restirct_domain=1}
{news query=$1 domains="asahi.com,nhk.or.jp"}
旧暦・六曜を取り扱うモジュールです。
date
: 日付を指定します。- 単にその日の旧暦・六曜を聞きたい場合はその日を指定します
- 次の旧暦がいつか取得したい場合は、ここに起点となる日を入れます(恐らく
今日
でよさそう)
format
: 出力フォーマットを指定します。rokuyou
: 六曜が入ります。 例:仏滅
old_date
: 旧暦が入ります。 例:2020年うるう4月21日
new_date
: 旧暦に対応した新暦(月日)が入ります。ただし、今日に近い日は今日
や明日
のようになります。 例:7月5日
、明後日
{old_calendar format=new_dateの旧暦はold_dateでrokuyouだよ}
今日の旧暦は2021年5月26日で赤口だよ
正規表現で日付を$1
に入れていると仮定します。
{old_calendar format=new_dateの旧暦はold_dateでrokuyouだよ date=$1}
明日の旧暦は2021年5月27日で先勝だよ
正規表現で六曜が$1
に入っていると仮定します。
例えばこんなので取っておきます: .*次の(大安|赤口|先勝|友引|先負|仏滅)(は|を|って|)(教えて|いつ).*
{old_calendar format=次のrokuyouはnew_dateだよ next_rokuyou=$1}
オーナー名を返します。
あるノードを決められた確率でランダムに通過できたり通過できなかったりさせます。
正規表現でテキストの一部を抽出します。 数字部分だけを抜き出すとか、先頭N文字を抜き出すとかに使えます。
ソースと質問を用いて質問応答します。
現在の時刻を取得、もしくは time に指定した文字列から時刻を抽出します。 さらに時刻計算をし、指定したフォーマットで出力できます。
- 時間指定系(ユーザーの発話から時間を抽出するときに使用)
- time: ユーザーの発話など時刻を抽出したい文字列
- 指定しない場合現在日時になります
- default_time: 上記の time での抽出が失敗したときに使う日時。
- default_time を指定せず time から時刻を抽出できなかった場合、 {time} モジュールは空文字を返します。
- prefered_direction: 指定された時間に曖昧性があるとき、未来・過去・今のどれを優先するか
- future: 未来を優先。デフォルト。 (5/31に5/8と言われれば来年の5/8)
- past: 過去を優先(5/1 に 5/8 と言われれば去年の5/8)
- none: 今を優先(5/8 と言われればそれが過去でも未来でも、今年の5/8とみなす)
- time: ユーザーの発話など時刻を抽出したい文字列
- format: 出力のフォーマット(後述)
- 日時修正系
- addyears: 指定した日付に足す年数
- addmonths: 指定した日付に足す月数
- addweeks: 指定した日付に足す週数
- adddays: 指定した時刻に足す日にち
- addhours: 指定した時刻に足す時間
- addminutes: 指定した時刻に足す分数
- addseconds: 指定した時刻に足す秒数
- zone: 日や月のはじめ・終わり指定。以下の値のどれか
- startyear
- endyear
- startmonth
- endmonth
- startweek
- endweek
- startday
- endday
%Y/%m/%d %H:%M:%S
のように%Y などの文字を使ってフォーマットを指定します。
ここでは 2021/01/02 12:34:56 を例に説明します
- %Y: 西暦4桁(2021)
- %m: 月2桁(01)
- %d: 日2桁(02)
- %A: 曜日(Sunday, Monday, ..., Saturday)
- %H: 時2桁-24h表記 (12)
- %M: 分2桁 (34)
- %S: 秒2桁(56)
引数なし
{time}
# 20171101-114514
指定フォーマット
{time format="%Y/%m/%d %H:%M:%S"}
# 2017/11/01 11:45:14
{time format="%H"}
# 11
特定フォーマット
{time format="日付"}
# 11/01
{time format="時間"}
# 11:45
{time format="日時"}
# 11/01 11:45
日時抽出
# 直前のユーザー発話から時刻を抽出。失敗したら今日の日時を返す。
{time time=$0 default_time=今日}
日時操作
# 日単位で操作する場合
{time adddays=1}
# 20171221-100000 -> 20171222-100000
{time adddays=-1}
# 20171221-100000 -> 20171220-100000
{time adddays=11}
# 20171221-100000 -> 20180101-100000
# 年単位で操作する場合
{time addyears=1}
# 月単位で操作する場合
{time addmonths=1}
# 週単位で操作する場合
{time addweeks=1}
# 時間単位で操作する場合
{time addhours=1}
# 分単位で操作する場合
{time addminutes=1}
# 秒単位で操作する場合
{time addseconds=1}
# 組み合わせで操作する場合
# 半角スペースで追加してください
{time addhours=1 addminutes=30}
# 下記と同意
{time addminutes=90}
# format も指定可
{time addhours=1 format="時間"}
# 11:00
年月週日の始まり終わりの時間を取得 例えば検索条件に1日単位で指定したい場合、start=1日の始まり、end=1日の終わりと指定することに使えます。
# 日単位
{time zone="startday"}
# 20180306-000000
{time zone="endday"}
# 20180306-235959
# 昨日を指定したい場合は adddays=-1 を追加することで実現できます。
{time zone="startday" adddays="-1"}
# 20180305-000000
# format も指定できます
{time zone="startday" adddays="-1" format="日時"}
# 03/05 00:00
# 月単位
{time zone="startmonth"}
# 20180301-000000
{time zone="endmonth"}
# 20180331-235959
# 週単位
{time zone="startweek"}
# 20180305-000000 -> 今週月曜0時
{time zone="endweek"}
# 20180311-235959 -> 今週日曜23:59:59
#年単位
{time zone="startyear"}
# 20180101-000000
{time zone="endyear"}
# 20181231-235959
応用(条件で使う)
# ユーザーが発話した内容が7日後以降のことだったら
{time time=$0 default_time=今日} >= {time zone=startday adddays=7}
# ユーザーの発言に日時情報が含まれていれば
{time time=$0}
リクエストのトリガの種類を返します。
トリガの種類は以下です。
user_utterance_trigger
: ユーザー発話によるトリガface_detection_trigger
: 顔認識(話しかけ)のトリガー
ユーザーの直近の発話を返します。
ユーザーのよく発言する単語を取得、削除できます。
単語の取得は以下の条件で行われます。
- 期間:1ヶ月以内
- 最低 min_count 回以上出ている単語
- 固有名詞か、カタカナ3文字以上の一般名詞
これらでフィルタされた単語から、出現回数で重み付けされたランダムで1単語を取得して返します。
text で指定された文章から単語を抽出して削除します。 (削除は1ヶ月以内の固有名詞、カタカナ3文字以上の一般名詞が対象です) 削除された単語一覧がスペース区切りで返されます。 削除されたものが特にない場合空文字が返ります。
- method: 何をするか。以下から選んでください。デフォルト: get
- get: 単語を取得します
- delete: text で指定された単語を削除します。削除された単語をスペース区切りで返します。
- min_count: 最低この回数発話された単語だけを取得します。デフォルト:5
- text: ここで指定されたテキストに含まれる単語を消します
{user_word}
{user_word min_count=10}
ランダム性があるので、同じ単語を複数で使いたい場合一旦変数に保存してください。
消されたものがあるかで発話を分岐する場合、一旦変数に保存するのがおすすめです
# 直前のユーザー発話に含まれる単語を削除。削除結果を [deleted_words] に保存
store key: deleted_words
store value: {user_word method=delete text=$0}
さらに続くもう一つの system_utterance で以下のように書きます
# cond
[deleted_words]
# utterance
[deleted_words] ってもう言わないようにするね。
会話に間を置きます 元のVTML 仕様: https://drive.google.com/file/d/19mc9E_GUCROR9ZYr77NQTX67AaLxxQIX/view?usp=sharing
話す音程を変えられます 元のVTML 仕様: https://drive.google.com/file/d/19mc9E_GUCROR9ZYr77NQTX67AaLxxQIX/view?usp=sharing
ロミィの発話の読みとイントネーションを指定します。
内部的には VTML をロミィに渡します。 VTML 仕様: https://drive.google.com/file/d/19mc9E_GUCROR9ZYr77NQTX67AaLxxQIX/view?usp=sharing
話す速さを変えられます 元のVTML 仕様: https://drive.google.com/file/d/19mc9E_GUCROR9ZYr77NQTX67AaLxxQIX/view?usp=sharing
話す音量を変えられます 元のVTML 仕様: https://drive.google.com/file/d/19mc9E_GUCROR9ZYr77NQTX67AaLxxQIX/view?usp=sharing
天気の情報を取得します。 日付は、15時以前なら当日の天気を、15時以降なら翌日の天気を返します。 (今の所日付指定はできませんが要望があれば実装します。)
- area
- 天気を知りたい場所
area=渋谷
や札幌
や宮古島
のように指定します- 正規表現を用いるとよいでしょう
- time
- いつの天気を取得するか指定します
- https://vantage-planning.qiita.com/shared/items/066efb7515b40434846d で対応している文字列に対応します
- 自然文から抽出できるので「明日の天気を教えて」などのユーザー発話をそのまま突っ込めます
- format
- 出力フォーマット
weather_type
と言ったようにキーワードを埋め込めます。- セキュリティ上の問題があるのでユーザー発話等ユーザー情報を format に入れないでください。
- 省略時は天気だけが返されます。
- 例
timeの天気はweather_type。最高気温はtemp_max度で最低気温はtemp_min度でしょう。湿度はhumidityパーセントだよ。
- キーワード
- time: 日付け。以下の4種類:「今日」「明日」「明後日」「X月X日」
- weather_type: 天気。例:「晴れ」「曇り」etc.
- temp_min: 最低気温。例:「19.8」
- temp_max: 最高気温。例:「24.2」
- humidity_min: 最低湿度。例:「77」パーセントのもの。
- humidity_max: 最高湿度。
- humidity: 湿度。最高湿度と同じ。
- precip_prob: 降水確率。例:「73」パーセントのもの。
- area: 天気を知りたかった場所(表記ゆれが補正されます)。 例:「渋谷区」
{new_weather_forecast format=timeの天気はweather_type。最高気温はtemp_max度で最低気温はtemp_min度でしょう。湿度はhumidityパーセントだよ。}
-> 今日の天気は晴れ。最高気温は13.5度で最低気温は10.1度でしょう。湿度は88パーセントだよ。
{new_weather_forecast format=timeはsummary}
-> 明日は一日中曇り。
天気は{new_weather_forecast}だよー
-> 天気は曇りだよー
(.*)の天気(.*)教えて
-> 渋谷の天気を教えて
{new_weather_forecast area=$1 format=areaのtimeの天気はweather_typeみたいだよー。}
-> 渋谷区の今日の天気は晴れのち曇りみたいだよー。
\A.*天気を教えて.*\z
{new_weather_forecast time=$0}
直前のユーザー発話で、全体がマッチするようにします。(前後に .* をつけておきます) それによって、システム発話の $0 にはユーザー発話全体が入るので、それを time に入れます。
{new_weather_forecast} == '曇り'
{new_weather_forecast format=temp_min} < 10
気象警報や注意報などを話す際に使います。
area
: 場所を指定します。正規表現でうまく取ってください。 e.g.那覇
、石垣市
format
: 出力フォーマット。以下のキーワードが使えます。time
: 警報注意報が発令された時間が入ります。author_name
: どこがその情報を発表したかが入ります。 e.g.気象庁
、名古屋地方気象台
content
: 発令されている情報が自然文で入ります。 e.g.本島中南部、本島北部では、土砂災害に注意してください。沖縄本島地方では、高波や竜巻などの激しい突風、落雷に注意してください。
emergencies
: 発令されている特別警報が入ります。複数ある場合は、
で区切られます。warnings
: 発令されている警報が入ります。特別警報は含みません。複数ある場合は、
で区切られます。advisories
: 発令されている注意報が入ります。複数ある場合は、
で区切られます。conditions
: 発令されている警報などの状態が入ります。例えば大雨のときは土砂災害みたいなのが入ります。additions
: 警報注意報以外に注意すべきものが入ります。例えば、竜巻とかattentions
: 発令されている警報などについて、注意すべき災害が入ります。土砂災害警戒
とか浸水注意
とかlocations
: 地名が入ります。
{weather_warning area=$0 format=time現在、author_nameによると、contentなんだって}
{weather_warning area=$0 format=time現在、author_nameによると、locationではemergencies、warnings、advisories、が出ているよ。additionsに注意してね。それから、conditions、attentionsに気をつけてね。}
19時27分現在、福島地方気象台によると、いわき市では、大雨警報、雷注意報、洪水注意報、が出ているよ。竜巻、ひょうに注意してね。それから、、浸水警戒、土砂災害注意に気をつけてね。
警報が出ているときだけ分岐みたいなことも可能です。こちらを参考にしてみてください。 https://docs.google.com/spreadsheets/d/1PwHBvso7apRJxgf9i_gFoXWEHhMCahn1zNtlZdYfurI/edit#gid=107993462&range=B14:F23
wikipedia で検索してサマリーを返します。
質問に対してウィキペディアを引いて答えます。 非常に重たいモジュールなので必ず追い発話 (additional_utterance) と組み合わせてお使いください。
- question: 質問
- format: 出力のフォーマット。以下のシンボルを入れられます。シンボルを入れる場合 "" で囲ってね。デフォルトは
<answer>
<answer>
: 答え<supporting_text>
: 答えの根拠となる文章<supporting_entity>
: 答えの根拠になったエンティティ(ウィキペディアのページ)<entity_list>
: 質問から抽出したエンティティ一覧(スペース区切り。)デバッグ用
{wiki_qa question=[wiki_question] format="答えは<answer>かな。<supporting_entity>のウィキによると<supporting_text> ならしいよ!"}
発話から指定された品詞の単語を抽出します。 ユーザー発話の中から好きな食べ物などを抽出するときに使うのを想定しています。 もし指定された品詞の単語が複数あった場合ランダムに一つ返します。 (最後に出たものを優先してとかあればエンジニア相談)
- text: 入力にするテキスト。
$1
などでユーザーの発話の部分から検索させることができます。- 指定しなければ直前のユーザー発話全体から検索します。
- type: 品詞
名詞
形容詞
動詞
など- 名詞の場合、厳密には一般名詞と固有名詞のみを抽出します。数字や代名詞などは抽出しません。
地域
: 地名を抽出します- ただしあまり賢くありません。〜〜市とかが入っていても取れないこともありますし、末尾に市などが入ってないものは取れないことが多いです。
# 直前のユーザー発話から名詞を抽出します
{word}
# 直前のユーザー発話を `僕は(.*)が好きだなぁ` としているとして、 `(.*)` の中から名詞を抽出します
{word text=$1}
# 直前のユーザー発話から動詞を抽出します
{word type=動詞}
# 直前のユーザー発話から名詞を抽出して Knowledge に保存します
# word は復数単語があったときランダム性があるので一旦変数に保存するのがいいです
# storeKey に favorite_tmp として storeValue に {word} と入れます。これで favorite_tmp に抽出した名詞が入ります。
# 発話しつつ knowledge に格納します
[favorite_tmp]が好きなんだね!{knowledge method=update_object subject=owner predicate=favorite object=[favorite_tmp]}