项目介绍:
“易速鲜花”作为一个大型在线鲜花销售平台,有自己的业务流程和规范,也拥有针对员工的SOP手册。新员工入职培训时,会分享相关的信息。但是,这些信息分散于内部网和HR部门目录各处,有时不便查询;有时因为文档过于冗长,员工无法第一时间找到想要的内容;有时公司政策已更新,但是员工手头的文档还是旧版内容。
基于上述需求,我们将开发一套基于各种内部知识手册的 “Doc-QA” 系统。这个系统将充分利用LangChain框架,处理从员工手册中产生的各种问题。这个问答系统能够理解员工的问题,并基于最新的员工手册,给出精准的答案。
项目结构的图我直接把课程的粘过来了:
整个框架分为这样三个部分。
数据源(Data Sources):数据可以有很多种,包括PDF在内的非结构化的数据(Unstructured Data)、SQL在内的结构化的数据(Structured Data),以及Python、Java之类的代码(Code)。在这个示例中,我们聚焦于对非结构化数据的处理。 大模型应用(Application,即LLM App):以大模型为逻辑引擎,生成我们所需要的回答。 用例(Use-Cases):大模型生成的回答可以构建出QA/聊天机器人等系统。
我个人的理解就是,相当于LLM充当了一个中介,你问什么,它就去查文档,和你提问的内容越近似,他就越可能返回这个结果(文段)
核心实现机制:
具体流程分为下面5步。
Loading:文档加载器把Documents 加载为以LangChain能够读取的形式。 Splitting:文本分割器把Documents 切分为指定大小的分割,我把它们称为“文档块”或者“文档片”。 Storage:将上一步中分割好的“文档块”以“嵌入”(Embedding)的形式存储到向量数据库(Vector DB)中,形成一个个的“嵌入片”。 Retrieval:应用程序从存储中检索分割后的文档(例如通过比较余弦相似度,找到与输入问题类似的嵌入片)。 Output:把问题和相似的嵌入片传递给语言模型(LLM),使用包含问题和检索到的分割的提示生成答案。
总结就是翻译
然后数据的准备和载入以及怎么操作这里也不过多赘述了。
后面我讲一下自己前段时间一直在本地PyCharm无法运行这个项目的情况
问题:
我在飞书上面是这么提问的,而具体的报错日志是这样输出的:
volcenginesdkarkruntime._exceptions.ArkInternalServerError: Error code: 500 - {'error': {'code': 'InternalServiceError', 'message': 'The service encountered an unexpected internal error. Request id: 02173098197173876580aba8475a41c550bbf05104842f0cac56e', 'param': '', 'type': 'InternalServerError'}}, request_id: 20241107201933hcfvIE6j9HpBpf4Lmc48
进程已结束,退出代码1
然后我就复制粘贴到gpt询问(毕竟前面的问题我都是靠它解决的)
gpt给我的反馈如上,这个回答其实跟没讲一样,因为我隐约猜到了这跟调用api要用到的参数有关,但是我实在不知道怎么去问它……那句话怎么说来着,人无法想象自己没见过的事物,没那么夸张,但我确实是第一次接触这个东西。
解决方法:
与其说是解决方法,倒不如说是我找到了这个不是bug的bug产生在了哪个地方,正如我前面猜想的,在于调用api的那一段代码,准确的来说,是我模型用错了,这个工程用到的模型是需要Embedding模型,而我呢? 由于先入为主的原因——指看了课程代码的readme文件的原因,我在创建api和创建接入点的时候,使用的是
所以我的解决方案就是,重新创建一个新的接入点,选择模型
然后把节点的model_endpoint粘回原本代码的os.environ["EMBEDDING_MODELEND"]=‘你的model_endpoint’
至此,开Run
` * Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://192.168.7.64:5000
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with stat`
问题解决,舒服了