forked from xszyou/Fay
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1、在test/rasa目录下提供本地nlp(rasa+chatglm)的替换方法。
- Loading branch information
Showing
14 changed files
with
404 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
from rasa_sdk import Action,Tracker | ||
from rasa_sdk.executor import CollectingDispatcher | ||
from datetime import datetime | ||
from dateutil.parser import parse | ||
from dateutil.relativedelta import relativedelta | ||
import json | ||
import requests | ||
from rasa_sdk.forms import FormValidationAction | ||
|
||
class ValidateScheduleReminderForm(FormValidationAction): | ||
def name(self) : | ||
return "validate_schedule_reminder_form" | ||
|
||
async def validate_date(self, value, dispatcher: CollectingDispatcher, tracker: Tracker, domain) : | ||
# 在这里添加您的日期验证逻辑 | ||
return {"date": value} | ||
|
||
async def validate_time(self, value, dispatcher: CollectingDispatcher, tracker: Tracker, domain): | ||
# 在这里添加您的时间验证逻辑 | ||
return {"time": value} | ||
|
||
async def validate_event(self, value, dispatcher: CollectingDispatcher, tracker: Tracker, domain): | ||
# 在这里添加您的事件验证逻辑 | ||
return {"event": value} | ||
|
||
|
||
class ActionGPTResponse(Action): | ||
def name(self) -> str: | ||
return "action_gpt_response" | ||
|
||
async def run(self, dispatcher: CollectingDispatcher, tracker, domain): | ||
history = [] | ||
user_messages = [] | ||
bot_messages = [] | ||
|
||
# Separate user messages and bot messages | ||
for event in tracker.events: | ||
if event.get("event") == "user": | ||
user_messages.append(event.get("text")) | ||
elif event.get("event") == "bot": | ||
bot_messages.append(event.get("text")) | ||
|
||
# Combine user and bot messages | ||
for user, bot in zip(user_messages, bot_messages): | ||
history.append([user, bot]) | ||
|
||
print("*******************************") | ||
print(history) | ||
print("*******************************") | ||
|
||
url = "http://127.0.0.1:8000" | ||
req = json.dumps({ | ||
"prompt": "请用20字内回复我。" + tracker.latest_message.get("text"), | ||
"history": history}) | ||
headers = {'content-type': 'application/json'} | ||
r = requests.post(url, headers=headers, data=req) | ||
a = json.loads(r.text).get('response') | ||
history = json.loads(r.text).get('history') | ||
|
||
dispatcher.utter_message(a) | ||
|
||
return [] | ||
|
||
|
||
class ActionAskDate(Action): | ||
def name(self): | ||
return "action_ask_date" | ||
|
||
async def run(self, dispatcher, tracker, domain): | ||
# 获取当前日期 | ||
today = datetime.now().date() | ||
# 获取星期几的信息 | ||
week_day = today.strftime("%A") | ||
# 将星期几的英文名称转换为中文 | ||
week_day_zh = { | ||
"Monday": "星期一", | ||
"Tuesday": "星期二", | ||
"Wednesday": "星期三", | ||
"Thursday": "星期四", | ||
"Friday": "星期五", | ||
"Saturday": "星期六", | ||
"Sunday": "星期日", | ||
}.get(week_day, "未知") | ||
# 将日期格式化为字符串 | ||
date_str = today.strftime("%Y年%m月%d日") | ||
# 将日期和星期信息发送给用户 | ||
dispatcher.utter_message(text=f"今天是 {date_str} {week_day_zh}。") | ||
|
||
|
||
class ActionAskTime(Action): | ||
def name(self): | ||
return "action_ask_time" | ||
|
||
async def run(self, dispatcher, tracker, domain): | ||
# 获取当前时间 | ||
now = datetime.now() | ||
# 将时间格式化为字符串 | ||
time_str = now.strftime("%H:%M") | ||
# 将时间信息发送给用户 | ||
dispatcher.utter_message(text=f"现在是 {time_str}。") | ||
|
||
def parse_datetime(datetime_str): | ||
try: | ||
datetime_obj = parse(datetime_str, fuzzy=True) | ||
if "周" in datetime_str: # 处理相对日期,如 "周五" | ||
today = datetime.now().date() | ||
weekday_diff = (datetime_obj.weekday() - today.weekday()) % 7 | ||
datetime_obj = today + relativedelta(days=weekday_diff) | ||
return datetime_obj | ||
except ValueError: | ||
print("无法解析日期和时间") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
recipe: default.v1 | ||
assistant_id: 20230416-203150-proud-texture | ||
language: zh | ||
pipeline: | ||
# # No configuration for the NLU pipeline was provided. The following default pipeline was used to train your model. | ||
# # If you'd like to customize it, uncomment and adjust the pipeline. | ||
# # See https://rasa.com/docs/rasa/tuning-your-model for more information. | ||
- name: JiebaTokenizer | ||
- name: RegexFeaturizer | ||
- name: LexicalSyntacticFeaturizer | ||
- name: CountVectorsFeaturizer | ||
- name: CountVectorsFeaturizer | ||
analyzer: char_wb | ||
min_ngram: 1 | ||
max_ngram: 4 | ||
- name: DIETClassifier | ||
epochs: 100 | ||
constrain_similarities: true | ||
- name: EntitySynonymMapper | ||
- name: ResponseSelector | ||
epochs: 100 | ||
constrain_similarities: true | ||
- name: FallbackClassifier | ||
threshold: 0.3 | ||
ambiguity_threshold: 0.1 | ||
policies: | ||
# # No configuration for policies was provided. The following default policies were used to train your model. | ||
# # If you'd like to customize them, uncomment and adjust the policies. | ||
# # See https://rasa.com/docs/rasa/policies for more information. | ||
- name: MemoizationPolicy | ||
- name: RulePolicy | ||
- name: UnexpecTEDIntentPolicy | ||
max_history: 5 | ||
epochs: 100 | ||
- name: TEDPolicy | ||
max_history: 5 | ||
epochs: 100 | ||
constrain_similarities: true | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# This file contains the credentials for the voice & chat platforms | ||
# which your bot is using. | ||
# https://rasa.com/docs/rasa/messaging-and-voice-channels | ||
|
||
rest: | ||
# # you don't need to provide anything here - this channel doesn't | ||
# # require any credentials | ||
|
||
|
||
#facebook: | ||
# verify: "<verify>" | ||
# secret: "<your secret>" | ||
# page-access-token: "<your page access token>" | ||
|
||
#slack: | ||
# slack_token: "<your slack token>" | ||
# slack_channel: "<the slack channel>" | ||
# slack_signing_secret: "<your slack signing secret>" | ||
|
||
#socketio: | ||
# user_message_evt: <event name for user message> | ||
# bot_message_evt: <event name for bot messages> | ||
# session_persistence: <true/false> | ||
|
||
#mattermost: | ||
# url: "https://<mattermost instance>/api/v4" | ||
# token: "<bot token>" | ||
# webhook_url: "<callback URL>" | ||
|
||
# This entry is needed if you are using Rasa Enterprise. The entry represents credentials | ||
# for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers. | ||
rasa: | ||
url: "http://localhost:5002/api" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
version: "3.1" | ||
|
||
nlu: | ||
- intent: greet | ||
examples: | | ||
- 你好 | ||
- hello | ||
- intent: goodbye | ||
examples: | | ||
- 再见 | ||
- 不聊了 | ||
- 回头说 | ||
- 先这样 | ||
- intent: ask_time | ||
examples: | | ||
- 现在几点钟了? | ||
- 请告诉我现在的时间 | ||
- 你知道现在是几点吗? | ||
- intent: ask_date | ||
examples: | | ||
- 今天是几号? | ||
- 今天星期几? | ||
- intent: out_of_scope | ||
examples: | | ||
- 今天天气真好 | ||
- 我想去公园走走 | ||
- 我需要去上玩吗 | ||
- 其实小明也是一个好人 | ||
- 如何计算圆周率呢 | ||
- 1加1等于几 | ||
- 冲咖啡要什么水温 | ||
- 广州有什么地方玩 | ||
- 广州有什么东西吃 | ||
- 荔枝湾在哪里 | ||
- 我现在是不是该睡觉呢 | ||
- 番禺区 | ||
- 广州市 | ||
- 你知道广州吗 | ||
- 还有别的推荐吗 | ||
- 为什么 | ||
- 怎么办 | ||
- 怎么去 | ||
- 还有别的吗 | ||
- 你的速度可以快一点吗 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
version: "3.1" | ||
|
||
rules: | ||
|
||
- rule: 闲聊的回应 | ||
steps: | ||
- intent: out_of_scope | ||
- action: action_gpt_response | ||
|
||
- rule: Say goodbye | ||
steps: | ||
- intent: goodbye | ||
- action: utter_goodbye | ||
|
||
- rule: Say hello | ||
steps: | ||
- intent: greet | ||
- action: utter_greet | ||
|
||
- rule: 用户询问日期 | ||
steps: | ||
- intent: ask_date | ||
- action: action_ask_date | ||
|
||
- rule: 用户询问时间 | ||
steps: | ||
- intent: ask_time | ||
- action: action_ask_time | ||
|
||
|
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
version: "3.1" | ||
|
||
intents: | ||
- greet | ||
- goodbye | ||
- ask_time | ||
- ask_date | ||
- out_of_scope | ||
|
||
responses: | ||
utter_greet: | ||
- text: "你好,有什么帮到你呢?" | ||
|
||
utter_goodbye: | ||
- text: "那我先离开了,一会有事叫我" | ||
- text: "先不打扰你了,你可以随时唤醒我" | ||
|
||
session_config: | ||
session_expiration_time: 60 | ||
carry_over_slots_to_new_session: true | ||
|
||
actions: | ||
- action_ask_time | ||
- action_ask_date | ||
- action_gpt_response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
action_endpoint: | ||
url: "http://localhost:5055/webhook" |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
import json | ||
import requests | ||
|
||
def question(cont): | ||
url="http://localhost:5005/webhooks/rest/webhook" | ||
req = json.dumps({"sender": "user", "message": cont}) | ||
headers = {'content-type': 'application/json'} | ||
r = requests.post(url, headers=headers, data=req) | ||
a = json.loads(r.text)[0].get('text') | ||
return a |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
1、安装启动chatglm(github) | ||
2、安装rasa 包:rasa、rasa-sdk | ||
3、进入test/rasa目录启动actions:rasa run actions | ||
4、启动rasa api server:rasa run --enable-api -p 5006 | ||
5、fay_core.py 引入nlp_rasa.py |
Oops, something went wrong.