步骤 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 特性 。
# 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)

文章插图
可以通过运行步骤 Run Steps , 获取执行的中间状态,从而提供给用户中间结果以及使用的tools等信息 。
步骤*: Playground 今天调试和测试
推荐阅读
- C++的面向对象编程:深入解析与理解
- 深入掌握Java线程池调度策略,优化任务执行
- 探讨网站转化率与SEO优化之间的关系及提升策略
- 深入浅出Kafka:高可用、顺序消费及幂等性
- 人脸识别技术:应用与隐私挑战的探讨
- 62岁黄日华黄昏恋修成正果?手牵手甜蜜现身,与友人探讨婚礼细节
- 深入了解手机芯片:架构与性能的权衡
- 深入了解Linux中常见的五种文件类型
- 深入理解Java微服务架构与容器化部署
- 深入Rust的模式匹配与枚举类型
