DashVector x 通义千问大模型:打造基于专属知识的问答服务
![DashVector x 通义千问大模型:打造基于专属知识的问答服务](https://static001.geekbang.org/infoq/96/96dda492a570d7a7516722c4d3851bb7.jpeg)
本教程演示如何使用向量检索服务(DashVector),结合 LLM 大模型等能力,来打造基于垂直领域专属知识等问答服务。其中 LLM 大模型能力,以及文本向量生成等能力,这里基于灵积模型服务上的通义千问 API 以及 Embedding API 来接入。
背景及实现思路
大语言模型(LLM)作为自然语言处理领域的核心技术,具有丰富的自然语言处理能力。但其训练语料库具有一定的局限性,一般由普适知识、常识性知识,如维基百科、新闻、小说,和各种领域的专业知识组成。导致 LLM 在处理特定领域的知识表示和应用时存在一定的局限性,特别对于垂直领域内,或者企业内部等私域专属知识。
实现专属领域的知识问答的关键,在于如何让 LLM 能够理解并获取存在于其训练知识范围外的特定领域知识。同时可以通过特定 Prompt 构造,提示 LLM 在回答特定领域问题的时候,理解意图并根据注入的领域知识来做出回答。在通常情况下,用户的提问是完整的句子,而不像搜索引擎只输入几个关键字。这种情况下,直接使用关键字与企业知识库进行匹配的效果往往不太理想,同时长句本身还涉及分词、权重等处理。相比之下,倘若我们把提问的文本,和知识库的内容,都先转化为高质量向量,再通过向量检索将匹配过程转化为语义搜索,那么提取相关知识点就会变得简单而高效。
接下来我们将基于中文突发事件语料库CEC Corpus)演示关于突发事件新闻报道的知识问答。
整体流程
![](https://static001.geekbang.org/infoq/40/40083a7a5e2ff9a92da83c28c493abf8.png)
主要分为三个阶段:
本地知识库的向量化 。通过文本向量模型将其转化为高质量低维度的向量数据,再写入 DashVector 向量检索服务。这里数据的向量化我们采用了灵积模型服务上的 Embedding API 实现。
2. 相关知识点的提取 。将提问文本向量化后,通过 DashVector 提取相关知识点的原文。
3. 构造 Prompt 进行提问 。将相关知识点作为"限定上下文+提问" 一起作为 prompt 询问通义千问。
前提准备
1. API-KEY 和 Cluster 准备
开通灵积模型服务,并获得 API-KEY。请参考:开通DashScope并创建API-KEY。
开通 DashVector 向量检索服务,并获得 API-KEY。请参考:DashVector API-KEY管理。
开通 DashVector 向量检索服务,并创建Cluster。
获取 Cluster 的 Endpoint,Endpoint 获取请查看 Cluster详情。
说明
灵积模型服务 DashScope 的 API-KEY 与 DashVector 的 API-KEY 是独立的,需要分开获取。
2. 环境准备
说明
需要提前安装 Python3.7 及以上版本,请确保相应的 python 版本。
3. 数据准备
搭建步骤
说明
本教程所涉及的 your-xxx-api-key 以及 your-xxx-cluster-endpoint ,均需要替换为您自己的 API-KAY 及 CLUSTER_ENDPOINT 后,代码才能正常运行。
1. 本地知识库的向量化
CEC-Corpus数据集包含 332 篇突发事件的新闻报道的语料和标注数据,这里我们只需要提取原始的新闻稿文本,并将其向量化后入库。文本向量化的教程可以参考《基于向量检索服务与灵积实现语义搜索》。创建embedding.py
文件,并将如下示例代码复制到embedding.py
中:
在示例中,我们将 Embedding 向量和新闻报道的文稿(作为 raw 字段)一起存入 DashVector 向量检索服务中,以便向量检索时召回原始文稿。
2. 知识点的提取
将 CEC-Corpus 数据集所有新闻报道写入 DashVector 服务后,就可以进行快速的向量检索。实现这个检索,我们同样将提问的问题进行文本向量化后,再在 DashVector 服务中检索最相关的知识点,也就是相关新闻报道。创建search.py
文件,并将如下示例代码复制到search.py
文件中。
3. 构造 Prompt 向 LLM(通义千问)提问
在通过提问搜索到相关的知识点后,我们就可以将 "提问 + 知识点" 按照特定的模板作为 prompt 向 LLM 发起提问了。在这里我们选用的 LLM 是通义千问,这是阿里巴巴自主研发的超大规模语言模型,能够在用户自然语言输入的基础上,通过自然语言理解和语义分析,理解用户意图。可以通过提供尽可能清晰详细的指令(prompt),来获取更符合预期的结果。这些能力都可以通过通义千问API来获得。
具体我们这里设计的提问模板格式为: 请基于我提供的内容回答问题。内容是{},我的问题是{} ,当然您也可以自行设计合适的模板。创建answer.py
,并将如下示例代码复制到answer.py
中。
知识问答
做好这些准备工作以后,就可以对 LLM 做与具体知识点相关的提问了。比如在 CEC-Corpus 新闻数据集里,有如下一篇报道。因为整个新闻数据集已经在之前的步骤里,转换成向量入库了,我们现在就可以把这个新闻报道作为一个知识点,做出针对性提问:海南安定追尾事故,发生在哪里?原因是什么?人员伤亡情况如何?,并查看相应答案。
![](https://static001.geekbang.org/infoq/49/499baff4b16b67c753194cf938c36b83.png)
创建run.py
文件,并将如下示例代码复制到run.py
文件中。
![](https://static001.geekbang.org/infoq/d3/d3bd2d3b8b8d47e3a99ea127a2499032.png)
可以看到,基于 DashVector 作为向量检索的底座,LLM 大模型的知识范畴得到了针对性的扩展,并且能够对于专属的特定知识领域做出正确的回答。
写在最后
从本文的范例中,可以看到 DashVector 作为一个独立的向量检索服务,提供了开箱即用的强大向量检索服务能力,这些能力和各个 AI 模型结合,能够衍生多样的 AI 应用的可能。这里的范例中,LLM 大模型问答,以及文本向量生成等能力,都是基于灵积模型服务上的通义千问 API 和 Embedding API 来接入的,在实际操作中,相关能力同样可以通过其他三方服务,或者开源模型社区,比如 ModelScope 上的各种开源LLM模型来实现。
免费体验阿里云高性能向量检索服务:https://www.aliyun.com/product/ai/dashvector
版权声明: 本文为 InfoQ 作者【DashVector】的原创文章。
原文链接:【http://xie.infoq.cn/article/959c5c7f747bf86e04b0528ae】。文章转载请联系作者。
评论