已比較的版本

索引鍵

  • 此行已新增。
  • 此行已移除。
  • 格式已變更。

1. Composio 介紹

...

  1. 創建 Composio 帳號:進入 Composio ,進行註冊及登入。

    image-20240926-061156.png

  2. APP 驗證:打開命令提示字元(cmd) *若未執行此綁定步驟,後續達哥將無法協助執行 action

    1. 輸入 pip install composio_core composio_openai

    2. 輸入 composio add [APP] -e entity [ID] 進行綁定

      1. APP:請到 Composio All Tools 網頁查看

      2. ID:任意取一個代表該 APP 的某一個 Account,如:AIDE

  3. 取得 Composio API Key:進入 Composio Settings 的 API Keys 即可取得 API Key。

    composio_apikey.png

  4. 下載

    View file
    nameweb.zip
    此 zip 檔,解壓縮過後利用瀏覽器開啟 index.html 。

  5. 填入 Plugin Configuration:根據各項目填寫相關資訊,使用此 Plugin Generator 即可馬上透過 No-Code 的方式產生 Plugin。(圖待補)Plugin。

    image-20240926-061418.pngImage Removedimage-20241021-080215.pngImage Added

  6. 選擇 APP:選取所需串接的 APP。(圖待補)APP。

    image-20240926-061453.pngImage Removedimage-20241021-080321.pngImage Added

  7. 獲取 Plugin:提交後,會自動生成一個 JSON 檔,將該檔案上傳至達哥平台。

  8. 執行

    View file
    nameapp.py
    後即可與達哥進行對話。

...

程式碼區塊
languagepy
from flask import Flask, render_template, request
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

if __name__ == '__main__':
    app.run(debug=True, port=5001)

3. 初始化與綁定服務

3.1 初始化 Composio 工具集

通過 Composio API Key 和 Entity ID 來初始化 Composio 工具集。這使我們能夠連接指定的外部應用程序,如 Gmail、Youtube、GitHub 等 。

...

程式碼區塊
languagepy
def run_composio(Composio_API_KEY, Entity_ID, App_list):
    # Initialize ComposioToolSet
    composio_toolset = ComposioToolSet(api_key=Composio_API_KEY, entity_id=Entity_ID)
   
    # Check if the app is valid
    App_list_attr = []
    for app in App_list:
        # print(app)
        app_enum = getattr(App, app.upper(), None)
        if app_enum is None:
            raise ValueError(f'Invalid name')
        else:
            App_list_attr.append(app_enum)
    tool = composio_toolset.get_tools(apps=App_list_attr)
    # tool = composio_toolset.get_tools(apps=[App.GMAIL])

    # return app all action to DaVinci
    return tool[0]

4. 執行對話和工具調用

文字逮捕此程式片段會執行達哥回傳的 action (比如發送 E-mail, …)。

程式碼區塊
languagepy
def run_action(response, Composio_API_KEY, Entity_ID):
    # Initialize ComposioToolSet
    composio_toolset = ComposioToolSet(api_key=Composio_API_KEY, entity_id=Entity_ID)
    
    # convert string to python object
    if response['arguments'].find('true') != -1:
        res_pre = response['arguments'].replace('true', 'True')
        res = eval(res_pre)
    elif response['arguments'].find('false') != -1:
        res_pre = response['arguments'].replace('false', 'False')
        res = eval(res_pre)
    else:
        res = eval(response['arguments'])

    # get app action
    app_enum = getattr(Action, response['name'].upper(), None)
    print(app_enum)

    # execute app action
    result = composio_toolset.execute_action(action = app_enum, params = res, entity_id= Entity_ID)
    return result

6. API 路由設定

此程式片段設定 Composio Plugin 可以 request 到的 API。

程式碼區塊
languagepy
# get app action
@app.route('/', methods=['POST'])
def home():
    data = request.get_json()
    Composio_API_KEY = data['Composio_API_KEY']
    Entity_ID = data['Entity_ID']
    App_list = data['App']
    response = run_composio(Composio_API_KEY, Entity_ID, App_list)
    response_data = {"response": response}
    
    return response_data

@app.route('/run', methods=['POST'])
def run_app():
    data = request.get_json()
    Composio_API_KEY = data['Composio_API_KEY']
    Entity_ID = data['Entity_ID']
    response = data['response']['function_call']
    # print(data)
    res = run_action(response, Composio_API_KEY, Entity_ID)
    response_data = {"response": res}
    
    return response_data 

...