Stephan Profile picture
Mar 8 12 tweets 4 min read
AI提示工程系列第五篇:构建一个基于知识库的AI机器人

1/12
在第二篇讲了如何让ChatGPT写长文,是从生成的角度来说。
那如果我们手头有一套知识库,如何根据知识库来建立一个类似 #chatpdf 的问答系统呢?今天就来聊聊这个话题👇🧵

#AI #ChatGPT #提示工程 #promptengineering #SemanticSearch
2/12
本文偏系统设计方面,适合于AI领域的产品/技术同学阅读。

没看过前四篇的朋友可以回顾一下:
3/12
假设我们的场景是要建立一个公司的AI自动客服系统,手头有公司的一整套知识库。

我们清楚ChatGPT有4096的Token上下文的限制,是无法一次性将整套知识库灌给ChatGPT的。这就要求我们想办法将数据“剪枝”,而剪枝的方法就是将用户的“问题”和知识库中可能的“段落上下文”联系起来。
4/12
首先,用户的提问肯定是包含意图的,比如他问“我如何登录?”,这个问题明显是“登录”这个意图,而如果我们知识库中有关于解答“如何登录”的相关文章段落,就可以将这个段落抽取出来,作为prompt上下文,连带用户的提问发给ChatGPT。他就可以基于上下文给出特定问题的答案。
5/12
这里最关键的是两步:

1.识别用户意图

2.匹配知识库中相同或相近意图的段落并将上下文抽取出来

要实现这两步,首先需要解释一下文本的向量化存储。
6/12
向量化存储非常重要,你可以简单理解为将文本段落转化为一个个向量的过程,而由于向量和向量之间是可以计算余弦角度的,角度越小,文本在语义层面就越接近。

这样,我们就可以将用户输入计算出来的向量,和知识库中的向量集合进行比较,从而找到用户意图和知识库匹配的段落。
7/12
假设下图是我们从知识库中找到的和“登录”有关的段落:
8/12
通过计算用户提问和知识库段落之间的向量相似度,我们就可以将高相似度的段落抽取出来,作为上下文放入prompt中,同时放入prompt中的还有“角色信息”和“用户提问”。

这样把封好的prompt整体发给ChatGPT,它就能根据这些信息,给出答复:
9/12
最后,有两点需要注意的地方:

1.由于用户提问经常比较简单,语义可能匹配错误,在回答准确度要求比较高的产品上,我觉得可以通过引导问答的方式先明确用户的意图,再做意图的匹配。
10/12
2.为了避免用户提的问题和知识库完全不相关,给出离谱的答案,可以考虑在计算余弦相似度时有一定的阈值,如果相似度太低则直接给用户固定的答复,例如:很抱歉,您的问题我暂时无法回答,请问您需要转人工客服吗?
11/12
以上,只是理论上聊了下构建一个知识库问答机器人的思路,工程化实现的话肯定还有很多细节,并且也有一些工具例如 #langchain #LlamaIndex 可以帮助我们提升构建效率。

本文章参考的部分资料:
learnprompting.org/zh-Hans/docs/a…
platform.openai.com/docs/guides/em…
12/12
最后说明下,我本人并没有做过AI和机器学习领域相关的理论研究,如果本文有哪里讲的不准确或错误,请看到的大佬帮忙指正!

另外,我最近正在酝酿做AI相关的创业小项目,有兴趣的同学也欢迎勾搭,一起交流想法。

觉得本文有帮助的同学,麻烦帮忙点赞、转发第一条推:

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Stephan

Stephan Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @StephanCptMax

Mar 7
主流稳定币数据跟踪

数据含义:
1.直方图值<0:代表MACD线小于信号线,长期利空趋势
2.直方图值>0:代表MACD线大于信号线,长期利好趋势
3.直方图深色:代表环比加速,深绿短期利好趋势
4.直方图浅色:代表环比减速,浅绿短期利空趋势

详细说明:


#stablecoin #稳定币
上周数据:

USDT供应直方图,上周继续上升。当前处在长期中性+短期利好趋势
Mcap/TVL

Mcap/TVL是稳定币的总市值和TVL的比值,反应了链上稳定币的资金使用率情况。
使用率越高Mcap/TVL比值越小,代表市场情绪倾向乐观,
使用率越低Mcap/TVL比值越大,代表市场情绪倾向悲观。
Read 5 tweets
Feb 28
AI提示工程(PE)小技巧系列第四篇:自然语言编程

今天看到特斯拉前AI主管说过的一句话:The hottest new programming language is English.

我认为这里的"English"可以改为"natural language"

今天就来实验下:👇🧵

#AI #ChatGPT #promptengineering

之前的三篇,没看过的朋友可以回顾一下:
首先,我这里有如下图文本,我希望将此文本中的“时间”和“事件”分组聚合显示。首先,给出明确的指令、格式要求、以及输入内容:

可以看到,ChatGPT给出的答案不全,且有错误
利用前面讲过的Few-Shot技巧,给出几个示例:
Read 8 tweets
Feb 28
主流稳定币数据跟踪

数据含义:
1.直方图值<0:代表MACD线小于信号线,长期利空趋势
2.直方图值>0:代表MACD线大于信号线,长期利好趋势
3.直方图深色:代表环比加速,红色短期利空趋势
4.直方图浅色:代表环比减速,粉色短期利好趋势

详细说明:


#stablecoin #稳定币
上周数据:
USDT供应直方图,突破0轴后,上周继续上升。当前处在长期中性+短期利好趋势
Mcap/TVL

Mcap/TVL是稳定币的总市值和TVL的比值,反应了链上稳定币的资金使用率情况。
使用率越高Mcap/TVL比值越小,代表市场情绪倾向乐观,
使用率越低Mcap/TVL比值越大,代表市场情绪倾向悲观。
Read 4 tweets
Feb 27
AI提示工程(PE)小技巧系列第三篇:回答的多样性

有没有发现有时我们需要简单且明确的答案,ChatGPT却给出了非常“发散”的答案?
又或者我们有时希望他的回答能更具有“多样性”和“创造性”一些?今天就来聊聊这个👇🧵

#AI #ChatGPT #promptengineering

之前的两篇,没有看过的朋友可以回顾一下:
对于同样的问题,ChatGPT会有很多备选的不同答案,而这些答案在“创造性”和“可预测性”之间的选择是由“温度”来控制的。

“温度”是一个从0~1的值,温度越低,代表可预测性越强,答案会更加单一明确;温度越高,代表创造性越强,答案会更加多样化。 Image
在API中我们可以直接通过参数控制“温度”值的高低。
在网页中和ChatGPT对话时,虽然不能直接控制,但我们可以通过Prompt技巧来让ChatGPT调整结果的多样性,如下图举例: ImageImage
Read 6 tweets
Feb 25
AI提示工程(PE)小技巧系列第二篇:如何让ChatGPT写长文

在使用免费版的ChatGPT过程中,如果我们想要针对一个主题让ChatGPT写一篇长文的话,经常会发现几轮问答下来它的连贯性就不好了。好像ChatGPT对上下文的“记忆力”不太好。以下是原因及一些解决方法👇
#AI #ChatGPT #promptengineering
原因

ChatGPT有最大token数量的限制,token的定义如下图。

免费版API中,最大token上限是2048。也就是说一个API账号,能够“记住”的最大上下文信息是2048个token。对于记忆顺序,我猜大致是记新忘旧的。

注意,在对话过程中,用户的输入+ChatGPT的回答内容都会计算token。 Image
那么,如果需要让ChatGPT写长文,我们需要做的就是保障在2048个token内,有我们需要的所有必要信息。
Read 8 tweets
Feb 24
AI提示工程(PE)小技巧——思维链(CoT)提示

提示工程(prompt engineering, PE)讲的是如何同AI交流,并得到你要的结果。我认为在未来,这方面的知识储备,就像英语一样,属于必备技能了。所以下面会定期将我学习的PE相关知识分享给大家👇

我的学习内容来源:
learnprompting.org/zh-Hans/docs/i…
ChatGPT面对一些逻辑问题有时会出错,为什么?能否优化?
能否“教”ChatGPT怎么思考,怎么推理?

首先,针对特定问题,我们可以“教”它怎么推理,这叫思维链(CoT)提示。
我们可以先以问答的形式,给出一个示例,并且答案中写明推理过程。这样可以有效提升ChatGPT在同类问题上的回答正确率。 Image
思维链提示实验1:

如下示例中,确实提示了推理过程,但实际问题中出现了“半小时”、“1小时”这种不同单位的词,ChatGPT给出的答案错误: Image
Read 5 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(