第三节 茴香豆:搭建你的 RAG 智能助理 作业

1. 在茴香豆 Web 版中创建自己领域的知识问答助手

上传安全运营的文档。
在这里插入图片描述
某些内容会屏蔽。问的内容是太宽泛也会回答失败。
在这里插入图片描述
未添加排除项时:
在这里插入图片描述
添加了:

  • 今天天气怎么样?
  • 有哪些推荐的餐厅?
  • 有哪些生活建议?
    之后的效果:
    在这里插入图片描述
    总体来讲,效果不错,但有进步空间。

2.在 InternLM Studio 上部署茴香豆技术助手

  • 配置环境
    使用上节课的demo环境
(base) root@intern-studio-160702:/opt/jupyterlab# conda env list
# conda environments:
#
base                  *  /root/.conda
demo                     /root/.conda/envs/demo

(base) root@intern-studio-160702:/opt/jupyterlab# conda activate demo
(demo) root@intern-studio-160702:/opt/jupyterlab# python --version
Python 3.10.13

同时安装新增依赖。

  • 克隆仓库
cd /root
# 下载 repo
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 447c6f7e68a1657fce1c4f7c740ea1700bde0440
  • 创建知识库
    示例中,使用 InternLM 的 Huixiangdou 文档作为新增知识数据检索来源,在不重新训练的情况下,打造一个 Huixiangdou 技术问答助手。
    提取知识库特征,创建向量数据库。数据库向量化的过程应用到了 LangChain 的相关模块,默认嵌入和重排序模型调用的网易 BCE 双语模型

除了语料知识的向量数据库,茴香豆建立接受和拒答两个向量数据库,用来在检索的过程中更加精确的判断提问的相关性,这两个数据库的来源分别是:
1.接受问题列表,希望茴香豆助手回答的示例问题

2.拒绝问题列表,希望茴香豆助手拒答的示例问题。其中多为技术无关的主题或闲聊。
如:“nihui 是谁”, “具体在哪些位置进行修改?”, “你是谁?”, “1+1”

  • 在确定好语料来源后,创建 RAG 检索过程中使用的向量数据库。
# 创建向量数据库存储目录
cd /root/huixiangdou && mkdir workdir 

# 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
python3 -m huixiangdou.service.feature_store --sample ./test_queries.json
  • 运行茴香豆知识助手
    可以看到,回答还有个预演过程。
    在这里插入图片描述
    在这里插入图片描述
    对于,天气,能判定不相关,因此不回答。
    在这里插入图片描述

3.进阶作业(待完善)

3.1 利用 Gradio 搭建网页 Demo

用 Gradio 搭建一个自己的网页对话 Demo。

首先,安装 Gradio 依赖组件:

pip install gradio==4.25.0 redis==5.0.3 flask==3.0.2 lark_oapi==1.2.4

运行脚本,启动茴香豆对话 Demo 服务:

cd /root/huixiangdou
python3 -m tests.test_query_gradio 

此时服务器端接口已开启。如果在本地服务器使用,直接在浏览器中输入 127.0.0.1:7860 ,即可进入茴香豆对话 Demo 界面。
在这里插入图片描述
在这里插入图片描述
对比两个回答,问题只是在“u”和“是”之间多了个空格,回答便会有差异。

分析

茴香豆回答流程如下:先用模型判断是否为主题疑问句。

  • (‘“huixiangdou是什么?”\n请仔细阅读以上内容,判断句子是否是个有主题的疑问句,结果用 0~10 表示。直接提供得分不要解释。\n判断标准:有主语谓语宾语并且是疑问句得 10 分;缺少主谓宾扣分;陈述句直接得 0 分;不是疑问句直接得 0 分。直接提供得分不要解释。’,‘根据您提供的信息,我无法对“huixiangdou”进行定义,因为该词在中文中没有明显的含义。如果您能提供更具体的信息或上下文,我将很乐意帮助您。’)
  • (‘“huixiangdou 是什么?”\n请仔细阅读以上内容,判断句子是否是个有主题的疑问句,结果用 0~10 表示。直接提供得分不要解释。\n判断标准:有主语谓语宾语并且是疑问句得 10 分;缺少主谓宾扣分;陈述句直接得 0 分;不是疑问句直接得 0 分。直接提供得分不要解释。’, ‘根据您提供的内容,我无法判断"huixiangdou 是什么?" 这个句子的主题,因为它不包含任何有关于主题的信息。所以,我无法给出 0~10 的分数。请提供更具体的信息,以便我能够更准确地评估。’)
  • (‘“茴香豆 是什么?”\n请仔细阅读以上内容,判断句子是否是个有主题的疑问句,结果用 0~10 表示。直接提供得分不要解释。\n判断标准:有主语谓语宾语并且是疑问句得 10 分;缺少主谓宾扣分;陈述句直接得 0 分;不是疑问句直接得 0 分。直接提供得分不要解释。’,‘0’)

错误来源

在这里插入图片描述
分析代码:

relation = self.llm.generate_response(prompt=prompt, backend='local')
        tracker.log('score', [relation, throttle, default])
        filtered_relation = ''.join([c for c in relation if c.isdigit()])
        try:
            score_str = re.sub(r'[^\d]', ' ', filtered_relation).strip()
            score = int(score_str.split(' ')[0])
        except Exception as e:
            logger.error(str(e))
        if score >= throttle:
            return True
        return False

“huixiangdou是什么?”这个问题由于回答没有数字报错,而“huixiangdou 是什么?”这个问题回答有==“0~10”==,弄巧成拙会提取成010,最后是十分,刚好能继续后面的流程。而“茴香豆 是什么?”这个问题,判断错误为0分,也终止问答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值