深入探讨GPTs和AI Assistant( 二 )

  • 选择基础模型,可以选择 GPT-3.5、GPT-4 等作为基础模型 。
  • 选择扩展能力 tools 例如 code interpreter, retrieval 以及其他的 function call 工具 。
  • 创建一个对话(Thread) 进行一个交流 。
  • 在对话中传入消息(Messages),进行提问 。
  • 在对话中进行执行(Run),AI Assistant 会自动运行相关的tools 。
  • 下面的例子会一步一步进行AI Assistant的构建 。
    步骤 1: 创建一个AI助手
    一个 AI assistant 可以通过下面的几个参数进行配置:
    • 指令(Instructions): 针对AI助手和模型,定制他们的表现和响应行为 。
    • 模型(Model): 提供了各种供选择的 GPT-3.5 或者 GPT-4 模型,包括自己进行精细调校的模型 。如果希望使用信息检索工具(Retrieval tool),则需要采用 gpt-3.5-turbo-1106或者 gpt-4-1106-preview模型 。
    • 工具(Tools): Assistant API 支持使用OpenAI自行开发的 Code Interpreter 编码解释器以及 Retrieval 召回工具 。
    • 函数(Functions): API 支持用户使用自定义的函数作为额外工具使用,类似 Open AI 的 function calling 特性 。
    在这个例子中 , 我们会创建一个自己的数学导师 , 使用到 Code Interpreter 能力:
    # Upgrade to Python/ target=_blank class=infotextkey>Python SDK v1.2 with pip install --upgrade openai assistant = client.beta.assistants.create( name="Math Tutor", # 助手的名字 instructions="You are a personal math tutor. Write and run code to answer math questions.", #助手能力 tools=[{"type": "code_interpreter"}], #助手的工具 model="gpt-4-1106-preview" #模型选择 ) 步骤 2: 创建一个对话 Thread
    一个 Thread 就代表了一个对话 。OpenAI 建议每个用户在开始对话的时候都创建一个 Thread,把所有用户相关的内容和文件都通过在 Thread 创建Message完成 。
    可以将 Thread 理解为与 AI 助手创建的一个对话窗口,所有的对话行为都在这个Thread 中进行 。
    thread = client.beta.threads.create
    Threads 本身并无大小限制 , 因此你可以在单个 Thread 对话中发送任意数量的消息(Messages) 。API 会自动对请求的消息进行适当的处理 , 以确保请求满足模型的最大窗口长度限制,如通过截断等方式进行调整 。
    步骤3: 在对话(Thread) 中传入 消息(Message)
    一个消息可以包含用户的文本输入 , 还有可能包含用户上传的文件 。尽管目前还不支持图片,但OpenAI将在不久的将来添加这一功能 。
    message = client.beta.threads.messages.create( thread_id=thread.id, #需要传入的Thread ID role="user", content="I need to solve the equation `3x + 11 = 14`. Can you help me?" )
    如果现在你展示在对话Thread 中的所有消息,你会看到这条消息被加入到了对话中:
    { "object": "list", "data": [ { "created_at": 1696995451, "id": "msg_4rb1Skx3XgQZEe4PHVRFQhr0", "object": "thread.message", "thread_id": "thread_34p0sfdas0823smfv", "role": "user", "content": [{ "type": "text", "text": { "value": "I need to solve the equation `3x + 11 = 14`. Can you help me?", "annotations": [] } }], ... 步骤 4: 执行AI助手
    为了得到AI 助手的结果,你需要创建一个 Run对象 , 这使得AI 助手可以获取对话的消息,并决定是使用工具(tools)回答用户的问题,还是仅仅依赖模型自身的能力进行问题解答 。
    当 AI 得到答案,会在对话(Thread)的消息列表中加入角色(*role="assistant"*)的一个回复 。
    run = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant.id, instructions="Please address the user as Jane Doe. The user has a premium account." ) 步骤5: 展示AI 助手的回复
    当我们需要获取AI回复的时候,可以对 Run对象进行不断的查询,获取当前执行的状态 。
    run = client.beta.threads.runs.retrieve( thread_id=thread.id, run_id=run.id )
    当状态码 == completed时,代表AI已经完成回复,并且可以在Thread 中看到AI的回答 。
    messages = client.beta.threads.messages.list( thread_id=thread.id )
    最后我们就可以把内容展示给用户,下面是一个例子 。AI给出了两个回答(role== assistant)
    深入探讨GPTs和AI Assistant

    文章插图
    可以通过运行步骤 Run Steps , 获取执行的中间状态,从而提供给用户中间结果以及使用的tools等信息 。
    步骤*: Playground 今天调试和测试


    推荐阅读