前言
由于deepseek網頁端在白天日常抽風,無法正常的使用,所以調用API就成了目前最好的選擇,尤其是Deepseek的API價格低得可怕,這不是和白送的一樣嗎!然后使用過很多本地部署接入API的方式,例如Chatbox、PageAssist等,都很好用,今天突發奇想,準備自己寫一個C#的版本集成到我的Unity項目中,一開始認為非常輕松,但事實上由于不熟悉UnityNetworking搞得時間比較長,現在就來總結一下遇到的問題。
遇到問題
- 如何直接從deepseek獲取模型名稱
- 調用Request的時候報錯400
解決方法
- 由于在Unity中有專門的HTTP請求方式,所以并沒有使用C#的Net模塊,這也是第一個大坑!因為請求格式和普通的C#請求格式完全不同,所以要注意在Deepseek請求模型后返回的內容,id是模型名稱(實際上就這個有用),object是"model",owned_by是"deepseek-ai",而這個模型名稱就是我們在創建請求的時候要用到的,但是在請求是body內的填寫的模型鍵值對的key是model和id不一樣,導致了直接Get模型名稱后,key值不一樣,不能直接傳到body內作為模型參數,而要改一下鍵值對,將"id":“deepseek-reasoner"改成"model”:“deepseek-reseaoner”,這樣才能正常的使用指定模型!
- 報錯400則大概率時本地傳參時的錯誤,重點對照deepseek官網api調用的地方對應一下自己的參數名和參數類型都是否正確,我這里的問題是max_tokens寫大了,deepseek-reason最大支持輸出的token值是8k,我給了一個12k,所以傳過去之后,發現參數非法,就給打回來了,對應的錯誤代碼就是400了,當然大家如果遇到相同的問題,可能不是這個參數的問題,可能是其他參數的問題,總之就是檢查一下傳入的參數結構和合法性即可。
結語
真是要實際調用后才知道,調用api也能有這么多坑,后續如果還遇到有坑會繼續更新本文,大伙有其他的問題也歡迎在評論區留言。
后續補充
- 400的錯誤還有可能是上下文過長導致的,deepseek的上下文僅支持64k,一個中文字符就有0.8token好像,所以有時候報錯可能是上下文太長導致的。