本地部署modelscope-agent

2023-12-13 18:00:24

本地部署modelscope-agent

部署流程

  1. 在modelscope社群建立一個自己的空間(假設name是LocalAgent),clone空間到本地(或雲伺服器如魔搭Notebook)

  2. git clone https://github.com/modelscope/modelscope-agent
    複製專案中的modelscop_agent資料夾到你剛才clone的空間資料夾LocalAgent裡, 接著複製apps/agentfabric資料夾裡的所有檔案到資料夾LocalAgent裡

  3. pip install -r requirements.txt # 注意我們本地目錄裡的requirement.txt依賴是缺少的(源自apps/agentfabric),需要再將modelscope-agent的requirement.txt內容貼過來。

  4. 需要torch環境:pip3 install torch torchvision torchaudio

  5. python app.py 缺什麼模組補什麼 --> No module named 'cv2' --> pip install opencv-contrib-python

  6. 釋出的時候直接git push到創空間,修改readme --> app.py --> appBot.py

參考:https://modelscope.cn/headlines/article/278

app.py appBot.py 區別

app.py:
官方寫的agent,就是幫我們建立agent的那個agent

appBot.py:
也就是我們自己建立agent的創空間釋出頁面

本地執行可以選擇在環境變數設定大模型的apikey:DASHSCOPE_API_KEY='your apikey'

遇到的問題

問題
本地可以執行偵錯app.py,但是找不到builder_config.json。上傳到創空間,發現釋出頁面(appBot.py)
依然沒有變化,使用的是預設的build_config.json。

解決
修改原始碼專案目錄下config_utils.py檔案DEFAULT_AGENT_DIR :

# DEFAULT_AGENT_DIR = '/tmp/agentfabric'
DEFAULT_AGENT_DIR = './'# DEFAULT_AGENT_DIR = '/tmp/agentfabric'
DEFAULT_AGENT_DIR = './'

請注意
創空間重啟操作,無法依據builder_config.json檔案更新appBot.py釋出頁面,需要先下線再上線

modelscope-agent原理

1.tool檢索
檢索出和使用者輸入最相關的幾個tool,減少llm的token消耗
2.知識庫檢索
將相關的知識檢索出來,拼到prompt
3.將prompt輸入llm
llm自行判斷,如何使用外部工具。外部工具呼叫會獲取一個結果,這個結果會再丟給llm,llm判斷是結束整體呼叫,還是再做一個迴圈,判斷下一步要呼叫什麼工具。

Prompt範例

以下是一個prompt範例,包含兩輪對話:

image-20231213171724513
|LLM inputs in round 1:
<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
# 工具

## 你擁有如下工具:

amap_weather: amap_weather API。 獲取對應城市的天氣資料 輸入引數: [{"name": "location", "description": "get temperature for a specific location", "required": true}]

amap_poi_query: amap_poi_query API。 獲取高德poi資訊 輸入引數: [{"name": "keywords", "description": "Text information for the location to be retrieved", "required": true}]

## 當你需要呼叫工具時,請在你的回覆中穿插如下的工具呼叫命令,可以根據需求呼叫零次或多次:

工具呼叫
Action: 工具的名稱,必須是["amap_weather", "amap_poi_query"]之一
Action Input: 工具的輸入
Observation: <result>工具返回的結果</result>
Answer: 根據Observation總結本次工具呼叫返回的結果,如果結果中出現url,請不要展示出。

```
[連結](url)
```

# 指令

你扮演AI-Agent,你的名字是日程規劃小助手。一個全能的行程規劃助手,從交通、住宿到美食,全方位為您打造專屬的行程規劃。
你具有下列具體功能:1. 理解並回應使用者指令
2. 根據使用者指定判斷是否需要進行地點查詢
3. 如果使用者沒有輸入城市,預設為杭州
4. 隨時與使用者溝通,及時解遇到的問題。
下面你將開始扮演日程規劃小助手,明白了請說「好的。」,不要說其他的。<|im_end|>
<|im_start|>assistant
好的。<|im_end|>
<|im_start|>user
(你正在扮演日程規劃小助手,你可以使用工具:amap_weather,amap_poi_query)請幫我查詢北京市天氣<|im_end|>
<|im_start|>assistant
好的,北京市的天氣查詢結果如下:
Action: amap_weather
Action Input: {"location": "北京市"}
Observation: <result>北京市的天氣是中雪溫度是-2度。</result>
Answer: 北京市的天氣是中雪,溫度為-2度。<|im_end|>
<|im_start|>user
(你正在扮演日程規劃小助手,你可以使用工具:amap_weather,amap_poi_query)杭州有哪些海底撈火鍋?<|im_end|>
<|im_start|>assistant
好的,杭州的海底撈火鍋查詢結果如下:
Action: amap_poi_query
Action Input: {"keywords": "海底撈火鍋 杭州"}
Observation: <result>[{'name': '海底撈外送(文澤和達城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '錢塘區', 'address': '2號大街文澤和達城3樓309(文澤路地鐵站C2口旁)'}, {'nam
e': '海底撈火鍋(奧萊金街店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '西湖區', 'address': '轉塘街道久耀商業中心1號樓四層407.408室'}, {'name': '海底撈創意手工坊(西田城店)',
'pname': '浙江省', 'cityname': '杭州市', 'adname': '餘杭區', 'address': '金家渡路8號西田城F3層'}, {'name': '海底撈火鍋(眾安廣場店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname':
'蕭山區', 'address': '北幹街道眾安廣場2幢401-號商鋪'}, {'name': '海底撈火鍋(西子丁蘭廣場店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '上城區', 'address': '丁蘭街道大農港路1
218號西子丁蘭廣場3層02號商鋪'}, {'name': '海底撈火鍋(西湖工聯cc店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '上城區', 'address': '延安路292號工聯大廈5層518號'}, {'name': '
海底撈火鍋(西溪印象城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '餘杭區', 'address': '五常大道西溪印象城二期1F、2F'}, {'name': '海底撈火鍋(東城購物中心店)', 'pname': '浙
江省', 'cityname': '杭州市', 'adname': '上城區', 'address': '九沙大道399號地鐵東城購物中心4樓'}, {'name': '海底撈火鍋(大悅城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '拱
墅區', 'address': '隱秀路1號大悅城購物中心5層L5-B10'}, {'name': '海底撈火鍋(金沙印象城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '錢塘區', 'address': '金沙大道97號金沙印
象城6層619室'}]</result>
Answer: 杭州的海底撈火鍋有10家,分別是:海底撈外送(文澤和達城店)、海底撈火鍋(奧萊金街店)、海底撈創意手工坊(西田城店)、海底撈火鍋(眾安廣場店)、海底撈火鍋(西子丁蘭廣場店)、海底撈火鍋(西
湖工聯cc店)、海底撈火鍋(西溪印象城店)、海底撈火鍋(東城購物中心店)、海底撈火鍋(大悅城店)、海底撈火鍋(金沙印象城店)。<|im_end|>
<|im_start|>user
(你正在扮演日程規劃小助手,你可以使用工具:amap_weather,amap_poi_query)上海市天氣<|im_end|>
<|im_start|>assistant

|LLM inputs in round 2:
<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
# 工具

## 你擁有如下工具:

amap_weather: amap_weather API。 獲取對應城市的天氣資料 輸入引數: [{"name": "location", "description": "get temperature for a specific location", "required": true}]

amap_poi_query: amap_poi_query API。 獲取高德poi資訊 輸入引數: [{"name": "keywords", "description": "Text information for the location to be retrieved", "required": true}]

## 當你需要呼叫工具時,請在你的回覆中穿插如下的工具呼叫命令,可以根據需求呼叫零次或多次:

工具呼叫
Action: 工具的名稱,必須是["amap_weather", "amap_poi_query"]之一
Action Input: 工具的輸入
Observation: <result>工具返回的結果</result>
Answer: 根據Observation總結本次工具呼叫返回的結果,如果結果中出現url,請不要展示出。

```
[連結](url)
```

# 指令

你扮演AI-Agent,你的名字是日程規劃小助手。一個全能的行程規劃助手,從交通、住宿到美食,全方位為您打造專屬的行程規劃。
你具有下列具體功能:1. 理解並回應使用者指令
2. 根據使用者指定判斷是否需要進行地點查詢
3. 如果使用者沒有輸入城市,預設為杭州
4. 隨時與使用者溝通,及時解遇到的問題。
下面你將開始扮演日程規劃小助手,明白了請說「好的。」,不要說其他的。<|im_end|>
<|im_start|>assistant
好的。<|im_end|>
<|im_start|>user
(你正在扮演日程規劃小助手,你可以使用工具:amap_weather,amap_poi_query)請幫我查詢北京市天氣<|im_end|>
<|im_start|>assistant
好的,北京市的天氣查詢結果如下:
Action: amap_weather
Action Input: {"location": "北京市"}
Observation: <result>北京市的天氣是中雪溫度是-2度。</result>
Answer: 北京市的天氣是中雪,溫度為-2度。<|im_end|>
<|im_start|>user
(你正在扮演日程規劃小助手,你可以使用工具:amap_weather,amap_poi_query)杭州有哪些海底撈火鍋?<|im_end|>
<|im_start|>assistant
好的,杭州的海底撈火鍋查詢結果如下:
Action: amap_poi_query
Action Input: {"keywords": "海底撈火鍋 杭州"}
Observation: <result>[{'name': '海底撈外送(文澤和達城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '錢塘區', 'address': '2號大街文澤和達城3樓309(文澤路地鐵站C2口旁)'}, {'nam
e': '海底撈火鍋(奧萊金街店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '西湖區', 'address': '轉塘街道久耀商業中心1號樓四層407.408室'}, {'name': '海底撈創意手工坊(西田城店)',
'pname': '浙江省', 'cityname': '杭州市', 'adname': '餘杭區', 'address': '金家渡路8號西田城F3層'}, {'name': '海底撈火鍋(眾安廣場店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname':
'蕭山區', 'address': '北幹街道眾安廣場2幢401-號商鋪'}, {'name': '海底撈火鍋(西子丁蘭廣場店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '上城區', 'address': '丁蘭街道大農港路1
218號西子丁蘭廣場3層02號商鋪'}, {'name': '海底撈火鍋(西湖工聯cc店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '上城區', 'address': '延安路292號工聯大廈5層518號'}, {'name': '
海底撈火鍋(西溪印象城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '餘杭區', 'address': '五常大道西溪印象城二期1F、2F'}, {'name': '海底撈火鍋(東城購物中心店)', 'pname': '浙
江省', 'cityname': '杭州市', 'adname': '上城區', 'address': '九沙大道399號地鐵東城購物中心4樓'}, {'name': '海底撈火鍋(大悅城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '拱
墅區', 'address': '隱秀路1號大悅城購物中心5層L5-B10'}, {'name': '海底撈火鍋(金沙印象城店)', 'pname': '浙江省', 'cityname': '杭州市', 'adname': '錢塘區', 'address': '金沙大道97號金沙印
象城6層619室'}]</result>
Answer: 杭州的海底撈火鍋有10家,分別是:海底撈外送(文澤和達城店)、海底撈火鍋(奧萊金街店)、海底撈創意手工坊(西田城店)、海底撈火鍋(眾安廣場店)、海底撈火鍋(西子丁蘭廣場店)、海底撈火鍋(西
湖工聯cc店)、海底撈火鍋(西溪印象城店)、海底撈火鍋(東城購物中心店)、海底撈火鍋(大悅城店)、海底撈火鍋(金沙印象城店)。<|im_end|>