当前位置: 首页 > news >正文

【LLM实战】RAG高级

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

RAG高级

1. RAG 高效召回方法

  1. 合理设置TOP-K
  2. 改进索引算法
    -知识图谱
  3. 引入重排序
    • 重排序模型
      • BGE-Rerank
      • Cohere Rerank
    • 混合检索
      • 向量索引+关键词索引,然后进行重排序进行归一化处理
  4. 优化查询扩展
    • 使用大模型将用户查询改写成多个语义相近的查询
      • eg: langchain mulitiQueryRetriever支持多查询召回
import os
from langchain.retrievers import MultiQueryRetriever
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.llms import Tongyi# 初始化大语言模型
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
llm = Tongyi(model_name="qwen-max", dashscope_api_key=DASHSCOPE_API_KEY
)# 创建嵌入模型
embeddings = DashScopeEmbeddings(model="text-embedding-v3",dashscope_api_key=DASHSCOPE_API_KEY
)# 加载向量数据库,添加allow_dangerous_deserialization=True参数以允许反序列化
vectorstore = FAISS.load_local("./vector_db", embeddings, allow_dangerous_deserialization=True)# 创建MultiQueryRetriever
retriever = MultiQueryRetriever.from_llm(retriever=vectorstore.as_retriever(),llm=llm
)# 示例查询
query = "客户经理的考核标准是什么?"
# 执行查询
results = retriever.get_relevant_documents(query)# 打印结果
print(f"查询: {query}")
print(f"找到 {len(results)} 个相关文档:")
for i, doc in enumerate(results):print(f"\n文档 {i+1}:")print(doc.page_content[:200] + "..." if len(doc.page_content) > 200 else doc.page_content)
C:\Users\13010\AppData\Local\Temp\ipykernel_90352\1204215366.py:32: LangChainDeprecationWarning: The method `BaseRetriever.get_relevant_documents` was deprecated in langchain-core 0.1.46 and will be removed in 1.0. Use :meth:`~invoke` instead.results = retriever.get_relevant_documents(query)查询: 客户经理的考核标准是什么?
找到 5 个相关文档:文档 1:
理待遇按照人事部门对付科级的待遇标准; 资深客户经理待遇 按照人
事部门对正科级的待遇标准。  
业绩奖励收入是指客户经理每个业绩考核期间的实际业绩所给
与兑现的奖金部分。  
日常工作绩效收入是按照个金客户经理所从事的事务性工作进
行定量化考核,经过工作的完成情况进行奖金分配。该项奖金主要由
个人金融部总经理和各支行的行长其从事个人金融业务的人员进行
分配,主要侧重分配于从事个金业务的基础工作和...文档 2:
评聘技术职务较低的市场人员,各级领导要加大培养力度,使其尽快百度文库  - 好好学习,天天向上  
-7 入围,并由所在行制定临时奖励办法。  第七章   考核待遇  
第十五条   个人金融业务客户经理的收入基本由三部分组成: 客
户经理等级基本收入、业绩奖励收入和日常工作绩效收入。  
客户经理等级基本收入是指客户经理的每月基本收入, 基本分为
助理客户经理、客户经理、高级客户经理和资深...文档 3:
培养后备业务骨干。  百度文库  - 好好学习,天天向上  
-3 第三章  基础素质要求  
第七条   个金客户经理准入条件:  
(一)工作经历:须具备大专以上学历,至少二年以上银行工作
经验。  
(二)工作能力:熟悉我行的各项业务,了解市场情况,熟悉各
类客户的金融需求,熟悉个人理财工具,有一定的业务管理和客户管
理能力。  
(三)工作业绩:个金客户经理均应达到相应等级的准入标准。...文档 4:
百度文库  - 好好学习,天天向上  
-1 上海浦东发展银行西安分行  
个金客户经理管理考核暂行办法  第一章  总   则 
第一条   为保证我分行个金客户经理制的顺利实施,有效调动个
金客户经理的积极性,促进个金业务快速、稳定地发展,根据总行《上
海浦东发展银行个人金融营销体系建设方案(试行)》要求,特制定
《上海浦东发展银行西安分行个金客户经理管理考核暂行办法(试
行)》(以...文档 5:
工,都可向分行人力资源部申报个金客户经理评聘。  
第十一条   每年一月份为客户经理评聘的申报时间,由分行人力
资源部、个人业务部每年二月份组织统一的资格考试。考试合格者由
分行颁发个金客户经理资格证书,其有效期为一年。  
第十二条   客户经理聘任实行开放式、浮动制,即:本人申报  —
— 所在部门推荐  —— 分行考核  —— 行长聘任  —— 每年考评
调整浮动。   
第十三条   特...
  1. 双向改写
  • Query2Doc - Doc2Query (查询改写成文档,文档改写成查询)

1. Query2Doc:将查询改写成文档

  • 用户查询:“如何提高深度学习模型的训练效率?”

  • Query2Doc 改写:

    • 原始查询较短,可能无法充分表达用户意图。

    • 通过 Query2Doc 生成一段扩展文档:

      提高深度学习模型的训练效率可以从以下几个方面入手:

      1. 使用更高效的优化算法,如AdamW或LAMB。

      2. 采用混合精度训练(Mixed Precision Training),减少显存占用并加速计算。

      3. 使用分布式训练技术,如数据并行或模型并行。

      4. 对数据进行预处理和增强,减少训练时的冗余计算。

      5. 调整学习率调度策略,避免训练过程中的震荡。

2. Doc2Query:为文档生成关联查询

  • 文档内容:

    本文介绍了深度学习模型训练中的优化技巧,包括:

    1. 使用AdamW优化器替代传统的SGD。

    2. 采用混合精度训练,减少显存占用。

    3. 使用分布式训练技术加速大规模模型的训练……

  • 通过 Doc2Query 生成一组可能的查询:

    1. 如何选择深度学习模型的优化器?

    2. 混合精度训练有哪些优势?

    3. 分布式训练技术如何加速深度学习?

    4. 如何减少深度学习训练中的显存占用?

    5. 深度学习模型训练的最佳实践是什么?

  1. 索引扩展
  • 离散索引扩展: 使用关键词抽取、实体识别等技术生成离散索引,与向量检索互补,提升召回准确性。

  • 连续索引扩展: 结合多种向量模型(如OpenAI的Ada、智源的BGE)进行多路召回,取长补短。

  • 混合索引召回: 将BM25等离散索引与向量索引结合,通过Ensemble Retriever实现混合召回,提升召回多样性

  • small-to-big

2. Qwen-Agent构建RAG

# !pip install -U "qwen-agent[rag,code_interpreter,gui,mcp]"

2.1 单文档

文档:点击下载

import logging
import io
from qwen_agent.agents import Assistant# 创建一个自定义的日志处理器来捕获日志输出
class LogCapture:def __init__(self):self.log_capture_string = io.StringIO()self.log_handler = logging.StreamHandler(self.log_capture_string)self.log_handler.setLevel(logging.INFO)self.log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')self.log_handler.setFormatter(self.log_formatter)# 获取 qwen_agent 的日志记录器self.logger = logging.getLogger('qwen_agent_logger')self.logger.setLevel(logging.INFO)self.logger.addHandler(self.log_handler)# 也可以捕获根日志记录器的输出self.root_logger = logging.getLogger()self.root_logger.setLevel(logging.INFO)self.root_logger.addHandler(self.log_handler)def get_log(self):return self.log_capture_string.getvalue()def clear_log(self):self.log_capture_string.truncate(0)self.log_capture_string.seek(0)# 初始化日志捕获器
log_capture = LogCapture()# 步骤 1:配置您所使用的 LLM。
llm_cfg = {# 使用 DashScope 提供的模型服务:'model': 'qwen-max','model_server': 'dashscope','api_key': os.getenv("DASHSCOPE_API_KEY"),'generate_cfg': {'top_p': 0.8}
}# 步骤 2:创建一个智能体。这里我们以 `Assistant` 智能体为例,它能够使用工具并读取文件。
system_instruction = ''
tools = []
files = ['./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf']  # 给智能体一个 PDF 文件阅读。# 清除之前的日志
log_capture.clear_log()# 创建智能体
bot = Assistant(llm=llm_cfg,system_message=system_instruction,function_list=tools,files=files)# 步骤 3:作为聊天机器人运行智能体。
messages = []  # 这里储存聊天历史。
query = "客户经理被客户投诉一次,扣多少分?"
# 将用户请求添加到聊天历史。
messages.append({'role': 'user', 'content': query})
response = []
current_index = 0# 运行智能体
for response in bot.run(messages=messages):# 在第一次响应时,分析日志以查找召回的文档内容if current_index == 0:# 获取日志内容log_content = log_capture.get_log()print("\n===== 从日志中提取的检索信息 =====")# 查找与检索相关的日志行retrieval_logs = [line for line in log_content.split('\n') if any(keyword in line.lower() for keyword in ['retriev', 'search', 'chunk', 'document', 'ref', 'token'])]# 打印检索相关的日志for log_line in retrieval_logs:print(log_line)# 尝试从日志中提取文档内容# 通常在日志中会有类似 "retrieved document: ..." 或 "content: ..." 的行content_logs = [line for line in log_content.split('\n') if any(keyword in line.lower() for keyword in ['content', 'text', 'document', 'chunk'])]print("\n===== 可能包含文档内容的日志 =====")for log_line in content_logs:print(log_line)print("===========================\n")current_response = response[0]['content'][current_index:]current_index = len(response[0]['content'])print(current_response, end='')# 将机器人的回应添加到聊天历史。
messages.extend(response)# 运行结束后,分析完整的日志
print("\n\n===== 运行结束后的完整日志分析 =====")
log_content = log_capture.get_log()# 尝试从日志中提取更多信息
print("\n1. 关键词提取:")
keyword_logs = [line for line in log_content.split('\n') if 'keywords' in line.lower()]
for log_line in keyword_logs:print(log_line)print("\n2. 文档处理:")
doc_logs = [line for line in log_content.split('\n') if 'doc' in line.lower() or 'chunk' in line.lower()]
for log_line in doc_logs:print(log_line)print("\n3. 检索相关:")
retrieval_logs = [line for line in log_content.split('\n') if 'retriev' in line.lower() or 'search' in line.lower() or 'ref' in line.lower()]
for log_line in retrieval_logs:print(log_line)print("\n4. 可能包含文档内容的日志:")
content_logs = [line for line in log_content.split('\n') if 'content:' in line.lower() or 'text:' in line.lower()]
for log_line in content_logs:print(log_line)print("===========================\n")
2025-08-05 09:32:17,129 - memory.py - 130 - INFO - {"keywords_zh": ["客户经理", "投诉", "扣分"], "keywords_en": ["account manager", "complaint", "deduct points", "penalty"], "text": "客户经理被客户投诉一次,扣多少分?"}
2025-08-05 09:32:17,853 - simple_doc_parser.py - 430 - INFO - Read parsed ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf from cache.
2025-08-05 09:32:17,854 - doc_parser.py - 126 - INFO - Start chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf)...
2025-08-05 09:32:17,854 - doc_parser.py - 144 - INFO - Finished chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf). Time spent: 0.0 seconds.
2025-08-05 09:32:17,857 - base_search.py - 79 - INFO - all tokens: 2933
2025-08-05 09:32:17,857 - base_search.py - 82 - INFO - use full ref===== 从日志中提取的检索信息 =====
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Start chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf)...
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Start chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf)...
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Finished chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf). Time spent: 0.0 seconds.
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Finished chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf). Time spent: 0.0 seconds.
2025-08-05 09:32:17,857 - qwen_agent_logger - INFO - all tokens: 2933
2025-08-05 09:32:17,857 - qwen_agent_logger - INFO - all tokens: 2933
2025-08-05 09:32:17,857 - qwen_agent_logger - INFO - use full ref
2025-08-05 09:32:17,857 - qwen_agent_logger - INFO - use full ref===== 可能包含文档内容的日志 =====
2025-08-05 09:32:17,129 - qwen_agent_logger - INFO - {"keywords_zh": ["客户经理", "投诉", "扣分"], "keywords_en": ["account manager", "complaint", "deduct points", "penalty"], "text": "客户经理被客户投诉一次,扣多少分?"}
2025-08-05 09:32:17,129 - qwen_agent_logger - INFO - {"keywords_zh": ["客户经理", "投诉", "扣分"], "keywords_en": ["account manager", "complaint", "deduct points", "penalty"], "text": "客户经理被客户投诉一次,扣多少分?"}
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Start chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf)...
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Start chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf)...
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Finished chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf). Time spent: 0.0 seconds.
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Finished chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf). Time spent: 0.0 seconds.
===========================客户经理被客户投诉一次,扣2分。===== 运行结束后的完整日志分析 =====1. 关键词提取:
2025-08-05 09:32:17,129 - qwen_agent_logger - INFO - {"keywords_zh": ["客户经理", "投诉", "扣分"], "keywords_en": ["account manager", "complaint", "deduct points", "penalty"], "text": "客户经理被客户投诉一次,扣多少分?"}
2025-08-05 09:32:17,129 - qwen_agent_logger - INFO - {"keywords_zh": ["客户经理", "投诉", "扣分"], "keywords_en": ["account manager", "complaint", "deduct points", "penalty"], "text": "客户经理被客户投诉一次,扣多少分?"}2. 文档处理:
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Start chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf)...
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Start chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf)...
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Finished chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf). Time spent: 0.0 seconds.
2025-08-05 09:32:17,854 - qwen_agent_logger - INFO - Finished chunking ./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf (浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf). Time spent: 0.0 seconds.3. 检索相关:
2025-08-05 09:32:17,857 - qwen_agent_logger - INFO - use full ref
2025-08-05 09:32:17,857 - qwen_agent_logger - INFO - use full ref4. 可能包含文档内容的日志:
===========================

2.2 多文档

# RAG助手
import osdef get_file_list(folder_path):# 初始化文件列表file_list = []# 遍历文件夹for root, dirs, files in os.walk(folder_path):for file in files:# 获取文件的完整路径file_path = os.path.join(root, file)# 将文件路径添加到列表中file_list.append(file_path)return file_list# 获取指定知识库文件列表 
file_list = get_file_list('./docs')
file_list
['./docs\\1-平安商业综合责任保险(亚马逊).txt','./docs\\2-雇主责任险.txt','./docs\\3-平安企业团体综合意外险.txt','./docs\\4-雇主安心保.txt','./docs\\5-施工保.txt','./docs\\6-财产一切险.txt','./docs\\7-平安装修保.txt']

3. ragas 评估

3.1. 父文档检索器

文档切割时传统的做法是使用像CharacterTextSplitter, RecursiveCharacterTextSplitter这样的文档分割器将文档按指定的块大小(chunk_size)来均匀的切割文档,然后将每个文档块做向量化处理(Embedding)后将其保存到向量数据库中,而当我们在做文档检索时,会将用户的问题转换成的向量与向量数据库中的文档块的向量做相似度计算,并从中获取k个与用户问题向量相似度最高的文档块(也就是和用户问题相关的文档块),然后我们会把用户的问题以及相关的文档块一起发送给LLM, 最后LLM会给出一个对用户友好的回复。这就是一般的传统文档检索的方法。

传统检索方法其实存在一定的局限性,这是因为文档块的大小会影响和用户问题的匹配度,也就是说当我们切割的文档块越大时,它与用户问题的匹配度就会越低,当文档块越小时,它与用户问题的匹配度会越高,这是因为较大的文档块可能会包含较多的内容,当它被转换成一个固定维度的向量时,该向量可能不能够准确反应出该文档块中的所有内容,因而对用户问题的匹配度就会降低,而小的文档块包含的内容较少,当它被转换成一个固定维度的向量时,该向量基本能够准确反应出该文档块中的内容,因此它与用户问题的匹配度会教高,但是较小的文档块可能因为所包含的信息量较少,因而它可能不是一个全面且正确的答案。为了解决这些问题今天来介绍Langchain中的父文档检索器,它能够有效的解决文档块大小与用户问题匹配的问题。

由于我们在利用大模型进行文档检索的时候,常常会有相互矛盾的需求,比如:

  • 希望得到较小的文档块,以便它们Embedding以后能够最准确地反映出文档的含义,如果文档块太大,Embedding就失去了意义。
  • 希望得到较大的文档块以保留教多的内容,然后将它们发送给LLM以便得到全面且正确的答案。

面对这样矛盾的需求,Langchain的父文档检索器为我们提供了两种有效的解决方案:

  • 检索完整文档
  • 检索较大的文档块
3.2. 检索完整文档

所谓检索完整文档是指将原始文档均匀的切割成若干个较小的文档块,然后将它们与用户的问题进行匹配,最后将匹配到的文档块所在原始文档和用户问题一起发送给llm后由llm生成最终答案,如下图所示:

3.3. 检索较大的文档块

当原始文档比较大时,我们需要将原始文档按照两个层级进行切割,即切割成主文档块和子文档块,而用户的问题会与所有的子文档块进行匹配(相似度比较) ,当匹配到特定的子文档块后,将该子文档块所属的主文档块的全部内容以及用户问题发送给llm,最后由llm来生成答案。

# !pip install pypdf
# !pip install ragas
# !pip install langchain
# !pip install chromadb
from langchain.document_loaders import PyPDFLoaderdocs = PyPDFLoader("./浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf").load()
docs
[Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 0, 'page_label': '1'}, page_content='百度文库 - 好好学习,天天向上 \n-1 \n上海浦东发展银行西安分行 \n个金客户经理管理考核暂行办法 \n \n \n第一章  总   则 \n第一条  为保证我分行个金客户经理制的顺利实施,有效调动个\n金客户经理的积极性, 促进个金业务快速、 稳定地发展, 根据总行 《上\n海浦东发展银行个人金融营销体系建设方案(试行)》要求,特制定\n《上海浦东发展银行西安分行个金客户经理管理考核暂行办法(试\n行)》(以下简称本办法)。 \n第二条  个金客户经理系指各支行(营业部)从事个人金融产品\n营销与市场开拓,为我行个人客户提供综合银行服务的我行市场人\n员。 \n第三条  考核内容分为二大类, 即个人业绩考核、 工作质量考核。\n个人业绩包括个人资产业务、负债业务、卡业务。工作质量指个人业\n务的资产质量。 \n第四条  为规范激励规则,客户经理的技术职务和薪资实行每年\n考核浮动。客户经理的奖金实行每季度考核浮动,即客户经理按其考\n核内容得分与行员等级结合,享受对应的行员等级待遇。'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 1, 'page_label': '2'}, page_content='百度文库 - 好好学习,天天向上 \n-2 \n第二章  职位设置与职责 \n第五条  个金客户经理职位设置为:客户经理助理、客户经理、\n高级客户经理、资深客户经理。 \n第六条  个金客户经理的基本职责: \n(一)  客户开发。研究客户信息、联系与选择客户、与客户建\n立相互依存、相互支持的业务往来关系,扩大业务资源,创造良好业\n绩; \n(二)业务创新与产品营销。把握市场竞争变化方向,开展市场\n与客户需求的调研,对业务产品及服务进行创新;设计客户需求的产\n品组合、制订和实施市场营销方案; \n(三)客户服务。负责我行各类表内外授信业务及中间业务的受\n理和运作,进行综合性、整体性的客户服务; \n(四)防范风险,提高收益。提升风险防范意识及能力,提高经\n营产品质量; \n(五)培养人材。在提高自身综合素质的同时,发扬团队精神,\n培养后备业务骨干。'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 2, 'page_label': '3'}, page_content='百度文库 - 好好学习,天天向上 \n-3 \n第三章  基础素质要求 \n第七条  个金客户经理准入条件: \n(一)工作经历:须具备大专以上学历,至少二年以上银行工作\n经验。 \n(二)工作能力:熟悉我行的各项业务,了解市场情况,熟悉各\n类客户的金融需求,熟悉个人理财工具,有一定的业务管理和客户管\n理能力。 \n(三)工作业绩:个金客户经理均应达到相应等级的准入标准。\n该标准可根据全行整体情况由考核部门进行调整。 \n(四)专业培训:个金客户经理应参加有关部门组织的专业培训\n并通过业务考试。 \n(五)符合分行人事管理和专业管理的要求。 \n第四章  个人业绩考核标准 \n第八条  个金客户经理个人业绩以储蓄季日均、季有效净增发卡\n量、季净增个贷余额三项业务为主要考核指标,实行季度考核。具体\n标准如下: \n \n    \n类别 行员级别 考核分值 准入标准 \n储蓄业务 个贷业务 卡业务 \n客户经理助理 5 90 300 万  500 张 \n4 95'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 3, 'page_label': '4'}, page_content='百度文库 - 好好学习,天天向上 \n-4 \n3 100  \n2 105  \n1 110  \n客户经理 5 115 300 万  500 张 \n4 120  \n3 125  \n2 130  \n1 135  \n高级客户经理 5 140 500 万 800 万  \n4 145  \n3 150  \n2 155  \n1 160  \n资深客户经理 5 165 500 万 800 万  \n4 170  \n3 175  \n2 180  \n1 185  \n说明:1.储蓄业务(季日均余额)为各类个金客户经理考核进入的最低标准。  \n2.卡业务(季新增发有效卡量)为见习、D 类、初级客户经理进入的最低标准。 \n3.有效卡的概念:每张卡月均余额为 100 元以上。 \n4.个贷业务(季新增发放个贷)为中级以上客户经理考核进入的最低标准。 \n5.超出最低考核标准可相互折算,折算标准:50 万储蓄=50 万个贷=50 张有效卡=5 分(折算以 5 分为单位)'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 4, 'page_label': '5'}, page_content='百度文库 - 好好学习,天天向上 \n-5 \n第五章  工作质量考核标准 \n第九条  工作质量考核实行扣分制。工作质量指个金客户经理在\n从事所有个人业务时出现投诉、差错及风险。该项考核最多扣50 分,\n如发生重大差错事故,按分行有关制度处理。 \n(一)服务质量考核:  \n1、工作责任心不强,缺乏配合协作精神;扣5 分 \n2、客户服务效率低,态度生硬或不及时为客户提供维护服务,\n有客户投诉的,每投诉一次扣2 分 \n3、不服从支行工作安排,不认真参加分(支)行宣传活动的,\n每次扣2 分; \n4、未能及时参加分行(支行)组织的各种业务培训、考试和专\n题活动的每次扣2 分; \n5、未按规定要求进行贷前调查、贷后检查工作的,每笔扣5 分; \n6、未建立信贷台帐资料及档案的每笔扣5 分; \n7、在工作中有不廉洁自律情况的每发现一次扣50 分。 \n(二)个人资产质量考核: \n当季考核收息率97%以上为合格,每降1 个百分点扣2 分;不\n良资产零为合格,每超一个个百分点扣1 分。 \nA.发生跨月逾期,单笔不超过10 万元,当季收回者,扣1 分。 \nB.发生跨月逾期,2 笔以上累计金额不超过20 万元,当季收回\n者,扣2 分;累计超过20 万元以上的,扣4 分。'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 5, 'page_label': '6'}, page_content='百度文库 - 好好学习,天天向上 \n-6 \nC.发生逾期超过3 个月,无论金额大小和笔数,扣10 分。 \n \n第六章  聘任考核程序 \n第十条  凡达到本办法第三章规定的该技术职务所要求的行内职\n工,都可向分行人力资源部申报个金客户经理评聘。 \n第十一条  每年一月份为客户经理评聘的申报时间,由分行人力\n资源部、个人业务部每年二月份组织统一的资格考试。考试合格者由\n分行颁发个金客户经理资格证书,其有效期为一年。 \n第十二条  客户经理聘任实行开放式、浮动制,即:本人申报 —\n— 所在部门推荐 —— 分行考核 —— 行长聘任 —— 每年考评\n调整浮动。  \n第十三条  特别聘任: \n(一)经分行同意录用从其他单位调入的个金客户经理,由用人\n单位按D 类人员进行考核, 薪资待遇按其业绩享受行内正式行员工同\n等待遇。待正式转正后按第十一条规定申报技术职务。 \n(二)对为我行业务创新、工作业绩等方面做出重大贡献的市场\n人员经支行推荐、分行行长批准可越级聘任。 \n第十四条  对于创利业绩较高,而暂未入围技术职务系列,或所\n评聘技术职务较低的市场人员,各级领导要加大培养力度,使其尽快'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 6, 'page_label': '7'}, page_content='百度文库 - 好好学习,天天向上 \n-7 \n入围,并由所在行制定临时奖励办法。 \n \n第七章  考核待遇 \n第十五条  个人金融业务客户经理的收入基本由三部分组成: 客\n户经理等级基本收入、业绩奖励收入和日常工作绩效收入。 \n客户经理等级基本收入是指客户经理的每月基本收入, 基本分为\n助理客户经理、客户经理、高级客户经理和资深客户经理四大层面,\n在每一层面分为若干等级。 \n客户经理的等级标准由客户经理在上年的业绩为核定标准, 如果\n客户经理在我行第一次进行客户经理评级, 以客户经理自我评价为主\n要依据,结合客户经理以往工作经验,由个人金融部、人事部门共同\n最终决定客户经理的等级。 \n助理客户经理待遇按照人事部门对主办科员以下人员的待遇标\n准;客户经理待遇按照人事部门对主办科员的待遇标准;高级客户经\n理待遇按照人事部门对付科级的待遇标准; 资深客户经理待遇按照人\n事部门对正科级的待遇标准。 \n业绩奖励收入是指客户经理每个业绩考核期间的实际业绩所给\n与兑现的奖金部分。 \n日常工作绩效收入是按照个金客户经理所从事的事务性工作进\n行定量化考核,经过工作的完成情况进行奖金分配。该项奖金主要由\n个人金融部总经理和各支行的行长其从事个人金融业务的人员进行\n分配,主要侧重分配于从事个金业务的基础工作和创新工作。'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 7, 'page_label': '8'}, page_content='百度文库 - 好好学习,天天向上 \n-8 \n第十五条  各项考核分值总计达到某一档行员级别考核分值标\n准,个金客户经理即可在下一季度享受该级行员的薪资标准。下一季\n度考核时,按照已享受行员级别考核折算比值进行考核,以次类推。 \n第十六条  对已聘为各级客户经理的人员,当工作业绩考核达不\n到相应技术职务要求下限时,下一年技术职务相应下调。 \n第十七条  为保护个人业务客户经理创业的积极性,暂定其收入\n构成中基础薪点不低于40%。 \n \n第八章  管理与奖惩 \n第十八条  个金客户经理管理机构为分行客户经理管理委员会。\n管理委员会组成人员:行长或主管业务副行长,个人业务部、人力资\n源部、风险管理部负责人。 \n第十九条  客户经理申报的各种信息必须真实。分行个人业务部\n需对其工作业绩数据进行核实,并对其真实性负责;分行人事部门需\n对其学历、工作阅历等基本信息进行核实,并对其真实性负责。 \n第二十条  对因工作不负责任使资产质量产生严重风险或造成损\n失的给予降级直至开除处分,构成渎职罪的提请司法部门追究刑事责\n任。'),Document(metadata={'producer': 'Microsoft® Word 2019', 'creator': 'Microsoft® Word 2019', 'creationdate': '2023-05-06T22:46:33+08:00', 'author': 'Chen Yang', 'moddate': '2023-05-06T22:46:33+08:00', 'source': './浦发上海浦东发展银行西安分行个金客户经理考核办法.pdf', 'total_pages': 9, 'page': 8, 'page_label': '9'}, page_content='百度文库 - 好好学习,天天向上 \n-9 \n第九章  附    则 \n第二十一条  本办法自发布之日起执行。 \n第二十二条  本办法由上海浦东发展银行西安分行行负责解释和\n修改。')]
import os
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.llms import Tongyi
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore
from langchain.vectorstores import Chroma# 初始化大语言模型
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
llm = Tongyi(model_name="qwen-max", dashscope_api_key=DASHSCOPE_API_KEY
)# 创建嵌入模型
embeddings = DashScopeEmbeddings(model="text-embedding-v3",dashscope_api_key=DASHSCOPE_API_KEY
)# 创建主文档分割器
parent_splitter = RecursiveCharacterTextSplitter(chunk_size=512)# 创建子文档分割器
child_splitter = RecursiveCharacterTextSplitter(chunk_size=256)# 创建向量数据库对象
vectorstore = Chroma(collection_name="split_parents", embedding_function = embeddings
)
# 创建内存存储对象
store = InMemoryStore()
# 创建父文档检索器
retriever = ParentDocumentRetriever(vectorstore=vectorstore,docstore=store,child_splitter=child_splitter,parent_splitter=parent_splitter,search_kwargs={"k": 2}
)# 添加文档集
retriever.add_documents(docs)
# 切割出来主文档的数量
len(list(store.yield_keys()))
11
from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnableMap
from langchain.schema.output_parser import StrOutputParser# 创建prompt模板
template = """You are an assistant for question-answering tasks. 
Use the following pieces of retrieved context to answer the question. 
If you don't know the answer, just say that you don't know. 
Use two sentences maximum and keep the answer concise.
Question: {question}
Context: {context}
Answer:
"""# 由模板生成prompt
prompt = ChatPromptTemplate.from_template(template)# 创建 chain(LCEL langchain 表达式语言)
chain = RunnableMap({"context": lambda x: retriever.get_relevant_documents(x["question"]),"question": lambda x: x["question"]
}) | prompt | llm | StrOutputParser()
query = "客户经理被投诉了,投诉一次扣多少分?"
response = chain.invoke({"question": query})
print(response)
根据《浦发上海浦东发展银行西安分行个金客户经理考核办法》,客户经理每被投诉一次扣2分。该扣分属于服务质量考核部分。

3.4 评估rag

准备评估的QA数据集

from datasets import Datasetquestions = ["客户经理被投诉了,投诉一次扣多少分?","客户经理每年评聘申报时间是怎样的?","客户经理在工作中有不廉洁自律情况的,发现一次扣多少分?","客户经理不服从支行工作安排,每次扣多少分?","客户经理需要什么学历和工作经验才能入职?","个金客户经理职位设置有哪些?"
]ground_truths = ["每投诉一次扣2分","每年一月份为客户经理评聘的申报时间","在工作中有不廉洁自律情况的每发现一次扣50分","不服从支行工作安排,每次扣2分","须具备大专以上学历,至少二年以上银行工作经验","个金客户经理职位设置为:客户经理助理、客户经理、高级客户经理、资深客户经理"
]answers = []
contexts = []# Inference
for query in questions:answers.append(chain.invoke({"question": query}))contexts.append([docs.page_content for docs in retriever.get_relevant_documents(query)])# To dict
data = {"user_input": questions,"response": answers,"retrieved_contexts": contexts,"reference": ground_truths
}# Convert dict to dataset
dataset = Dataset.from_dict(data)
dataset
Dataset({features: ['user_input', 'response', 'retrieved_contexts', 'reference'],num_rows: 6
})
# 评测结果
from ragas import evaluate
from ragas.metrics import (faithfulness,answer_relevancy,context_recall,context_precision,
)result = evaluate(dataset = dataset, metrics=[context_precision,context_recall,faithfulness,answer_relevancy,],embeddings=embeddings
)df = result.to_pandas()
df
# !pip install pydantic==2.7.4
# !pip uninstall pydantic -y
# !pip install pydantic==2.10.0
http://www.dtcms.com/a/321470.html

相关文章:

  • 从0到1开发剧本杀小程序:全流程指南与避坑指南
  • 使用 C# 通过 .NET 框架开发应用程序的安装与环境配置
  • 网吧在线选座系统|基于java和小程序的网吧在线选座小程序系统设计与实现(源码+数据库+文档)
  • [202403-E]春日
  • 小程序难调的组件
  • 悬赏任务系统网站兼职赚钱小程序搭建地推抖音视频任务拉新源码功能详解二开
  • LangChain学习笔记05——多模态开发与工具使用
  • react+echarts实现变化趋势缩略图
  • LabVIEW数字抽取滤波
  • 点播服务器
  • RabbitMQ 中无法路由的消息会去到哪里?
  • Spring AMQP 入门与实践:整合 RabbitMQ 构建可靠消息系统
  • Android12 Framework Sim卡pin与puk码解锁
  • 用LaTeX优化FPGA开发:结合符号计算与Vivado工具链(二)
  • Nature论文-预测和捕捉人类认知的基础模型-用大模型模拟人类认知
  • 麦芽:寻常食材的中医智慧 多炮制方式各显养生价值
  • 动态规划进阶:转移方程优化技巧全解
  • 安卓应用内WebView页面调试技巧
  • WPF 双击行为实现详解:DoubleClickBehavior 源码分析与实战指南
  • 政治社会时间线
  • Java 之 多态
  • UE5太空射击游戏入门(一):项目创建与飞船控制
  • HEVC视频扩展免费下载
  • ISL9V3040D3ST-F085C一款安森美 ON生产的汽车点火IGBT模块,绝缘栅双极型晶体管ISL9V3040D3ST汽车点火电路中的线圈驱动器
  • Redis对象编码
  • 分布式系统性能优化实战:从瓶颈定位到架构升级
  • J2000与WGS84坐标系
  • Docker--docker的学习
  • Visual Studio 2019 + Qt + MySQL 开发调试全过程问题详解
  • 装配式建筑4.0:建筑工业化的智慧飞跃