
什么是GPT-4?完整指南
先來看下效果,這是我上傳了一份《人體損傷致殘程度分級》資料詢問后的結果:
DeepSeek部署有兩種方式,一種是本地部署、一種是接入第三方API。
這兩種的優缺點:
首先你本機需要確保已經安裝ollama,并且ollama能正常運行。
其實我原本打算這篇文章只寫本地部署的方式的…..
不過呢,由于 DeepSeek 網頁版最近一直在”罷工”,我被迫嘗試了本地 ChatBox 工具來接入 API。沒想到體驗了一把滿血版的 R1,爽得飛起!覺得這個方案也很香,所以就順手把 API 的方式也寫進來。
這里我提供兩個平臺,大家自行選擇接入。
先要獲取APIkey,后續我們需要將APIkey填入知識庫配置中。
官網
https://console.volcengine.com/ark
價格
輸入:¥2/ M Tokens
輸出:¥8/ M Tokens
進入側的APIKey管理
,創建APIkey
新建秘鑰,復制APIkey
官網
https://cloud.siliconflow.cn/account/ak
價格
輸入:¥4/ M Tokens
輸出:¥16/ M Tokens
進入左側的API秘鑰
,點擊新建秘鑰
后復制秘鑰
接著我們需要接入知識庫,這里使用AnythingLLM
這個項目。
AnythingLLM 是一個開源的大語言模型(LLM)應用框架,旨在幫助用戶輕松構建和部署基于私有數據的智能問答、文檔分析等應用。
進入官網并下載安裝程序
運行安裝程序,中間會下載所需要的額外依賴項(GPU、NPG支持)
如果下載失敗了,或者是你關閉這個下載窗口跳過了這一步,AnythingLLM還是會成功安裝。
這個時候不要擔心,可以手動進行安裝。
網盤鏈接中有一個lib
壓縮包。
解壓壓縮包,并將解壓后的文件夾放入你的安裝目錄\AnythingLLM\resources\ollama
目錄內。
安裝完成,進入AnythingLLM界面,這里需要選擇一個默認的大模型。
如果你使用的是本地部署DeepSeek的方式,向下拉找到Ollama
選擇即可。
如果你使用的是第三方API,這一步不需要選擇ollama
,向下找到Generic OpenAI
Generic OpenAI:
通過自定義配置連接到任何兼容OpenAI接口格式的服務。
這里需要填寫5個參數
使用硅基流動API:
BaseURL
請求地址
APIkey
API秘鑰,填寫剛才獲取的即可
ChatModelName
模型名稱
Pro/deepseek-ai/DeepSeek-R1
Token context window
(上下文窗口)
4096
Max Tokens
(最大tokens數量)
4096或者是8192根據自己情況來
使用火山方舟API:
BaseURL
請求地址
https://ark.cn-beijing.volces.com/api/v3
APIkey
API秘鑰,填寫剛才獲取的即可
ChatModelName
模型名稱
這里比較特殊,火山方舟模型名稱需要填寫接入點ID。我們需要去平臺上創建接入點。
首先先開通DeepSeekR1的服務
來到在線推理–創建接入點
確認接入
這個ID就是接入點ID,填寫這個值即可。
Token context window
(上下文窗口)
4096
Max Tokens
(最大tokens數量)
4096或者是8192根據自己情況來
以上設置完成后,別忘了點SaveChanage
保存。
下一步進入這個隱私界面,就是告訴你數據怎么存、怎么用的那些說明書,反正都是套話,直接跳過下一步就可以
這一步是歡迎界面,沒啥特別的,直接跳過它
這里創建一個工作區名稱,建議使用英文,因為要是后面想用 API 來調用的話,這個名字可就派上用場了。
現在進入 AnythingLLM
的主界面了。它會用一段示例對話來教你怎么玩
點擊左邊我們剛才起好名字的工作區,進入新的對話界面。
這里簡單對話來測試模型是否調用成功。
點擊工作區右側的設置按鈕進入設置界面。
進入聊天設置,我們可以在這里對模型進行細節上的調整
這里是調整當前使用的大模型。默認使用系統設置的,也就是剛才設置的ollama
也可以選擇其他本地大模型或是API服務
模式分聊天和查詢,查詢表示只使用查詢上下文功能(需要有自己上傳的文檔),聊天表示使用聊天功能+查詢
上下文數量
你可以理解為是人設提示詞,可以修改為中文,也可以保持默認。
接下來需要給知識庫投喂資料,點擊工作區旁的上傳按鈕
進入知識庫管理界面
支持批量上傳,支持Excel、world、txt等文件格式。這里我上傳了一個《人體損傷致殘程度分級》.pdf
。
選中文件,點擊Move to WorkSpace
,這一步是將臨時區的文件加入到工作空間。
可以看到上傳的文件轉移至右邊,這里點擊Sace and Embed
進行保存。
下方提示WorkSpace updated successfully
表示保存成功。
這里需點擊Pin to workspace
這個按鈕。
Pin to workspace:
如果在使用 AnythingLLM 時,發現默認情況下沒有得到滿意的答案,那么可以通過釘住文檔來提高回答質量。這是一種快速提升回答準確性和相關性的方法。
簡單來說,文檔釘住就是把文檔內容直接“喂”給語言模型,讓它在回答問題時能夠參考這些內容,從而提供更好的答案。
然后我們回到對話頁面,新建一個對話,提問問題,驗證知識庫是否添加成功。
可以看到DeepSeek已經結合上傳的資料進行回答,但是回答的問題有誤差。
比如第一個問題:
問:
兩根肋骨骨折是什么等級?
答:
根據提供的上下文信息,人體損傷致殘程度分級標準中關于肋骨骨折的規定如下:
重傷二級:四肋以上骨折或者兩肋以上并有反常活動;
輕傷一級:一至三肋骨骨折。
對于兩根肋骨骨折的情況,如果沒有伴隨反常活動或其他嚴重情況(如超過四根),則屬于輕傷一級。因此,兩根肋骨骨折的等級是:
輕傷一級
但這在上傳的文件中,兩根肋骨骨折屬于輕傷二級。這對于法律咨詢方面的應用來說是比較嚴重的錯誤。
遇到這種回答不準的問題,也不用著急,我們來排查下原因。
我仔細看了下上傳的 PDF 文件,發現里面有很多表格、特殊格式,還有一大堆用不到的內容。這些”雜質”會影響 AI 理解我們真正想要它學習的內容。
這些雜亂的格式會讓 AI 抓不住重點,就像我們看到一本亂糟糟的書一樣,所以我把關鍵內容重新整理成了一個簡潔的 Word 文檔,刪掉了那些用不到的內容,然后重新喂給了 AI。
整理后的文檔內容節選:
5.6.4輕傷二級
b)肋骨骨折2處以上。
c) 胸骨骨折;鎖骨骨折;肩胛骨骨折。
d)胸鎖關節脫位;肩鎖關節脫位。
e) 胸部損傷,致皮下氣腫1周不能自行吸收。
f) 胸腔積血;胸腔積氣。
g)胸壁穿透創。
h)胸部擠壓出現窒息征象。
5.6.5輕微傷
a)肋骨骨折;肋軟骨骨折。
5.7 腹部損傷
5.7. 1重傷一級
a)肝功能損害(重度)。
b)胃腸道損傷致消化吸收功能嚴重障礙,依賴腸外營養。
c) 腎功能不全(尿毒癥期)。
再試著問了一遍,這次回答準確多了!
這只是最簡單的解決方案。如果你想讓 AI 回答得更準確,還可以試試調整文檔格式、優化搜索方式、調整 AI 參數等方法。不過這些高級玩法我們后面再聊。
打開AnythingLLM
界面,進入設置-API秘鑰-生成新的API秘鑰
我已經將AnythingLLM
的接口接入到NGCBOT
中并制做成整合包。
解壓網盤鏈接中的NGCBOT_LLM.zip
壓縮包,雙擊啟動器.exe
即可運行。
在使用之前需要做三件事!
在使用之前需要做三件事!
在使用之前需要做三件事!
第一,確認你整合包目錄下沒有中文,有中文必報錯!
正確示范
F:\AI\AIpackage\NGCBot
錯誤示范
F:\微信BOT\AIpackage\NGCBot
第二,安裝指定版本微信。
在網盤鏈接中有一個微信版本
WeChatSetup-3.9.10.27.exe
安裝這個版本,電腦上原本有微信不用刪除,直接覆蓋安裝。
第三,修改NGCBOT的配置文件。
需要對Config\Config.yaml
配置文件就行修改。
配置文件一共修改三處
1.修改超級管理員配置。
這里填入你設定的微信號的ID,記住一定要改!不然都發給我了….
這個ID如何獲取?用你想設為管理員的微信號,給機器人發個消息,然后在控制臺就能看到發送消息人的id。
2.修改ai優先級配置。
這里是ai接口執行的次序,前面的數字越小代表優先執行。默認設定是AnythingLLM優先。
3.AnythingLLM配置。
這里需要修改workspace
、AnythingLLMkey
這兩個值就好。
workspace
填寫你AnythingLLM創建的工作區的名稱,就是那個小寫的。
AnythingLLMkey
填寫你AnythingLLM中獲取的秘鑰。不是硅基流動或者是火山方舟的那個秘鑰!!
記住前面的Bearer不要去掉
按照以上步驟修改后,雙擊啟動器.exe
就可以愉快的玩耍咯!
整合包獲取在文章末尾。
恭喜你!看到這里的都是????????
如果你只想快速上手玩轉知識庫機器人,看到這里就可以。
下面是寫給想深入研究的小伙伴的內容
感興趣的可以繼續往下看
此步驟適合想拓展開發研究的小伙伴,如果你是小白,想直接玩整合包,請跳過此步驟。
OK,我們來玩點高級的,瀏覽器輸入[http://localhost:3001/api/docs/](http://localhost:3001/api/docs/)
進入API頁面。
這里由于官方原本的API文檔網頁訪問不了,所以改成本地訪問API文檔。
進入API說明網頁后,可以看到這里面有各種各樣的接口。并且支持在這個網頁上直接進行調試。
在開始接入之前,我們需要授權一下秘鑰,點擊Authorize
。
在打開的界面將AnythingLLMAPI秘鑰粘貼進去,授權成功
接著向下找到/v1/workspace/{slug}/chat
這個API
參數說明
參數 | 說明 | 備注 |
---|---|---|
slug | 工作空間 | 拒絕中文字符、大寫等特殊字符,只能小寫 |
message | 消息內容 | 你要發送的消息 |
mode | 模式 | 模式分chat和query,query表示只使用查詢上下文功能(需要有自己上傳的文檔),chat表示使用聊天功能 |
請求示例(Request body)
curl --location 'http://localhost:3001/api/v1/workspace/newwork/chat' \
--header 'Authorization: Bearer 7X26VBD-0824RMG-MD0VV2X-PC02ZJ4' \
--header 'Content-Type: application/json' \
--data '{
"message": "兩根肋骨骨折是什么等級?",
"mode": "chat"
}'
Responses
{
"id": "488ff13e-0206-4014-bf50-ea2d8e78c1c3",
"type": "textResponse",
"close": true,
"error": null,
"chatId": 17,
"textResponse": "<think>\n好的,我現在需要解決用戶的問題:“兩根肋骨骨折是什么等級?” 用戶之前已經詢問過這個問題,并且我給出了一個回答,但現在他再次提問,可能希望得到更詳細或不同的解釋。\n\n首先,回顧一下上下文。在提供的Context 0中,5.6.4輕傷二級部分提到了b)肋骨骨折2處以上屬于輕傷二級。因此,兩根肋骨骨折符合這一標準,應定級為輕傷二級。\n\n用戶可能是一名法律工作者、家屬或受傷者本人,想要了解骨折的嚴重程度以便處理工傷賠償或其他相關事宜。他們可能對分級標準不太熟悉,所以才會多次詢問。\n\n在思考過程中,我需要確認是否還有其他相關的評定標準會影響結果。例如,是否有特殊情況如骨折的位置、是否伴隨內臟損傷等,這些因素可能會改變評定等級。但根據提供的Context,沒有提到這些情況,因此只能基于給出的信息進行判斷。\n\n此外,用戶可能希望知道如何申請工傷認定或后續的賠償流程,但由于信息有限,我無法提供具體步驟,但可以建議他們聯系勞動保障部門或醫療機構獲取專業指導。\n\n總結來說,兩根肋骨骨折屬于輕傷二級,這是根據提供的標準得出的結論。用戶可能需要進一步的法律或醫療咨詢來處理相關事宜。\n</think>\n\n根據您提供的上下文信息:\n\n在 **5.6.4 輕傷二級** 中提到:\n- **b) 肋骨骨折2處以上**。\n\n因此,**兩根肋骨骨折屬于輕傷二級**。",
"sources": [
{
"text": "5.2.4輕傷二級\n\na)面部單個創口或者瘢痕長度4.5cm 以上;多個創口或者瘢痕長度累計6.0cm 以上。\n\nb)面頰穿透創,皮膚創口或者瘢痕長度1.0cm以上。\n\nc)口唇全層裂創,皮膚創口或者瘢痕長度1.0cm 以上。\n\nd) 面部塊狀瘢痕,單塊面積3.0cm2以上或多塊面積累計5.0cm2以上。\n\ne) 面部片狀細小瘢痕或者色素異常,面積累計8.0cm2以上。f)眶壁骨折(單純眶內壁骨折除外)。\n\ng)眼瞼缺損。\n\nh) 一側眼瞼輕度外翻。\n\ni) 一側上眼瞼下垂覆蓋瞳孔。\n\nj) 一側眼瞼閉合不全。\n\nk)一側淚器損傷伴溢淚。\n\n1)耳廓創口或者瘢痕長度累計6.0cm以上。\n\nm)耳廓離斷、缺損或者攣縮畸形累計相當于一側耳廓面積15%以上。n)鼻尖或者一側鼻翼缺損。\n\no) 鼻骨粉碎性骨折;雙側鼻骨骨折;鼻骨骨折合并上頜骨額突骨折;鼻骨骨折合并鼻中隔骨折;雙側上頜骨額突骨折。\n\np) 舌缺損。\n\nq) 牙齒脫落或者牙折2枚以上。\n\nr) 腮腺、頜下腺或者舌下腺實質性損傷。\n\ns) 損傷致張口困難I 度 。\n\nt)頜骨骨折(牙槽突骨折及一側上頜骨額突骨折除外)。u)顴骨骨折。\n\n5.2.5輕微傷\n\n\n\n\n\n\n\n\n\na)面部軟組織創。\n\nb)面部損傷留有瘢痕或者色素改變。\n\nc) 面部皮膚擦傷,面積2.0cm2以上;面部軟組織挫傷;面部劃傷4.0cm以上。\n\nd)眶內壁骨折。\n\ne)眼部挫傷;眼部外傷后影響外觀。\n\nf) 耳廓創。\n\ng) 鼻骨骨折;鼻出血。h)上頜骨額突骨折。\n\ni) 口腔粘膜破損;舌損傷。\n\nj) 牙齒脫落或者缺損;牙槽突骨折;牙齒松動2枚以上或者Ⅲ度松動1枚以上。\n\n5.3 聽器聽力損傷\n\n5.3. 1重傷一級\n\na) 雙耳聽力障礙(≥91dB HL)。\n\n5.3.2重傷二級\n\na) 一耳聽力障礙(≥91dB HL)。\n\nb) 一耳聽力障礙(≥81dB HL),另一耳聽力障礙(≥41dB HL)。\n\nc) 一耳聽力障礙(≥81dB HL),伴同側前庭平衡功能障礙。\n\nd) 雙耳聽力障礙(≥61dB HL)。\n\ne) 雙側前庭平衡功能喪失,睜眼行走困難,不能并足站立。\n\n5.3.3輕傷一級\n\na)雙耳聽力障礙(≥41dB HL)。\n\nb)雙耳外耳道閉鎖。\n\n5.3.4輕傷二級\n\na) 外傷性鼓膜穿孔6周不能自行愈合。b...continued on in source document...",
"id": "210f98f0-d656-4c0f-b3d5-d617f6398eca",
"url": "file://C:\\Users\\XX\\AppData\\Roaming\\anythingllm-desktop\\storage\\hotdir\\新建 DOCX 文檔.docx",
"title": "新建 DOCX 文檔.docx",
"docAuthor": "no author found",
"description": "No description found.",
"docSource": "pdf file uploaded by the user.",
"chunkSource": "localfile://C:\\Users\\XX\\Desktop\\新建 DOCX 文檔.docx",
"published": "2025/2/7 13:00:52",
"wordCount": 126,
"token_count_estimate": 3870
}
],
"metrics": {
"prompt_tokens": 431,
"completion_tokens": 326,
"total_tokens": 757,
"outputTps": 63.178294573643406,
"duration": 5.16
}
}
這樣我們完成了AnythingLLM接口的調用測試。根據這個接口你可以實現自己的業務邏輯,下面我們結合微信BOT來實現知識庫機器人。
NGCBOT項目中需要在ApiServer\AiServer\AiDialogue.py
腳本中增加調用AnythingLLM
的邏輯。
這里我直接放代碼。
def getAnythingLLM(self, content, messages):
"""
本地 AnythingLLM 模型
:param content: 對話內容
:param messages: 消息列表
:return:
"""
op(f'[*]: 正在調用本地AnythingLLM對話接口... ...')
messages.append({"role": "user", "content": f'{content}'})
data = {
"model": self.anythingLLMConfig.get('anythingllmModel'),
"message": content
}
headers = {
"Content-Type": "application/json",
"Authorization": self.anythingLLMConfig.get('anythingllmKey')
}
try:
resp = requests.post(
url=self.anythingLLMConfig.get('anythingllmApi').format(workspace=self.anythingLLMConfig.get('workspace')),
headers=headers,
json=data,
timeout=300
)
resp.encoding = 'utf-8'
json_data = resp.json()
assistant_content = json_data['textResponse']
if "</think>" in assistant_content:
assistant_content = assistant_content.split("</think>")[1].strip()
messages.append({"role": "assistant", "content": f"{assistant_content}"})
if len(messages) == 21:
del messages[1]
del messages[2]
return assistant_content, messages
except Exception as e:
op(f'[-]: 本地AnythingLLM對話接口出現錯誤, 錯誤信息: {e}')
return None, [{"role": "system", "content": f'{self.systemAiRole}'}]
init中添加anythingLLMConfig
self.anythingLLMConfig = {
'anythingllmApi': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmApi'],
'anythingllmKey': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmKey'],
'anythingllmModel': configData['apiServer']['aiConfig']['AnythingLLM']['AnythingllmModel'],
'workspace': configData['apiServer']['aiConfig']['AnythingLLM']['workspace']
}
本文章轉載微信公眾號@嘟嘟實驗室