1 资源
-
openai 客户端源码:
-
openai 各种 API 示例:
-
assistant 示例:
2 Assistant 功能
- 代码解释器
- 检索功能
- 函数调用
3 操作步骤
(较之前的api略复杂)
- 升级 openai api
shell
pip install --upgrade openai
- 创建 Assistant,定义其 instruction 并选择模型,如果需要,设置代码解释器、检索和函数调用功能。
python
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"
)
- 开始对话时,创建一个线程。
python
thread = client.beta.threads.create()
- 随着用户提出问题,向线程添加消息。
python
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)
- 在线程上运行助手以触发回应,此时自动调用相关的工具。
python
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."
)
- 查询状态
python
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
- 显示消息(收/发)
python
messages = client.beta.threads.messages.list(
thread_id=thread.id
)
- 注意
- 如果对 Python 程序不熟悉,可以在 Playground 界面中操作
4 实测:文档解析
上传了一个 markdown 文件,希望提取出子标题下的内容,使用 GPT4 Turbo 模型。
4.1 测试一:一次提问多个问题
- 数据:上传 XXX 合同文档(人名脱敏),约 7K 左右,2K 汉字。
- 问题:请从上传的文档中提取核心项 'aaa','bbb','ccc','ddd',使用原文回答。
- 运行结果:
- 执行时间:该次提问约 30s 返回(不包含上传文档及解析时间)
- 返回结果:返回结构基本是对的,返回的核心项内容无法直接使用:不是原文,是经过提炼的内容,50-60% 意思对,但内容对不上,有点像"复述课文"。
4.2 测试二:单独提问(测试两次不同项)
- 数据:同上
- 回答:请在文中找 "aaa" 对应的数据块,用原文回答,不要加其它内容。
- 运行结果:
- 回复内容:219 中文字符 0.09,190 中文字符 0.14
- 单次返回时间约 10-15s 左右
- 其中一个回答基本是对的;另一个文本是对的,但没包含数据表
(具体测试结果见 GPT_Assistant_测试附图,涉及私有数据,不便公开)
5 分析讨论
(以下均为个人看法,只测试了少量内容,不一定正确)
5.1 合并提问
- 如果一次问一个问题,正确率比较高,可能由于每次都需要把检索到的内容也传给模型,所以总计 token 计费大于问题和答案之和。
- 同时提问多个问题正确率低,一方面可能是模型生成问题,也可能由于不同答案位于不同数据块内,无法一次送入模型。
5.2 价格
- 我的每次检索数据相关提问至少在 0.1$ 左右,可能由于先检索,然后把检索的内容和问题一起送入 GPT4-Turbo 计算,这样每次提问,至少包含问题、答案和一个检索块的大小(如 512token),而且单块可能还不止 512token,也可能不止一个备选块。
- 目前在测试阶段,上传文档时解析好像没算钱(Embedding 也比较便宜)存储和检索也没算钱。
- 实测费用感觉明显高于问题和答案的累计,可能是由于 Assistant 默认记忆历史对话,并将历史对话代入当前计算,也被计入了 token。因此,在使用 playground 或程序调用时,如果不需要考虑历史对话,注意点击右上角 Clear 清除历史对话。
5.3 其它发现
- 不开通 GPT4 20$ 包月的情况下,也可以测试 GPT4-Turbo,可能是由于第一个月免费。具体按 GPT4-Turbo 调用计费(价格约为 GPT3.5 的 10 倍)。
- assistant 不仅支持 GPT4 Turbo,还支持 GPT3.5 Turbo (gpt-3.5-turbo-1106, gpt-4-1106-preview)
5.4 个人感觉
- 关键字最好与原文一致,对于某些专业领域,模型对近义词的理解能力略差。
- "用原文作答"或者"在原文中定位"对于解决幻觉问题比较重要,个人感觉效果一般,价格小贵。
- 在不用原文作答时,如果是判断或者选择题,还能比较客观地评价;对于开放性问题,用户很难判断回答是否准确。
- 用它解析局部的问题还行,整个方案都交给他可能还是不太行。
- 这几个月像 langchain,llamaindex,GPT 学术已经把周边的内容做得很细化了,OPENAI 的 assistant 用起来比较省事,但效果未必更好。