【Datawhale AI夏令營】科大訊飛AI大賽(大模型技術)/夏令營:讓AI理解列車排期表(Task3)

我沒招了jpg

import pandas as pd
import requests
import re
import json
from tqdm import tqdm
from datetime import datetime, timedeltadef calculate_stop_duration(arrival_time_str, departure_time_str):"""計算列車停留時長,處理跨天和異常情況"""try:if arrival_time_str == '無數據' or departure_time_str == '無數據':return "無數據"# 統一時間格式(處理"23:41"和"23:41:00"混用情況)arrival_time_str = arrival_time_str if len(arrival_time_str.split(':')) == 3 else arrival_time_str + ':00'departure_time_str = departure_time_str if len(departure_time_str.split(':')) == 3 else departure_time_str + ':00'arrival_time = datetime.strptime(arrival_time_str, '%H:%M:%S')departure_time = datetime.strptime(departure_time_str, '%H:%M:%S')# 處理跨天情況(如23:40到達,00:12離開)if departure_time < arrival_time:departure_time += timedelta(days=1)duration = departure_time - arrival_timehours, remainder = divmod(duration.seconds, 3600)minutes = remainder // 60# 優化輸出格式(小于1小時只顯示分鐘)if hours == 0:return f"{minutes}分鐘"else:return f"{hours}小時{minutes}分鐘"except Exception as e:return f"計算錯誤: {str(e)}"def call_llm(content: str):"""調用大模型API(與原baseline相同)"""url = "https://api.siliconflow.cn/v1/chat/completions"payload = {"model": "Qwen/Qwen3-8B","messages": [{"role": "user", "content": content}]}headers = {"Authorization": "Bearer sk-xxx","Content-Type": "application/json"}resp = requests.request("POST", url, json=payload, headers=headers).json()content = resp['choices'][0]['message']['content'].split('</think>')[-1]pattern = re.compile(r'^```json\s*([\s\S]*?)```$', re.IGNORECASE)match = pattern.match(content.strip())if match:return json.loads(match.group(1).strip())return contentdef create_question_list(row: dict):"""生成多樣化問題列表(包含簡單查詢和時間推理)"""question_list = []train_number = row["車次"]departure_station = row["始發站"]# 1. 基礎信息查詢question_list.append(f'{train_number}號車次應該從哪個檢票口檢票?')question_list.append(f'{train_number}號車次應該從哪個站臺上車?')question_list.append(f'{train_number}次列車的終到站是哪里?')question_list.append(f'{train_number}次列車的候車區域是哪里?')# 2. 時間推理問題if row['到點'] != '無數據' and row['開點'] != '無數據':# 停留時長question_list.append(f'{train_number}次列車在{departure_station}站的停留時長是多久?')# 發車時間查詢(驗證模型能否處理時間格式)question_list.append(f'{train_number}次列車什么時候從{departure_station}站發車?')# 3. 比較類問題(需要多行數據,可在后續擴展)# question_list.append(f'從{departure_station}出發的車次中,哪趟停留時間最長?')return question_list# 主流程
if __name__ == "__main__":# 1. 讀取數據data = pd.read_excel('data/info_table.xlsx').fillna('無數據')# 2. 預處理時間數據data['停留時長'] = data.apply(lambda row: calculate_stop_duration(str(row['到點']), str(row['開點'])), axis=1)# 3. 生成提示詞模板prompt = '''你是專業的列車乘務員,請嚴格根據以下列車信息回答問題:
# 列車信息
{}# 用戶問題列表
{}注意:
1. 所有時間計算已考慮跨天情況
2. 對于"無數據"的問題,如實回答"暫無該信息"
'''output_format = '''# 輸出格式
```json
[{"q": "問題文本","a": "答案文本(直接引用或計算得出)"
}]
```'''# 4. 生成訓練數據train_data = []error_log = []for idx, row in tqdm(data.iterrows(), total=len(data)):try:row_dict = row.to_dict()questions = create_question_list(row_dict)# 調用LLM生成答案(使用原始數據+計算后的停留時長)llm_response = call_llm(prompt.format(row_dict, questions) + output_format)if isinstance(llm_response, list):train_data.extend([{"instruction": qa["q"], "output": qa["a"]} for qa in llm_response])else:error_log.append({"row": row_dict, "error": "LLM返回格式錯誤"})except Exception as e:error_log.append({"row": row_dict, "error": str(e)})# 5. 保存結果with open('train_data_v2.json', 'w', encoding='utf-8') as f:json.dump(train_data, f, ensure_ascii=False, indent=2)if error_log:with open('error_log.json', 'w', encoding='utf-8') as f:json.dump(error_log, f, ensure_ascii=False, indent=2)print(f"生成完成!有效數據{len(train_data)}條,錯誤{len(error_log)}條")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91312.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91312.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91312.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前后端】node mock.js+json-server

JSON-Server 一個在前端本地運行&#xff0c;可以存儲json數據的server。前端開發可以模擬服務端接口數據&#xff0c;在本地搭建一個JSON服務&#xff0c;自己產生測試數據。 使用npm全局安裝json-server &#xff1a;npm install -g json-server可以通過查看版本號&#xff0…

疏老師-python訓練營-Day30模塊和庫的導入

浙大疏錦行 知識點回顧&#xff1a; 導入官方庫的三種手段導入自定義庫/模塊的方式導入庫/模塊的核心邏輯&#xff1a;找到根目錄&#xff08;python解釋器的目錄和終端的目錄不一致&#xff09; 作業&#xff1a;自己新建幾個不同路徑文件嘗試下如何導入 一.學習知識點 DAY30 …

神經網絡知識討論

AI 核心任務與數據類型&#xff1a;特征提取核心&#xff1a;AI 的核心是從原始輸入數據中提取特征&#xff0c;CV 是將圖像數據轉換為計算機可識別的特征&#xff0c;NLP 是將文本數據轉換為特征&#xff0c;數據挖掘是將結構化數據轉換為特征。數據類型特點&#xff1a;圖像數…

kotlin類型可為空,進行空安全的區別

定義一個可為空的變量b(String?),默認沒有&#xff1f;是不可以為空的 var b: String? "Kotlin" b null print(b) // 輸出 null默認不可為空 var a: String "Kotlin" a null // 編譯器報錯&#xff0c;null 不能被賦給不為空的變量空安全調用&#x…

Mysql事務基礎

事務是一個不可分割的數據庫操作序列&#xff0c;也是數據庫并發控制的基本單位&#xff0c;其執行的結果必須使數據庫從一種一致性狀態變到另一種一致性狀態。事務是邏輯上的一組操作&#xff0c;要么都執行&#xff0c;要么都不執行 事務的特點 A&#xff08;Atomicity&#…

FastAPI入門:安裝、Pydantic、并發和并行

本系列參考FastAPI官方文檔&#xff1a;https://fastapi.tiangolo.com/zh/python-types/安裝 使用pip安裝&#xff1a; pip install fastapi此外還需要 ASGI 服務器&#xff0c;生產環境可以使用 Uvicorn 或者 Hypercorn。 ASGI服務器&#xff1a;異步服務網關接口&#xff0c;…

歡樂的周末 - 華為OD統一考試(JavaScript 題解)

題目描述 小華和小為是很要好的朋友,他們約定周末一起吃飯。 通過手機交流,他們在地圖上選擇了多個聚餐地點(由于自然地形等原因,部分聚餐地點不可達)。 求小華和小為都能到達的聚餐地點有多少個? 輸入描述 第一行輸入m和n,m代表地圖的長度,n代表地圖的寬度 第二行…

算法競賽階段二-數據結構(38)數據結構動態鏈表list

動態鏈表&#xff08;List&#xff09;的基本概念動態鏈表是一種線性數據結構&#xff0c;通過節點間的指針連接實現動態內存分配。與數組不同&#xff0c;鏈表的大小可隨需增減&#xff0c;插入和刪除操作的時間復雜度為 O(1)&#xff08;已知位置時&#xff09;&#xff0c;但…

Qt 移動應用推送通知實現

推送通知是移動應用提升用戶粘性的核心功能——無論是即時消息提醒、活動推送還是狀態更新&#xff0c;都需要通過推送功能觸達用戶。Qt雖未直接提供跨平臺推送API&#xff0c;但可通過集成原生服務&#xff08;如Firebase Cloud Messaging、Apple Push Notification service&a…

Word和WPS文字如何制作分欄試卷?想分幾欄分幾欄

使用Word和WPS文字制作試卷的時候&#xff0c;通常會使用A3大小的紙張&#xff0c;橫向布局。但是如果題目的題干、問題、選項文字太少&#xff0c;會帶來試卷上有較大的空白&#xff0c;既不美觀又浪費紙&#xff0c;解決辦法就是將試卷分欄&#xff0c;根據需要分成多欄&…

ubuntu 安裝vmware tools

VMware Workstation菜單欄->虛擬機->安裝VMware Tools 打開ubuntu內加載的光盤&#xff0c;復制VMwareTools-10.3.26-22085142.tar.gz&#xff0c;解壓出來 sudo ./vmware-install.pl #執行安裝軟件 VMware Tools 安裝完成以后重啟Ubuntu&#xff0c;重啟以后就可以直…

【實時Linux實戰系列】在實時應用中進行負載均衡

在實時應用中&#xff0c;負載均衡是確保系統能夠高效處理多個任務的關鍵技術。通過合理調度任務到不同的處理單元&#xff0c;負載均衡可以提高系統的整體性能&#xff0c;減少延遲&#xff0c;并提高資源利用率。在實時 Linux 系統中&#xff0c;負載均衡尤為重要&#xff0c…

bash的特性-命令和文件自動補全

一、前言在 Linux Shell 編程和日常使用中&#xff0c;Bash 的自動補全功能 是一個非常強大且實用的特性。它不僅可以節省輸入時間&#xff0c;還能有效減少拼寫錯誤&#xff0c;提升命令執行效率。本文將帶你全面了解 Bash 的自動補全機制&#xff0c;包括&#xff1a;? 命令…

Ubuntu系統 系統盤和數據盤擴容具體操作

Linux磁盤配置和需求&#xff0c;以下是完整的操作方案&#xff1a; 可以看到系統盤vda3 還有48GB 數據盤則是還有512GB沒有掛載使用&#xff0c;下面是完成數據擴容的具體操作 一、完成系統盤擴容&#xff08;使用98GB空間&#xff09; # 1. 擴展邏輯卷&#xff08;LVM架構&am…

從0到1學Pandas(七):Pandas 在機器學習中的應用

目錄一、數據預處理1.1 特征提取1.2 數據標準化與歸一化1.3 特征編碼二、特征工程2.1 特征選擇?2.2 特征組合與衍生?2.3 缺失值處理策略?三、模型訓練與評估3.1 數據集劃分3.2 模型訓練與預測3.3 模型評估與調優四、Pipeline 構建4.1 自動化工作流4.2 模型部署與應用4.3 模型…

LangChain和LangGraph 里面的 `create_react_agent`有什么不同

這兩個函數雖然名稱相同&#xff0c;但來自不同的庫&#xff08;LangChain 和 LangGraph&#xff09;&#xff0c;它們在實現和使用上有一些關鍵區別&#xff1a; 主要區別特性LangChain 的 create_react_agentLangGraph 的 create_react_agent所屬庫LangChainLangGraph設計目的…

PostgreSQL 與 Oracle 數據庫字段類型的詳細對比

一、數值類型對比數據類型OraclePostgreSQL說明整數NUMBER(p,0)SMALLINT/INT/BIGINTOracle 統一用 NUMBER&#xff0c;PG 區分精度范圍浮點數BINARY_FLOATREAL單精度浮點雙精度浮點BINARY_DOUBLEDOUBLE PRECISION雙精度浮點高精度小數NUMBER(p,s)NUMERIC(p,s)精確數值存儲自增序…

JVM 性能調優實戰:讓系統性能 “飛” 起來的核心策略

在 Java 應用的生命周期中&#xff0c;性能問題如同隱藏的 “暗礁”—— 初期可能不顯眼&#xff0c;但隨著用戶量增長和業務復雜度提升&#xff0c;微小的性能損耗會被無限放大&#xff0c;最終導致系統響應遲緩、頻繁卡頓甚至崩潰。JVM 性能調優的目標&#xff0c;就是通過優…

Android Handler 完全指南

在 Android 開發中&#xff0c;Handler 是線程通信的核心工具 —— 當你在子線程下載圖片后需要更新 UI&#xff0c;當你在 TCP 連接中收到數據需要通知界面&#xff0c;當你需要延遲執行某個任務時&#xff0c;都會用到 Handler。這個看似簡單的類&#xff0c;卻蘊含著 Androi…

梳理Ego-Planner模式下5通道、6通道與無人機模式的關系

Copilot said: 你需要梳理Ego-Planner模式下5通道、6通道與無人機模式的關系&#xff0c;以及軌跡跟隨、緊急情況和人工接管的流程。下面結合你的描述和三張圖片&#xff0c;對核心邏輯進行總結和整理&#xff1a; --- ## 一、狀態組合與對應模式&#xff08;見圖1&#xff09;…