ChatGPT | 用GPT實現(xiàn)高考志愿系統(tǒng)
高考出分將近,看到各種高考志愿一對一輔導,其實是利用信息差掙錢,但是隨著AI的技術快速發(fā)展,數(shù)據(jù)平權的時代已經到來,信息差不是特定人員的優(yōu)勢。為此,我和小伙伴們利用ChatGPT技術,開發(fā)了高考志愿智能填報系統(tǒng)。
圖片
志愿系統(tǒng)
體驗地址:http://gaokao.su007.club/
邀請碼:6mRtf GyJwco rhGXoK qDGln8 OPC7Ys
1、架構設計
架構設計
- 構建大語言模型的LLM,通過爬蟲抓取數(shù)據(jù),進行清洗
- 數(shù)據(jù)清洗后,按照格式入庫到sqlite中
- 將sqlite按照格式,提供給LLM繼續(xù)微調
- 微調后,將模型部署提供API Server對外訪問
2、數(shù)據(jù)采集
數(shù)據(jù)采集首先用到的想到是爬蟲,但是卻面臨一個問題,數(shù)據(jù)的異構性,針對每個頁面都去寫爬蟲解析是非常麻煩,而且隨著頁面變動,可能原來解析方式又需要重新修改,為此結合GPT,出現(xiàn)了很多用GPT解析和整理網頁數(shù)據(jù)的開源項目,其中:ScrapeGraphAI比較好用。
開源地址:https://github.com/VinciGit00/Scrapegraph-ai
ScrapeGraphAI
使用樣例:
from scrapegraphai.graphs import SmartScraperGraph
graph_config = {
"llm": {
"model": "ollama/mistral",
"temperature": 0,
"format": "json", # Ollama needs the format to be specified explicitly
"base_url": "http://localhost:11434", # set Ollama URL
},
"embeddings": {
"model": "ollama/nomic-embed-text",
"base_url": "http://localhost:11434", # set Ollama URL
},
"verbose": True,
}
smart_scraper_graph = SmartScraperGraph(
prompt="整理學校信息,包括學校名稱、地址 ...",
source="https://www.gaokao.cn/school/search",
cnotallow=graph_config
)
result = smart_scraper_graph.run()
print(result)
- 這里的輸出結果由于敏感,所以就不輸出;
- 由于高考數(shù)據(jù)在互聯(lián)網上比較多,所以可以搜一些相關的網頁都整理到AI Scraper中,自動分析數(shù)據(jù);
- 如果有興趣的小伙伴可以嘗試一下,不過爬蟲可能被限制,然后需要遵守法律法規(guī)進行數(shù)據(jù)的爬??;
3、模型微調
數(shù)據(jù)整理好以后,就可以進行模型微調,解決AI志愿的推薦問題,當然這里又有另一種方式,就是通過few-shot Prompt,通過上下文進行對話,這樣也可以達到類似的效果,缺點就是上下文不能太長。
這里微調就使用:LLamaFactory+LLama3,使用界面就可以進行:
LLamaFactory
整理的數(shù)據(jù)集如下:
[
{
"conversations": [
{
"from": "human",
"value": "2024年高考600分,希望選北京的學校,該怎么選?"
},
{
"from": "gpt",
"value": "根據(jù)北京2023年xxx錄取分數(shù)線:{爬取的分數(shù)線數(shù)據(jù)和專業(yè)數(shù)據(jù)},2022年xxx錄取分數(shù)線:{爬取的分數(shù)線數(shù)據(jù)和專業(yè)數(shù)據(jù)},2021年xxx錄取分數(shù)線:{爬取的分數(shù)線數(shù)據(jù)和專業(yè)數(shù)據(jù)},推薦...,原因是..."
},
...
]
}
]
大約整理了10w條數(shù)據(jù),經過一些調整參數(shù)最后微調完成以后,就可以部署到API Server中。
6、功能上線
圖片
圖片