物流行业信息咨询智能问答系统
2025-09-20 15:58 dribs 阅读(0) 评论(0) 收藏 举报背景
练手rag项目
LLM都是基于过去的经验数据进行训练完成;无法处理获取实时的信息,需结合RAG实现;处理私域的数据
流程原理
项目流程
依赖关系
langchain==0.1.20 faiss-gpu==1.7.2 sentence-transformers==2.2.2
执行结果
目录结构
tree . ├── faiss │ ├── camp │ │ ├── index.faiss │ │ └── index.pkl │ └── logistics │ ├── index.faiss │ └── index.pkl ├── get_vector.py ├── m3e-base │ ├── 1_Pooling │ │ └── config.json │ ├── config.json │ ├── gitattributes │ ├── model.safetensors │ ├── modules.json │ ├── pytorch_model.bin │ ├── sentence_bert_config.json │ ├── special_tokens_map.json │ ├── tokenizer.json │ ├── tokenizer_config.json │ └── vocab.txt ├── main.py ├── model.py ├── new_demo.py ├── test.py └── 物流信息.txt
main.py
# coding:utf-8 # 导入必备的工具包 from langchain.prompts import PromptTemplate from get_vector import * from model import ChatGLM2 # 加载FAISS向量库 EMBEDDING_MODEL = './m3e-base' embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL) db = FAISS.load_local(r'faiss/camp',embeddings,allow_dangerous_deserialization=True)def get_related_content(related_docs):related_content = []for doc in related_docs:related_content.append(doc.page_content.replace('\n\n', '\n'))return '\n'.join(related_content)def define_prompt():question = '我买的商品ABC123456来自于哪个仓库,从哪出发的,预计什么到达'docs = db.similarity_search(question, k=1)# print(f'docs-->{docs}')related_docs = get_related_content(docs)# 构建模板PROMPT_TEMPLATE = """基于以下已知信息,简洁和专业的来回答用户的问题。不允许在答案中添加编造成分。已知内容:{context}问题:{question}"""prompt = PromptTemplate(input_variables=["context", "question"],template=PROMPT_TEMPLATE)my_prompt = prompt.format(context=related_docs,question=question)return my_promptdef qa():llm = ChatGLM2()llm.load_model(r'../../pretrain/model/chatglm2-6b-int4')my_prompt = define_prompt()result = llm(my_prompt)return resultif __name__ == '__main__':result = qa()print(f'result-->{result}')
get_vector.py
from langchain_community.document_loaders import UnstructuredFileLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import FAISS # 向量数据库 # from langchain.document_loaders import UnstructuredFileLoader # from langchain.text_splitter import RecursiveCharacterTextSplitter # from langchain.embeddings import HuggingFaceEmbeddings # from langchain.vectorstores import FAISS # 向量数据库def main():# 定义向量模型路径EMBEDDING_MODEL = './m3e-base'# 第一步:加载文档:loader = UnstructuredFileLoader('物流信息.txt')data = loader.load()# print(f'data-->{data}')# 第二步:切分文档:text_split = RecursiveCharacterTextSplitter(chunk_size=128,chunk_overlap=4)split_data = text_split.split_documents(data)# print(f'split_data-->{split_data}')# 第三步:初始化huggingface模型embeddingembeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL)# 第四步:将切分后的文档进行向量化,并且存储下来db = FAISS.from_documents(split_data, embeddings)db.save_local('./faiss/camp')return split_dataif __name__ == '__main__':split_data = main()print(f'split_data-->{split_data}')
model.py
from langchain.llms.base import LLM from langchain.llms.utils import enforce_stop_tokens from transformers import AutoTokenizer, AutoModel from typing import List, Optional, Any# 自定义GLM类 class ChatGLM2(LLM):max_token: int = 4096temperature: float = 0.8top_p = 0.9tokenizer: object = Nonemodel: object = Nonehistory = []def __init__(self):super().__init__()@propertydef _llm_type(self) -> str:return "custom_chatglm2"# 定义load_model的方法def load_model(self, model_path=None):# 加载分词器self.tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)# 加载模型self.model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()# 定义_call方法:进行模型的推理def _call(self,prompt: str, stop: Optional[List[str]] = None) -> str:response, _ = self.model.chat(self.tokenizer,prompt,history=self.history,temperature=self.temperature,top_p=self.top_p)if stop is not None:response = enforce_stop_tokens(response, stop)self.history = self.history + [[None, response]]return responseif __name__ == '__main__':llm = ChatGLM2()llm.load_model(model_path=r'../../pretrain/model/chatglm2-6b-int4')print(f'llm--->{llm}')print(llm("1+1等于几?"))
物流信息.txt
物流公司:速达物流 公司总部:北京市 业务范围:国际快递、仓储管理货物追踪: - 货物编号:ABC123456 - 发货日期:2024-06-15 - 当前位置:上海分拨中心 - 预计到达日期:2024-06 -20运输方式: - 运输公司:快运通 - 运输方式:陆运 - 出发地:广州 - 目的地:重庆 - 预计运输时间:3天仓储信息: - 仓库名称:东方仓储中心 - 仓库位置:深圳市 - 存储货物类型:电子产品 - 存储条件:常温仓储 - 当前库存量:1000件
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908424.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
插座(SOCKET)
程序用来“上网说话”的工具。1:什么是套接字?
应用程序与网络协议栈之间进行数据收发的编程接口(API)
2.如何理解?
应用程序需要套接字才能接入网络,与其他计算机上的程序进行通信(插座---->电器需要插入插…
线性代数 行列式 | 子式 / 主子式 / 顺序主子式 / 余子式 / 代数余子式 - 教程
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
Red Hat 8.5.0-18 部署ceph文件系统 - 实践
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
kettle从入门到精通 第108课 ETL之kettle 国产麒麟系统安装kettle教程
场景:最近vip群小伙伴在国产麒麟系统安装kettle时遇到无法正常启动的问题,今天周末远程连麦小伙伴一起解决此问题,梳理成章,方便后续小伙伴。 1、报错信息
国产麒麟系统安装kettle时遇到无法正常启动,提示错误信息…
部署 Squid 代理服务
安装 Squid:
sudo apt install squid编辑配置文件:
sudoedit /etc/squid/squid.confhttp_port 3128启动 Squid 服务
sudo systemctl start squid
sudo systemctl enable squid
k8s--etcd - 详解
k8s--etcd - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Cou…
HBase 的自带命令行工具 hbase shell 的基本使用
1. 进入 HBase Shell
首先,通过以下命令连接到您的 HBase 集群命令行界面:
hbase shell
连接成功后,提示符会变为 hbase(main):001:0>,表示您已经可以在里面执行 HBase 专属命令了。
2. 查看集群状态和表列表(…
市场交易反心理特征之一:太过完美而不敢买入
市场交易的最大特点就是“反心理”性。经常盘后看起来非常简单的事情,在盘前、盘中都会变得莫名复杂。明明盘前根据自己的交易策略可以轻松选出的牛股,开盘后没买,买了另一个,结果牛股涨停,买的票要么下跌,要么不…
3peak DCDC转换芯片选型列表
Part Number
Subcategory
VIN (V)
Output (V)
Max Output Current (A)
PackageTPE15017
以太网供电
24~57
/
/
QFN3X4-19TPM1525
功率级DrMOS
7~140
/
1
SOP8TPM6501
隔离电源
2.5~25
/
1
SOT23-5TPM6501Q
隔离电源
2.…
重塑公司绩效管理的 6 种方法
有远见的公司开始了解绩效管理的真正潜力。通过将传统绩效管理转变为持续绩效管理——建立在定期签到、持续反馈和认可时刻的基础上——公司可以通过让员工发挥最大潜力来优化绩效。
1、通过真实和积极的文化建立信任基…
详细介绍:从“下山”到AI引擎:全面理解梯度下降(上)
详细介绍:从“下山”到AI引擎:全面理解梯度下降(上)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…
flask下的MySQL增删改查
flask下的MySQL增删配置
添加数据
@app.route(/add)
def add_data():u = UserInfo()new_user1 = UserInfo(nickname=flask_test1, mobile=13888888888, signature=理想, create_time=datetime.now(), role_id=1)new_us…
tips图解数组名与指针的关系
在图解前需要先了解一下数组退化为指针的相关内容,下面先陈述数组退化为指针的概念、本质、以及什么情况下数组会退化为指针,什么情况下不会
概念定义
"数组名退化为指针"是C/C++语言中的一个重要特性,指…
Confluent-Kafka-go 发布超过 1M 消息失败困难克服
Confluent-Kafka-go 发布超过 1M 消息失败困难克服2025-09-20 15:34
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…
mysql查看数据库大小,可以通过查询系统表来实现
要查看 MySQL 数据库的大小,可以通过查询系统表 information_schema.tables 来实现,以下是具体方法:查看所有数据库的大小
sql
SELECT
table_schema AS 数据库名,
ROUND(SUM(data_length + index_length) / 1024 / …
TPP21206替代MPQ8633,12A电流同步降压DCDC
TPP21206是2.7V至16V输入,集成远端反馈和精确电流保护的同步降压变换器,稳态可持续输出12A的负载电流,广泛应用于服务器、交换机和光模块等应用中。TPP21206采用了思瑞浦自主研发的定频COT控制架构,在实现传统自适应…
组件重新装载时 useSWR 会发起请求
默认情况下,组件重新装载时 useSWR 会发起请求。这是 SWR "stale-while-revalidate" 设计哲学的一部分。
重新装载时的行为
function MyComponent() {const { data } = useSWR(/api/data, fetcher)// 组件卸…
kettle插件-kettle数据清洗插件,轻松处理脏数据
前面我们已经介绍了很多kettle插件,每个kettle插件都它的使用场景,我们在做数据同步ETL的过程中,势必要处理一些脏数据,把数据质量提高。今天我们一起来学习这这款数据清洗插件。
1、转换设计
1)生成记录 模拟数据…
Java 如何在 Excel 中添加超链接?使用 Spire.XLS for Java 轻松实现 - 教程
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …