小白入门GPTs与Assistant API博客

大家好,我是最近刚入坑 AI 大模型的纯小白!最近在学 12 月的 GPTs 与 Assistant API 课程,踩了不少坑,终于搞明白这俩东西到底是啥,还跟着教程做了两个能用的小助手。
想着独学学不如众学学,干脆整理成这篇超详细的入门博客,咱们一起学,一起进步!全程无晦涩术语,手把手带你实操,就算你完全没基础,跟着做也能做出自己的 AI 助手!


目录

  1. [先搞懂:GPTs 到底是个啥?](#1-先搞懂gpts到底是个啥)

  2. [不用翻墙!国产 GPTs 平台 Coze 上手](#2-不用翻墙国产gpts平台coze上手)

  3. [手把手:用 Coze 做一个学习答疑助手](#3-手把手用coze做一个学习答疑助手)

  4. [那 Assistant API 又是什么?和 GPTs 有啥区别?](#4-那assistant-api又是什么和gpts有啥区别)

  5. [Assistant API 核心概念,大白话讲明白](#5-assistant-api核心概念大白话讲明白)

  6. [手把手:用 Assistant API 做一个水果店财务助手](#6-手把手用assistant-api做一个水果店财务助手)

  7. [最后:GPTs 和 Assistant API,到底该选哪个?](#7-最后gpts和assistant-api到底该选哪个)


1. 先搞懂:GPTs 到底是个啥?

2023 年 11 月,OpenAI 搞了个大事情:推出了GPTs

简单说,就是你不用写一行代码,就能基于 ChatGPT,做一个专属你自己的 AI 助手!
比如你想做个帮你改简历的、帮你背单词的、帮你解答学习问题的,甚至是帮你撸猫的时候陪你聊天的,都可以!

截止到 2024 年 1 月,已经有超过 300 万人做了自己的个性化 GPTs,可见这东西有多火!

OpenAI 官方的 GPTs 商店
不过它有个小问题:需要科学上网,还得是 ChatGPT Plus 付费用户才能用,对咱们国内的小白不太友好。


2. 不用翻墙!国产 GPTs 平台 Coze 上手

不过没关系,咱们有国产平替!字节跳动出的Coze(也就是扣子),就相当于国产的 GPTs 平台!

不用翻墙,不用会员,免费就能用!不管你有没有编程基础,都能快速做自己的 AI Bot,还能直接发布到微信公众号、自己的网站这些地方,太方便了!

在这里插入图片描述

Coze 分国内版和国外版,咱们国内用户直接用国内版就行:


3. 手把手:用 Coze 做一个学习答疑助手

接下来咱们直接上手,做一个学习答疑助手!以后你学习的时候,把你的笔记、课本资料都丢进去,它就能帮你解答问题,还能挂到公众号里,随时问!

整个流程就 4 步,超简单:

  1. 准备你的学习数据

  2. 创建知识库,导入资料

  3. 搭建你的答疑 Bot

  4. 发布到微信公众号

第一步:准备你的知识库数据

首先,你要把你的学习资料准备好,比如你的学习笔记、课本 PDF、知识点总结都可以。
我这里就用之前学的《LLM 基础知识》的笔记来举例,就是一个普通的 PDF 文档。

在这里插入图片描述

这里有个小技巧:为了让知识库能精准拆分你的知识点,我在每个模块的标题前加了\#\#\#作为分隔符,这样导入的时候就能自动把每个知识点分开,检索的时候更准!

第二步:创建知识库,导入你的学习资料

接下来打开 Coze,咱们来创建知识库:

  1. 登录 Coze 之后,选一个工作区,点击左侧的「知识库」,然后点「创建知识库」,输入名字就行。

  2. 然后选择「文本格式」,上传你刚才准备的学习笔记 PDF。

在这里插入图片描述

  1. 重点来了!分段方式选「自定义分段」,分段标识符就填我们刚才加的\#\#\#,长度设 2000,这样它就会自动按照我们的知识点拆分文档了!

上传完之后,你就能看到每个知识点都被拆成了独立的片段,完美!

第三步:搭建你的专属答疑 Bot

知识库弄好之后,咱们来做 Bot:

  1. 回到工作区,点击左侧的「Bots」,点「创建 Bot」,输入名字,比如「学习答疑助手」。

  2. 然后在「人设与回复逻辑」这里,输入下面的提示词,直接复制粘贴就行,不用自己写!

# 角色
你是一个专业的学习答疑小助手,能够精准透彻地理解用户的问题,然后从庞大的知识库中精准检索相关信息,进而为用户生成详尽准确的答案。
## 技能
### 技能 1: 深入理解问题
1. 仔细剖析用户提出的问题,精准提取其中的关键信息。
### 技能 2: 高效知识库检索
1. 依据关键信息,在知识库中进行全面检索。
### 技能 3: 智能搜索引擎查询
1. 若根据关键信息,在知识库中未找到高度相关的知识,借助 bingWebSearch 搜索工具展开检索。
### 技能 4: 精确回答生成
1. 以检索到的信息为基础,为用户打造准确且简洁明了的回答。
## 限制:
1. 只回答与学习相关的问题,对无关话题不予理会。
2. 尽量运用清晰简洁的语言回应用户的问题。
3. 在整个回答过程中,始终将用户的需求置于核心位置。
  1. 然后往下滑,找到「知识」,点「添加」,把我们刚才创建的知识库加进去,然后把「自动调用」打开,检索策略默认就行。

  2. 再找到「技能」,把bingWebSearch插件加上,这样如果知识库没有的内容,它还能去网上搜,不会答不上来。

在这里插入图片描述

  1. 配置完之后,右边的调试面板就能测试了!比如我问它:“什么是语言模型?”,它马上就能从我的笔记里找到答案,完美!

在这里插入图片描述

第四步:发布到微信公众号,随时问!

测试没问题之后,咱们把它发布到微信公众号,这样你关注公众号就能随时问它问题了,太方便了!

  1. 点「发布」,选择「微信公众号」,然后按照提示绑定你自己的公众号就行。

  2. 绑定完之后,扫码就能登录,然后你就能在公众号里和你的答疑助手聊天了!

你看,是不是超简单?不用写一行代码,10 分钟就做了一个自己的学习答疑助手!


4. 那 Assistant API 又是什么?和 GPTs 有啥区别?

很多小白刚学的时候都会问:GPTs 我已经会做了,那这个 Assistant API 又是啥?他俩有啥不一样?

我刚开始也搞混了,后来搞明白了,给大家理清楚:

相同点
都是基于大模型,都能做定制化的 AI 助手,都能用知识库、工具这些功能,本质上都是做 AI 助手。

不同点

  1. 使用方式不一样:GPTs 是无代码,点点鼠标就能做,面向普通用户,做完直接用 Coze 或者 ChatGPT 的界面;

  2. 使用场景不一样:Assistant API 是给开发者用的,需要写点代码,但是你可以把这个助手集成到你自己的 APP、网站、小程序里,做你自己的产品!

简单说:你自己用,或者给朋友用,用 GPTs 就行;你要做个产品给很多人用,要放到自己的应用里,就用 Assistant API!


5. Assistant API 核心概念,大白话讲明白

刚看 Assistant API 的文档的时候,一堆专业名词,是不是看懵了?别怕,我给你翻译成大白话:

  1. Assistant(助手):就是你做的那个 AI 助手,比如财务助手、答疑助手,它的人设、能用的工具、知识库,都是它的配置。

  2. Thread(线程):就相当于你和这个助手的聊天窗口!比如你今天和它聊了一半,明天接着聊,这个 Thread 就保存了你们的聊天记录,不用你自己管上下文,它自动处理。

  3. Message(消息):就是你发给助手的消息,或者助手发给你的回复,文字、图片都可以,都存在 Thread 里。

  4. Run(运行):就是你发了消息之后,让助手开始处理你的消息,它会调用模型、调用工具,给你生成回复,这个过程就是 Run。

是不是一下就懂了?是不是没那么难?


6. 手把手:用 Assistant API 做一个水果店财务助手

接下来咱们上手做一个水果店财务助手,用 Assistant API 来实现,以后你卖水果,报一下卖了多少斤,它自动帮你算成本、收入、利润,太省心了!

还是用国产的 MiniMax 平台,不用翻墙,免费就能用!

准备工作:申请 API 权限

首先你要去 MiniMax 的平台注册,拿到你的 API Key:

注册之后,创建一个应用,就能拿到你的GroupIdAPI\_KEY了,很简单!

然后准备一个水果价格的文件,叫fruit\_price\.txt,内容如下,直接复制创建就行:

香蕉成本价2元一斤,售价为3元一斤。
橘子成本价1.5元一斤,售价为2.5元一斤
苹果成本价3元一斤,售价为3.5元一斤
芒果成本价5元一斤,售价为6元一斤
葡萄成本价2元一斤,售价为4元一斤

完整代码 + 逐行解释,复制就能用

接下来就是代码了,我把每一步都加了注释,你直接复制,把里面的 API Key 换成你自己的就行:

# 发送HTTP请求的第三方库
import requests
# json数据格式
import json
# 时间
import time
import os
# 加载环境变量
from dotenv import load_dotenv, find_dotenv

# 加载环境变量,把你的API Key填在这里,或者用.env文件
_ = load_dotenv(find_dotenv())
GroupId = os.environ['GroupId'] # 换成你自己的GroupId
API_KEY = os.environ['API_KEY'] # 换成你自己的API_KEY

# 配置请求头,用来验证身份
headers = {
    'Authorization': f'Bearer {API_KEY}', # 验证身份
    'Content-Type': 'application/json' # 告诉服务器我们传的是JSON数据
}
headers_retrieval = {
    'Authorization': f'Bearer {API_KEY}',
    'authority': 'api.minimax.chat', # 服务器地址
}

# 第一步:上传我们的水果价格文件到平台
def create_file():
    url = f"https://api.minimax.chat/v1/files/upload?GroupId={GroupId}"
    data = {
        'purpose': 'assistants'
    }
    files = {
        'file': open('./fruit_price.txt', 'rb')
    }
    response = requests.post(url, headers=headers_retrieval, data=data, files=files)
    return response.json()

# 第二步:创建我们的财务助手
def create_assistant(file_id): # file_id就是我们刚才上传的文件的ID
    url = f"https://api.minimax.chat/v1/assistants/create?GroupId={GroupId}"
    payload = json.dumps({
        "model": "abab5.5-chat",# 用的大模型版本
        "name": "水果店财务助手", # 助手的名字
        "description": "水果店财务助手,用在水果销售过程中计算营业额", # 描述
        "instructions": "是一个理财能手,根据每类水果的售出量以及单价,统计其成本和收入,计算出总利润",# 助手的人设
        "file_ids": [ str(file_id)],
        "tools": [{"type": "retrieval"}] # 开启知识库检索工具
    })
    response = requests.post(url, headers=headers, data=payload)
    return response.json()

# 第三步:创建对话线程,也就是聊天窗口
def create_thread():
    url = f"https://api.minimax.chat/v1/threads/create?GroupId={GroupId}"
    response = requests.post(url, headers=headers)
    return response.json()

# 第四步:给线程里加消息,也就是我们的问题
def add_message_to_thread(thread_id):# thread_id就是我们的聊天窗口ID
    url = f"https://api.minimax.chat/v1/threads/messages/add?GroupId={GroupId}"
    payload = json.dumps({
        "thread_id": thread_id,
        "role": "user",
        "content": "我卖了2斤葡萄,3斤半的香蕉,2斤苹果,计算下总成本和总收入,给出具体的计算过程", 
    })
    response = requests.post(url, headers=headers, data=payload)
    return response.json()

# 第五步:运行助手,让它处理我们的问题
def run_thread_with_assistant(thread_id, assistant_id):
    time.sleep(10) # 等一下,创建助手需要一点时间处理知识库
    url = f"https://api.minimax.chat/v1/threads/run/create?GroupId={GroupId}"
    payload = json.dumps({
        "thread_id": thread_id,
        "assistant_id": assistant_id
    })
    response = requests.post(url, headers=headers, data=payload)
    return response.json()

# 第六步:检查助手的处理状态,等它处理完
def check_thread_run_status(thread_id, run_id):
    url =f"https://api.minimax.chat/v1/threads/run/retrieve?GroupId={GroupId}"
    payload = json.dumps({
        "thread_id": str(thread_id),
        "run_id": str(run_id)
    })
    completed = False
    while not completed:
        response = requests.request("GET", url, headers=headers,data=payload)
        if response.status_code == 200:
            response_data = response.json()
            status = response_data.get('status', '')
            print(f"当前处理状态: {status}")
            if status == 'completed':
                completed = True
                print("处理完成啦!")
            else:
                time.sleep(2)  # 没处理完就等2秒再查
        else:
            print(f"出错了: {response.status_code}")
            break  
    return completed

# 第七步:获取助手的回复
def get_thread_messages(thread_id):
    url =f"https://api.minimax.chat/v1/threads/messages/list?GroupId={GroupId}"
    payload = json.dumps({
        "thread_id": thread_id
    })
    response = requests.get(url, headers=headers, data=payload)
    return response.json()

# 主流程,把上面的步骤串起来
def main():
    # 上传文档
    file_response = create_file()
    file_id = file_response.get('file', {}).get('file_id')
    # 创建助手
    assistant_response = create_assistant(file_id)
    assistant_id = assistant_response.get('id', '')
    # 创建线程
    thread_response = create_thread()
    thread_id = thread_response.get('id', '')
    # 往线程里加我们的问题
    add_message_to_thread(thread_id)  
    # 运行助手
    run_response = run_thread_with_assistant(thread_id,assistant_id)

    run_id = run_response.get('id', '')
    # 等助手处理完
    if check_thread_run_status(thread_id, run_id):
        # 获取回复
        thread_messages_response = get_thread_messages(thread_id)
        # 打印结果
        print(json.dumps(thread_messages_response,indent=4, ensure_ascii=False))

if __name__ == "__main__":
    main()

运行效果,看看你的财务助手有多厉害

运行代码之后,你就能看到下面的结果了:

当前处理状态: processing
当前处理状态: completed
处理完成啦!
{
    "messages": [
        ...
        {
            "role": "assistant",
            "content": "根据上述信息,可以计算出总成本和总收入。

首先,我们需要知道各类水果的成本和售价,根据查询结果,我们可以知道:
- 葡萄的成本价为2元/斤,售价为4元/斤;
- 香蕉的成本价为2元/斤,售价为3元/斤;
- 苹果的成本价为3元/斤,售价为3.5元/斤。

然后,我们可以计算总成本和总收入:
- 2斤葡萄的总成本 = 2斤 * 2元/斤 = 4元;
- 3斤半的香蕉的总成本 = 3.5斤 * 2元/斤 = 7元;
- 2斤苹果的总成本 = 2斤 * 3元/斤 = 6元。

总成本 = 4元 + 7元 + 6元 = 17元。

- 2斤葡萄的总收入 = 2斤 * 4元/斤 = 8元;
- 3斤半的香蕉的总收入 = 3.5斤 * 3元/斤 = 10.5元;
- 2斤苹果的总收入 = 2斤 * 3.5元/斤 = 7元。

总收入 = 8元 + 10.5元 + 7元 = 25.5元。

最后,我们可以计算出总利润:
总利润 = 总收入 - 总成本 = 25.5元 - 17元 = 8.5元。

所以,你总共赚了8.5元。"
        }
    ]
}

你看!它自动从我们的价格文件里拿到了价格,然后一步步帮我们算了成本、收入、利润,连计算过程都给你写的清清楚楚,是不是太好用了?


7. 最后:GPTs 和 Assistant API,到底该选哪个?

到这里,你已经学会了 GPTs 和 Assistant API 的用法,还做了两个小助手!最后给大家总结一下,什么时候用哪个:

  • 如果你只是想快速做个自己用的助手,不用写代码,想发布到公众号这些地方,用GPTs/Coze就够了!10 分钟就能搞定,完全不用碰代码。

  • 如果你是开发者,想把 AI 助手集成到你自己的 APP、网站里,做自己的产品,那就用Assistant API!虽然要写点代码,但是能完全定制你自己的界面和功能。


这就是我这次学习的全部内容啦,整理了好久,希望能帮到同样是小白的你!
如果你跟着做遇到了问题,或者有什么想法,欢迎在评论区留言,咱们一起讨论,一起学习,一起进步!
如果你觉得这篇文章有用,别忘了点赞收藏关注哦,后续我还会分享更多 AI 入门的内容,咱们一起打怪升级!

更多推荐