Showing
4 changed files
with
74 additions
and
2 deletions
| @@ -26,6 +26,7 @@ embedding = [ | @@ -26,6 +26,7 @@ embedding = [ | ||
| 26 | ] | 26 | ] |
| 27 | football-replay-match = [ | 27 | football-replay-match = [ |
| 28 | "confluent_kafka==2.6.1", | 28 | "confluent_kafka==2.6.1", |
| 29 | + "langchain-openai>=1.1.15", | ||
| 29 | ] | 30 | ] |
| 30 | # task-server 专用依赖 | 31 | # task-server 专用依赖 |
| 31 | task = [ | 32 | task = [ |
| 1 | -def replay_match_event(data): | ||
| 2 | - pass | ||
| 1 | +import logging | ||
| 2 | +from aabd.base.enhance_dict import value_or_default | ||
| 3 | + | ||
| 4 | +logger = logging.getLogger(__name__) | ||
| 5 | + | ||
| 6 | + | ||
| 7 | +class FootballReplayMatch: | ||
| 8 | + def __init__(self, settings): | ||
| 9 | + self.settings = settings | ||
| 10 | + self.match_by_time_threshold = value_or_default(settings.match_by_time_threshold, 30) * 1000 | ||
| 11 | + | ||
| 12 | + def match_by_time(self, replay, events): | ||
| 13 | + start_utc = replay.get('start_utc') | ||
| 14 | + | ||
| 15 | + events = [(start_utc - e.get('event_utc'), e) for e in events] | ||
| 16 | + events.sort(key=lambda x: abs(x[0])) | ||
| 17 | + time_diff, event = events[0] | ||
| 18 | + if time_diff < self.match_by_time_threshold: | ||
| 19 | + return event | ||
| 20 | + else: | ||
| 21 | + return None | ||
| 22 | + | ||
| 23 | + def det_goal_replay(self, replay): | ||
| 24 | + pass | ||
| 25 | + | ||
| 26 | + def match_by_llm(self, replay, events): | ||
| 27 | + pass | ||
| 28 | + | ||
| 29 | + def replay_match_event(self, data): | ||
| 30 | + """ | ||
| 31 | + | ||
| 32 | + :param data: | ||
| 33 | + { | ||
| 34 | + id:xx, | ||
| 35 | + match_id: 比赛id, | ||
| 36 | + replay:{ | ||
| 37 | + id:, | ||
| 38 | + url:, | ||
| 39 | + start_utc:, | ||
| 40 | + end_utc:, | ||
| 41 | + } | ||
| 42 | + events:[{ | ||
| 43 | + id:xx, | ||
| 44 | + type:xx, | ||
| 45 | + url:xx, | ||
| 46 | + event_utc, | ||
| 47 | + }] | ||
| 48 | + } | ||
| 49 | + :return: | ||
| 50 | + """ | ||
| 51 | + | ||
| 52 | + # 该时间段附近是否有进球事件 | ||
| 53 | + replay_info = data['replay'] | ||
| 54 | + live_events = data['events'] | ||
| 55 | + goal_live_events = [e for e in live_events if str(e.get('type', '')) == '1'] | ||
| 56 | + | ||
| 57 | + matched_event = self.match_by_time(replay_info, goal_live_events) | ||
| 58 | + | ||
| 59 | + if matched_event is None: | ||
| 60 | + replay_det_info = self.det_goal_replay(replay_info) | ||
| 61 | + replay_event_name = replay_det_info.get('event_name', '') | ||
| 62 | + if replay_event_name == '进球': | ||
| 63 | + matched_event = self.match_by_llm(replay_info, goal_live_events) | ||
| 64 | + if matched_event is None: | ||
| 65 | + logger.info(f'LLM认为是进球但是未能找到匹配的事件') | ||
| 66 | + else: | ||
| 67 | + logger.info('LLM找到进球的事件') | ||
| 68 | + else: | ||
| 69 | + logger.info(f'LLM判断不是进球,无需匹配') | ||
| 70 | + else: | ||
| 71 | + logger.info(f'通过时间找到匹配的事件') |
This diff could not be displayed because it is too large.
-
Please register or login to post a comment