基於langchain和文心一言的檢索增強生成(RAG)初級實驗

一、什麼是RAG?

RAG的架構如圖中所示,簡單來講,RAG就是通過檢索獲取相關的知識並將其融入Prompt,讓大模型能夠參考相應的知識從而給出合理回答。因此,可以將RAG的核心理解爲“檢索+生成”,前者主要是利用向量數據庫的高效存儲和檢索能力,召回目標知識;後者則是利用大模型和Prompt工程,將召回的知識合理利用,生成目標答案。

dcb2ea20-4b8b-4514-9885-b98fa3fe4166

RAG架構

完整的RAG應用流程主要包含兩個階段:

  • 數據準備階段:數據提取——>文本分割——>向量化(embedding)——>數據入庫
  • 應用階段:用戶提問——>數據檢索(召回)——>注入Prompt——>LLM生成答案

技術細節和注意事項:

1、數據準備階段

數據準備一般是一個離線的過程,主要是將私域數據向量化後構建索引並存入數據庫的過程。主要包括:數據提取、文本分割、向量化、數據入庫等環節。

869eeab7-cb4e-4de1-afe6-a8800263b8cf

數據準備

  • 數據提取
    • 數據加載:包括多格式數據加載、不同數據源獲取等,根據數據自身情況,將數據處理爲同一個範式。
    • 數據處理:包括數據過濾、壓縮、格式化等。
    • 元數據獲取:提取數據中關鍵信息,例如文件名、Title、時間等 。
  • 文本分割
    文本分割主要考慮兩個因素:1)embedding模型的Tokens限制情況;2)語義完整性對整體的檢索效果的影響。一些常見的文本分割方式如下:
    • 句分割:以”句”的粒度進行切分,保留一個句子的完整語義。常見切分符包括:句號、感嘆號、問號、換行符等。
    • 固定長度分割:根據embedding模型的token長度限制,將文本分割爲固定長度(例如256/512個tokens),這種切分方式會損失很多語義信息,一般通過在頭尾增加一定冗餘量來緩解。
  • 向量化(embedding)

向量化是一個將文本數據轉化爲向量矩陣的過程,該過程會直接影響到後續檢索的效果。目前常見的embedding模型如表中所示,這些embedding模型基本能滿足大部分需求,但對於特殊場景(例如涉及一些罕見專有詞或字等)或者想進一步優化效果,則可以選擇開源Embedding模型微調或直接訓練適合自己場景的Embedding模型。

模型名稱
描述
獲取地址

ChatGPT-Embedding
ChatGPT-Embedding由OpenAI公司提供,以接口形式調用。
https://platform.openai.com/docs/guides/embeddings/what-are-embeddings

ERNIE-Embedding V1
ERNIE-Embedding V1由百度公司提供,依賴於文心大模型能力,以接口形式調用。
https://cloud.baidu.com/doc/WENXINWORKSHOP/s/alj562vvu

M3E
M3E是一款功能強大的開源Embedding模型,包含m3e-small、m3e-base、m3e-large等多個版本,支持微調和本地部署。
https://huggingface.co/moka-ai/m3e-base

BGE
BGE由北京智源人工智能研究院發佈,同樣是一款功能強大的開源Embedding模型,包含了支持中文和英文的多個版本,同樣支持微調和本地部署。
https://huggingface.co/BAAI/bge-base-en-v1.5

  • 數據入庫:

數據向量化後構建索引,並寫入數據庫的過程可以概述爲數據入庫過程,適用於RAG場景的數據庫包括:FAISS、Chromadb、ES、milvus等。一般可以根據業務場景、硬件、性能需求等多因素綜合考慮,選擇合適的數據庫。

2、應用階段:

在應用階段,我們根據用戶的提問,通過高效的檢索方法,召回與提問最相關的知識,並融入Prompt;大模型參考當前提問和相關知識,生成相應的答案。關鍵環節包括:數據檢索、注入Prompt等。

d6d68464-cef1-4dfe-940b-6f80e16979d8

數據檢索

  • 數據檢索

常見的數據檢索方法包括:相似性檢索、全文檢索等,根據檢索效果,一般可以選擇多種檢索方式融合,提升召回率。

    • 相似性檢索:即計算查詢向量與所有存儲向量的相似性得分,返回得分高的記錄。常見的相似性計算方法包括:餘弦相似性、歐氏距離、曼哈頓距離等。
    • 全文檢索:全文檢索是一種比較經典的檢索方式,在數據存入時,通過關鍵詞構建倒排索引;在檢索時,通過關鍵詞進行全文檢索,找到對應的記錄。
  • 注入Prompt

d123f625-efac-4259-bae3-55c3506fccee

LLM生成

Prompt作爲大模型的直接輸入,是影響模型輸出準確率的關鍵因素之一。在RAG場景中,Prompt一般包括任務描述、背景知識(檢索得到)、任務指令(一般是用戶提問)等,根據任務場景和大模型性能,也可以在Prompt中適當加入其他指令優化大模型的輸出。一個簡單知識問答場景的Prompt如下所示:

 

【任務描述】
假如你是一個專業的客服機器人,請參考【背景知識】,回
【背景知識】
{content} // 數據檢索得到的相關文本
【問題】
石頭掃地機器人P10的續航時間是多久?

Prompt的設計只有方法、沒有語法,比較依賴於個人經驗,在實際應用過程中,往往需要根據大模型的實際輸出進行鍼對性的Prompt調優。

二、跑通一個例子

在環境已經安裝、embeded模型和文心正確部署的情況下,編寫代碼。這裏待處理的對象是小學課文《觀潮》

錢塘江大潮,自古以來被稱爲天下奇觀。

農曆八月十八是一年中傳統的觀潮日。這一天早上,我們來到了海寧市的鹽官鎮,據說這裏是觀潮最好的地方。我們隨着觀潮的人羣,登上了海塘大堤。寬闊的錢塘江橫臥在眼前。江面很平靜,越往東越寬,在雨後的陽光下,籠罩着一層濛濛的薄霧。鎮海古塔、中山亭和觀潮臺屹立在江邊。遠處,幾座小山在雲霧中若隱若現。江潮還沒有來,海塘大堤上早已人山人海。大家昂首東望,等着,盼着。

午後一點左右,從遠處傳來隆隆的響聲,好像悶雷滾動。頓時人聲鼎沸,有人告訴我們,潮來了!我們踮着腳往東望去,江面還是風平浪靜,看不出有什麼變化。過了一會兒,響聲越來越大,只見東邊水天相接的地方出現了一條白線,人羣又沸騰起來。

那條白線很快地向我們移來,逐漸拉長,變粗,橫貫江面。再近些,只見白浪翻滾,形成一堵兩丈多高的水牆。浪潮越來越近,猶如千萬匹白色戰馬齊頭並進,浩浩蕩蕩地飛奔而來;那聲音如同山崩地裂,好像大地都被震得顫動起來。

霎時,潮頭奔騰西去,可是餘波還在漫天卷地般湧來,江面上依舊風號浪吼。過了好久,錢塘江才恢復了平靜。看看堤下,江水已經漲了兩丈來高了。

 

from langchain import LLMChain
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceBgeEmbeddings
from langchain.vectorstores import Chroma
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
from langchain.prompts.chat import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain_wenxin.llms import Wenxin
#讀取領域信息
loader = TextLoader("./knowledge/觀潮.txt")
documents = loader.load()
#文本分割
text_splitter = CharacterTextSplitter(chunk_size=128, chunk_overlap=0)
documents = text_splitter.split_documents(documents)
# 向量化 embedding model: m3e-base
model_name = "./m3e-base"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
embedding = HuggingFaceBgeEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs,
                query_instruction="爲文本生成向量表示用於文本檢索"
            )
# load data to Chroma db
db = Chroma.from_documents(documents, embedding)
# LLM選型
llm = Wenxin(model="ernie-bot", baidu_api_key= baidu_api_key, baidu_secret_key= baidu_secret_key)

retriever = db.as_retriever()
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
qa = ConversationalRetrievalChain.from_llm(llm, retriever, memory=memory)
ret = qa({"question": "什麼時間去哪裏觀潮比較合適?"})
print(ret)

  

返回結果:

{'question': '什麼時間去哪裏觀潮比較合適?',

'chat_history': [HumanMessage(content='什麼時間去哪裏觀潮比較合適?'), AIMessage(content='根據原文信息得出,農曆八月十八去海寧市的鹽官鎮觀潮比較合適。')], 'answer': '根據原文信息得出,農曆八月十八去海寧市的鹽官鎮觀潮比較合適。'}

再提問:

{'question': '錢塘江大潮分爲那幾個過程?',

'chat_history': [HumanMessage(content='錢塘江大潮分爲那幾個過程?'), AIMessage(content='錢塘江大潮分爲三個過程:

1. 遠處傳來悶雷滾動的聲音,人羣沸騰,但江面依舊平靜;

2. 東邊水天相接的地方出現一條白線,白線逐漸拉長、變粗、橫貫江面,形成一堵兩丈多高的水牆,浩浩蕩蕩地飛奔而來;

3. 潮頭奔騰西去,餘波湧來,江面上依舊風號浪吼,過了好久,錢塘江才恢復了平靜。')],

'answer': '錢塘江大潮分爲三個過程:\n1. 遠處傳來悶雷滾動的聲音,人羣沸騰,但江面依舊平靜;\n2. 東邊水天相接的地方出現一條白線,白線逐漸拉長、變粗、橫貫江面,形成一堵兩丈多高的水牆,浩浩蕩蕩地飛奔而來;\n3. 潮頭奔騰西去,餘波湧來,江面上依舊風號浪吼,過了好久,錢塘江才恢復了平靜。'}

這裏的對原文的理解和解析,還是很到位的。

三、對民法典進行分析

法典是規範性文件,但是一千多條很專業,如果能夠使用RAG來加快理解,應該是有幫助的:

'question': '處理民事糾紛應該注意哪些要點?'

'answer': '處理民事糾紛應該注意以下要點:

1. 當事人的姓名或者名稱和住所。

2. 標的。

3. 數量。

4. 質量。

5. 價款或者報酬。

6. 履行期限、地點和方式。

7. 違約責任。

8. 解決爭議的方法。

9. 內容與公序良俗的關聯性。

10. 受害人名譽受貶損的可能性。

11. 覈實能力和核實成本。

'question': '簽訂合同的時候需要注意哪些?'

AIMessage(content='在簽訂合同時,應該注意以下方面:

1. 確保合同內容具體確定,包括雙方的權利和義務、交易條件等。

2. 如果採用格式條款訂立合同,提供格式條款的一方應當遵循公平原則確定當事人之間的權利和義務,並採取合理的方式提示對方注意免除或者減輕其責任等與對方有重大利害關係的條款,按照對方的要求,對該條款予以說明。如果提供格式條款的一方未履行提示或者說明義務,致使對方沒有注意或者理解與其有重大利害關係的條款的,對方可以主張該條款不成爲合同的內容。

3. 合同成立地點:採用數據電文形式訂立合同的,收件人的主營業地爲合同成立的地點;沒有主營業地的,其住所地爲合同成立的地點。當事人另有約定的,按照其約定。

4. 合同組成部分:與履行合同有關的技術背景資料、可行性論證和技術評價報告、項目任務書和計劃書、技術標準、技術規範、原始設計和工藝文件,以及其他技術文檔,按照當事人的約定可以作爲合同的組成部分。')],

question='法人和自然人有哪些區別?'),

AIMessage(content='法人和自然人的區別主要有以下幾點:

1. 法律地位:法人是一個組織,具有法律上的獨立人格,可以獨立享有權利和承擔義務。而自然人是指有生命的個人,是權利和義務的主體。

2. 成立條件和程序:法人必須依法成立,具備相應的條件和程序,如名稱、組織機構、住所、財產或經費等。而自然人無需經過任何法定程序即可成爲權利主體。

3. 民事權利和義務:法人和自然人在民事權利和義務方面有所不同。法人主要享有名稱權、名譽權和榮譽權等權利,而自然人則享有生命權、身體權、健康權、姓名權、肖像權、名譽權、榮譽權、隱私權、婚姻自主權等權利。此外,法人的民事權利能力和民事行爲能力從法人成立時產生,到法人終止時消滅,而自然人的民事權利能力和民事行爲能力則伴隨其一生。\n4. 財產責任:法人以其全部財產獨立承擔民事責任,而自然人的財產責任則根據具體情況而定。')],

四、對新聞進行分析

鑑於大模型的知識庫中可能存在歷史的信息,所以用最新的新聞來進行以上流程。這裏我特地在提問的時候寫了錯別字,應該被文心看出來了。

{'question': '如何評價此次恐怖注意襲擊?', 'chat_history': [HumanMessage(content='如何評價此次恐怖注意襲擊?'),

AIMessage(content='此次恐怖襲擊是一起非常嚴重的暴力事件,造成了大量的人員傷亡和財產損失。這種行爲違反了國際法和人道主義原則,是絕對不能容忍的。

從國際社會的反應來看,歐盟、土耳其等國家和地區都對這次襲擊表示強烈譴責,並表達了對遇難者家屬的慰問和對傷者的祝福。這種團結和同情的態度表明,國際社會對於恐怖主義行爲的零容忍態度是十分明確的。

對於此次襲擊的影響,它不僅給伊朗人民帶來了巨大的悲痛和損失,也給中東地區的局勢帶來了更多的不穩定和不確定性。這樣的暴力事件往往會引發更多的仇恨和報復,進一步加劇地區的緊張局勢。

因此,對於國際社會來說,需要加強反恐合作,採取更加有效的措施來打擊恐怖主義勢力,維護世界和平與安全。同時,也需要加強對於恐怖主義根源的研究和分析,從源頭上解決恐怖主義問題。'

另可以看原文:

中國專家分析伊朗爆炸襲擊:手法“十分特殊”

【環球時報-環球網報道 記者 白雲怡 趙覺珵】當地時間1月3日,伊朗東南部城市克爾曼接連發生兩起爆炸事件。據伊朗媒體援引伊朗克爾曼省省長最新消息,爆炸造成84人遇難、284人受傷。值得注意的是,此次爆炸不僅正值巴以衝突爲地區動盪帶來升級風險,發生日期也是美國空襲伊拉克造成伊朗高級指揮官蘇萊曼尼身亡四週年,爆炸就發生在通往蘇萊曼尼墓地的路上。誰可能是這場發生在特殊時間與背景下的血腥事件的“製造者”?該事件又會爲本就不平靜的中東局勢造成哪些影響?

《環球時報》記者4日就此採訪多名中東事務專家。他們分析認爲,此次爆炸的實施手法相當特殊,既不是以色列、美國的慣常手法,也不像“伊斯蘭國”等極端勢力所爲,判斷誰是幕後肇事者爲時尚早。但在中東動盪局勢已有蔓延之勢的大背景下,類似此次連環爆炸案一樣的“黑天鵝”事件接二連三發生,勢必將刺激有關國家的安全神經,並將對地區局勢產生較大沖擊,使本已陷入緊張的地區關係更加脆弱敏感。

據伊朗國家電視臺報道,兩起爆炸發生時,位於克爾曼的蘇萊曼尼墓地附近正在舉行紀念活動,因此爆炸導致大量參與紀念活動的民衆傷亡。現場畫面顯示,驚慌的民衆慌忙逃離爆炸現場,鮮血淋漓的受害者躺在地上。據法新社報道,3日的爆炸事件是伊朗自1979年後發生的遇難人數最多的事件。

伊朗內政部長瓦希迪稱,3日的第一次爆炸發生在當地時間下午3時。20分鐘後,發生了第二次更致命的爆炸。本次連環爆炸中的死傷者大部分是在第二次爆炸中死亡或受傷。“兩個裝有炸彈的袋子在現場爆炸。”伊朗塔斯尼姆通訊社援引知情人士的話報道稱,“這次事件的肇事者……顯然是用遙控器引爆了炸彈。”

截至目前,尚未有組織或個人宣佈對此次事件負責。最初,伊朗媒體援引負責政治和安全的當地官員的話稱,目前尚不清楚“事件是由瓦斯爆炸還是恐怖襲擊引起的”。但伊朗媒體隨後稱,克爾曼省副省長拉赫曼·賈拉利認爲,“這是一起恐怖襲擊事件。”

上海外國語大學中東研究所助理研究員文少彪4日對《環球時報》分析認爲,此次爆炸時間和地點明顯系刻意挑選。2020年1月3日,蘇萊曼尼在伊拉克巴格達遭美軍空襲身亡,其墓地被認爲已成爲當地反美情緒的象徵性地點之一。在此地發動襲擊,會產生較大的政治聯想。

美聯社分析稱,伊朗有多個敵人可能是這次襲擊的幕後黑手,包括流亡組織、激進組織和國家行爲者。也有輿論分析認爲,從這次襲擊所表現出來的滲透能力上看,有可能是以色列所爲。

蘭州大學“一帶一路”研究中心特聘教授王晉4日對《環球時報》記者分析認爲,從目前披露的信息來看,此次爆炸事件的手法“十分特殊”。他解釋稱,從以往事件來看,以色列的襲擊目標通常針對伊朗的高層,尤其是與核設施相關的科研人員或行政人員,手法以暗殺爲主;而美國襲擊的目標主要是伊朗的政治軍事高層,行動主要發生在伊朗境外,避免和伊朗發生直接衝突;以“伊斯蘭國”爲代表的極端組織常發動針對平民的恐怖襲擊,但手段以自殺式襲擊爲主。此次克爾曼市的連環爆炸採用的是“遠程炸彈”,也不像是“伊斯蘭國”的手法。

“此次爆炸事件與幾個主要相關勢力的手法都不太像”,他分析認爲,這意味着判斷誰是幕後肇事者爲時尚早,是否和巴以局勢相關也尚難給出定論。但從結果來看,此次事件將必然使包括巴以局勢在內的地區局勢更加複雜、緊張。

爆炸案發生後,伊朗總統易卜拉欣·萊希發表聲明,他沒有明確指出誰是爆炸事件的責任方,但表示“參與這一恐怖罪行的肇事者和罪犯將很快被查明,並會爲他們的行爲受到懲罰” 。不過,一些伊朗官員已經將此次爆炸事件歸咎於美國和以色列,如伊朗“聖城旅”指揮官卡尼發表講話,指責以色列和美國代理人在克爾曼製造了恐怖爆炸事件。

據美國《國會山報》報道,美國國務院發言人馬修·米勒3日在新聞發佈會上稱,美國沒有參與伊朗爆炸事件,也“沒有理由相信以色列參與其中”。

克爾曼市的爆炸事件正值巴以衝突影響不斷外溢、中東地區多處陷入動盪之際,突發事件層出不窮:2023年12月25日,在敘利亞擔任軍事顧問的一名伊朗高級指揮官在以色列對敘首都大馬士革的空襲中喪生;今年1月2日,哈馬斯高級領導人薩利赫·阿魯裏在黎巴嫩首都貝魯特郊區的一次爆炸中喪生。美國有線電視新聞網(CNN)援引一名美國官員的話稱,這是由以色列實施的襲擊。

另一方面,紅海危機也在持續發酵,美國海軍近日擊沉3艘也門胡塞武裝小艇,而聲援巴勒斯坦的胡塞武裝則對以色列發起跨境襲擊,並利用臨近紅海水域的便利襲擊“關聯以色列”的商船,紅海局勢與巴以衝突形成聯動。

王晉對《環球時報》記者表示,克爾曼爆炸勢必將對伊朗的安全神經產生較大刺激,也將爲本就緊張的地區局勢帶來進一步衝擊。他分析稱,巴以衝突已有蔓延升級趨勢,更多方面的力量正在下場,此時“黑天鵝”事件的發生,將使地區國家之間、不同陣營之間的關係更加敏感、脆弱。

“克爾曼爆炸加上哈馬斯高級領導人的身亡,可能對地區局勢造成疊加效應。”法新社分析認爲,在以色列北部靠近黎巴嫩邊境的地區,很多居民都擔心未來將有更大規模的衝突,以至於許多人都隨身帶着武器。

文少彪分析認爲,此次事件後,伊朗或將加強其內部政治動員,有可能利用其地區代理人發動矛頭指向美國和以色列的“報復性行動”,包括支持黎巴嫩真主黨、也門胡塞武裝、伊拉克“人民動員力量”等組織繼續襲擾以色列。在此背景下,美國在敘利亞的軍事基地可能受到打擊,紅海危機也可能繼續加劇。

“和平解決本輪巴以衝突的希望看起來更加渺茫。”英國《衛報》評論稱,無論誰是此次爆炸事件的幕後黑手,顯然他都甘冒引發地區戰爭的風險。在當前的局勢下,各方發生誤判的可能性不斷升高。其中一個高度不穩定的因素是以色列內政:美國正在爲本輪巴以衝突尋找可能的外交解決方案,但當方案涉及加沙和黎巴嫩,以色列總理內塔尼亞胡就難以克服以國內政治壓力。

“這起連環爆炸,將進一步加劇更廣泛地區的緊張局勢。”卡塔爾半島電視臺稱,在中東地區緊張局勢升級幾天之後,“戰爭的烏雲”正在積聚。“現在這個地區什麼都可能發生。”

據媒體報道,爆炸發生後,聯合國、歐盟、俄羅斯、土耳其,以及阿拉伯國家紛紛對肇事者予以譴責。聯合國祕書長古特雷斯通過發言人發表聲明,強烈譴責3日發生在伊朗克爾曼市的襲擊事件。他向遇難者家屬,以及伊朗人民和政府表示深切慰問,並祝願傷者能夠早日康復。古特雷斯呼籲,必須追究襲擊實施者的責任。

歐盟則在一份官方聲明中表示:“歐盟以最強烈的措辭譴責今天的爆炸事件……這一恐怖行爲造成了令人震驚的平民傷亡。肇事者必須承擔責任。”歐盟外交與安全政策高級代表博雷利在與伊朗外長的通話中強烈譴責了這一恐怖主義行爲,並向遇難者家屬以及伊朗政府和人民表示哀悼,祝願傷者早日康復。

土耳其總統埃爾多安在X社交平臺表示,他就這一“令人髮指的恐怖襲擊”向“友好和兄弟”的伊朗人民表示哀悼。他寫道:“我們對伊朗克爾曼發生的令人髮指的恐怖襲擊深感悲痛。”

五、表格數據分析

隨機生成100條簡化版的列車時刻表信息。每條信息包括車次和出發時間。使用RAG進行問詢:

1. 車次:G12345,出發時間:08:00
2. 車次:D67890,出發時間:09:30
3. 車次:K12345,出發時間:10:00
4. 車次:T67890,出發時間:11:30
5. 車次:G12346,出發時間:12:00
6. 車次:D67891,出發時間:13:30
7. 車次:K12346,出發時間:14:00
8. 車次:T67891,出發時間:15:30
9. 車次:G12347,出發時間:16:00
10. 車次:D67892,出發時間:17:30
11. 車次:K12347,出發時間:18:00
12. 車次:T67892,出發時間:19:30
13. 車次:G12348,出發時間:20:00
14. 車次:D67893,出發時間:21:30
15. 車次:K12348,出發時間:22:00
16. 車次:T67893,出發時間:23:30
17. 車次:G12349,出發時間:00:00
18. 車次:D67894,出發時間:01:30
19. 車次:K12349,出發時間:02:00
20. 車次:T67894,出發時間:03:30
21. 車次:G12350,出發時間:04:00
22. 車次:D67895,出發時間:05:30
23. 車次:K12350,出發時間:06:00
24. 車次:T67895,出發時間:07:30
25. 車次:G12351,出發時間:08:00
26. 車次:D67896,出發時間:09:30
27. 車次:K12351,出發時間:10:00
28. 車次:T67896,出發時間:11:30
29. 車次:G12352,出發時間:12:00
30. 車次:D67897,出發時間:13:30
31. 車次:K12352,出發時間:14:00
32. 車次:T67897,出發時間:15:30
33. 車次:G12353,出發時間:16:00
34. 車次:D67898,出發時間:17:30
35. 車次:K12353,出發時間:18:00
36. 車次:T67898,出發時間:19:30
37. 車次:G12354,出發時間:20:00
38. 車次:D67899,出發時間:21:30
39. 車次:K12354,出發時間:22:00
40. 車次:T67899,出發時間:23:30
41. 車次:G12355,出發時間:00:00
42. 車次:D67900,出發時間:01:30
43. 車次:K12355,出發時間:02:00
44. 車次:T67900,出發時間:03:30
45. 車次:G12356,出發時間:04:00
46. 車次:D67901,出發時間:05:30
47. 車次:K12356,出發時間:06:00
48. 車次:T67901,出發時間:07:30
49. 車次:G12357,出發時間:08:00
50. 車次:D67902,出發時間:09:30
51. 車次:K12357,出發時間:10:00
52. 車次:T67902,出發時間:11:30
53. 車次:G12358,出發時間:12:00
54. 車次:D67903,出發時間:13:30
55. 車次:K12358,出發時間:14:00
56. 車次:T67903,出發時間:15:30
57. 車次:G12359,出發時間:16:00
58. 車次:D67904,出發時間:17:30
59. 車次:K12359,出發時間:18:00
60. 車次:T67904,出發時間:19:30
61. 車次:G12360,出發時間:20:00
62. 車次:D67905,出發時間:21:30
63. 車次:K12360,出發時間:22:00
64. 車次:T67905,出發時間:23:30
65. 車次:G12361,出發時間:00:00
66. 車次:D67906,出發時間:01:30
67. 車次:K12361,出發時間:

 

提問:出發最早的車是哪個?
RAG回答: 出發最早的車是車次G12345,出發時間是08:00。【這個答案是錯誤的】

 

提問:我下午2點出發,最好坐那班車?
RAG回答: 要確定下午2點哪個車次最適合你乘坐,需要找到所有出發時間在2點之後的車次,然後從中選擇最適合的車次。以下是符合要求的所有車次:
1. 車次:G12351,出發時間:14:00
2. 車次:K12352,出發時間:14:00
3. 車次:T67897,出發時間:15:30
4. 車次:G12353,出發時間:16:00
5. 車次:K12353,出發時間:16:00
6. 車次:T67898,出發時間:17:30
7. 車次:G12354,出發時間:18:00
8. 車次:K12354,出發時間:18:00
9. 車次:T67899,出發時間:19:30
10. 車次:G12355,出發時間:20:00
11. 車次:D67903,出發時間:20:00
12. 車次:K12355,出發時間:20:00
13. 車次:T67903,出發時間:21:30
14. 車次:G12356,出發時間:22:00
15. 車次:D67904,出發時間:22:00
16. 車次:K12356,出發時間:22:00
17. 車次:T67904,出發時間:23:30
在這些車次中,你可以選擇出發時間最早的車次G12351。

 

提問:有哪些以K開頭的車?
RAG回答: 以K開頭的車次有:
1. K12345,出發時間:10:00
2. K12346,出發時間:14:00
3. K12347,出發時間:18:00
4. K12348,出發時間:22:00
5. K12349,出發時間:02:00
6. K12350,出發時間:06:00
7. K12351,出發時間:10:00
8. K12352,出發時間:14:00
9. K12353,出發時間:18:00
10. K12354,出發時間:22:00
11. K12355,出發時間:02:00
12. K12356,出發時間:06:00
13. K12357,出發時間:10:00
14. K12358,出發時間:14:00
15. K12359,出發時間:18:00
16. K12360,出發時間:22:00
17. K12361,出發時間:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章