背景: 周末有个 chatgpt 比较火的应用 chatpdf.com 。主要功能是上传一个 pdf ,就能跨语言地和这个 pdf 对话(如果这个 pdf 是中文,可以用英文提问;反之也可)。根据这个 pdf 的内容回答你的问题。 这个应用很惊艳,打开了新世界的大门。
这个应用太优秀,有人在 twitter 上问作者用了什么原理,作者很大度,把大概原理说了一下。我自己挺好奇,第二天在一篇文章里看到有人开源了类似 产品 把代码下载看来一下,总结一下原理,我自己不是机器学习出身,可能谬以千里。
问了一下 chatgpt:
me: openai 的 embedding 是什么?
chatgpt: OpenAI 的 embedding 是一种将自然语言文本转换为向量表示的技术。
将文本切割成一小部分,调用 openai 的 embedding 接口,返回这段文本的 embedding 的向量数据。存储这些数据,并且保存好对应关系。
将用户提的问题,调用 openai 的 embedding 接口,返回问题的向量数据。
计算相似度。用问题的向量,在之前切割的所有向量数据里,计算和问题向量相似度最高的几个文本(余弦定理)。
准备特殊的 prompt ,里面带上切割的文本内容,加上问题的 prompt 。
例子中的 prompt 是这样的:
const res = await fetch("https://api.openai.com/v1/chat/completions", {
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${apiKey}`
},
method: "POST",
body: JSON.stringify({
model: OpenAIModel.DAVINCI_TURBO,
messages: [
{
role: "system",
content: "You are a helpful assistant that accurately answers queries using Paul Graham's essays. Use the text provided to form your answer, but avoid copying word-for-word from the essays. Try to use your own words when possible. Keep your answer under 5 sentences. Be accurate, helpful, concise, and clear."
},
{
role: "user",
content: prompt
}
],
max_tokens: 150,
temperature: 0.0,
stream: true
})
});
以上就是这个应用的背后大概的原理。目前最大的限制是 chatgpt 接口的限制 4096 个 token 。我相信后面 openai 肯定会调整。
以上就是胡乱记录一下,如果有问题,欢迎纠正。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.