赞
踩
#前情提要#
我想做一个基于我的私有数据的对话机器人。探索基于openAI实现个性化对话机器人(一)-CSDN博客
前文已经介绍如何使用fine-tuning模型构建自己的chatbot,但是fine-tuning模型也是一个基于概率的模型,由于AI团队使用的训练集数据的规模极大且繁多,你想通过这单次的微调就很快改变模型比较有难度。又陷入了:如何根据我提供的知识进行精准对话呢?
幸运的是目前OpenAI团队推出了Retrieve助手,它可以基于你提供的私有数据和你进行对话,这样我们不就可以站在巨人的肩膀上做事了吗哈哈哈^^
https://platform.openai.com/docs/assistants/tools/knowledge-retrieval
总的来说,要是想结合openAI现有的模型进行私域数据对话,目前有2个方案:
(1)fine-tuning---这个之前介绍过了
(2)assistants---AI助手(有assistants、chat和complete)
assistants下有三个主要功能:
Functions:函数调用功能,可以让assistants在对话中调用函数并返回结果
Code interpreter:代码解释器,允许 Assistants API 在沙盒执行环境中编写和运行 Python 代码,让您的助手迭代运行代码以解决具有挑战性的代码和数学问题。 代码解释器每次会话收费 0.03 美元。
Retrieval:检索工具,可基于文本数据进行检索后对话,主要支持pdf、docx、html、txt以及各种编程语言的后缀文件。该功能每个助手每天支付 0.20 美元/GB 的检索文件费用,就是费用与上传的文件大小有关。
附上tools的原文档地址:https://platform.openai.com/docs/assistants/tools
#本文目的#
本文主要介绍openAI的assistants功能,并且使用assistants的retrieval功能进行基于私域数据的chatbot。
注:小厮认为这retrieve的实现可以参考一下这篇文章使用 LangChain、Pinecone 和 LLM(如 GPT-4 和 ChatGPT)构建基于文档的问答系统_langchain pinecone-CSDN博客
#参数说明#
Name是你创建的当前机器人助手的名字;
Introduction是这个小助手的介绍(相当于你提示他现在是个啥角色);
Model:当前机器人使用的(LLM)模型;
TOOLS:助手提供的三种工具,上面有介绍;
Files:使用TOOLS必备的私域文件,点击add上传
#步骤#
(1)create一个助手,这里叫xxx chatbot233:
(2)填写name、introduction和model,还有上传你的私域(个性化)文件:
这里注意两个地方:
a) retrieval支持的model只有 gpt-4-1106-preview和 gpt-3.5-turbo-1106两个,选别的model下面TOOLS的Retrieval会变灰。
b) FILES上传文件有些古怪,我当时传docx后缀真是4都传不上去,一直报文件类型不支持,后来我把word转成pdf后就好了???如果docx解析不了就试试pdf吧。
(3)开始对话
现在在最底下的文本框中输入你的问题,点击runs,你的专属chatbot就会根据你上传的文件内容回答你的问题啦。
- from openai import OpenAI
- import time
- import os
- # Upload a file with an "assistants" purpose
-
- client = OpenAI(
- api_key="你的openAPI key"
- )
-
- # import检索文件
- file = client.files.create(
- file=open("路径/文件", "rb"),
- purpose='assistants'
- )
-
- # Add the file to the new assistant
- assistant = client.beta.assistants.create(
- name="TSL chatbot233",
- instructions="你现在是我的客服小蜜,请根据上传文件内容回答客户问题",
- model="gpt-4-1106-preview",
- tools=[{"type": "retrieval"}],
- file_ids=[file.id]
- )
-
- # create a chat thread to save message
- thread = client.beta.threads.create()
-
- # 将Messages关联到Thread
- while True:
- # 获取用户输入
- user_input = input("请提问:")
- message = client.beta.threads.messages.create(
- thread_id=thread.id,
- role="user",
- content=user_input,
- file_ids=[file.id]
- )
- # 创建运行模型
- run = client.beta.threads.runs.create(
- thread_id=thread.id,
- assistant_id=assistant.id)
-
- # 获取gpt的answer
- while run.status != "completed":
- print(run.status)
- time.sleep(5)
- run = client.beta.threads.runs.retrieve(
- thread_id=thread.id,
- run_id=run.id
- )
- messages = client.beta.threads.messages.list(thread_id=thread.id)
-
- print(messages.data[0].content[0].text.value)
直接运行就可以在终端进行对话:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。