Advertisement

Day29 - 大模型RAG,检索增强生成

阅读量:

如何调用第三方大模型

阿里大模型

1. 获取百炼平台 api key

【阿里云】-【产品】-【人工智能与机器学习】-【大模型服务平台百炼】

2. 参考LangChain文档

https://python.langchain.com/docs/introduction/

3. 连接阿里大模型

(1)安装相关的库

复制代码
    pip install langchain-community -U
复制代码
    pip install dashscope
复制代码
    pip install python-dotenv

(2) 创建 .env 文件,设置环境变量 DASHSCOPE_API_KEY

复制代码
    DASHSCOPE_API_KEY="your-api-key"

加载 .env 环境变量

(3)新建 utils 文件夹,在该目录下创建 models.py 文件,封装模型

复制代码
 from dotenv import load_dotenv

    
 load_dotenv()
    
  
    
 # 加载阿里大模型
    
 from langchain_community.chat_models import ChatTongyi
    
  
    
 def get_tongyi_chat_model():
    
     return ChatTongyi(model="qwen-turbo",
    
                   temperature=0.1,
    
                   top_p=0.3,
    
                   max_tokens=512)
    
  
    
 if __name__ == "__main__":
    
     # 测试
    
     model = get_tongyi_chat_model()
    
     response = model.invoke("你好")
    
     print(response)

(4)引用模型

复制代码
 """

    
     1. 引入模型
    
 """
    
 from utils.models import get_tongyi_chat_model
    
  
    
 model = get_tongyi_chat_model()
    
  
    
 model.invoke(input="你好")
复制代码
 """

    
     2. 阅读理解
    
     给你一个段落,按照段落的描述来回答问题!
    
 """
    
 from langchain_core.messages import SystemMessage
    
 from langchain_core.messages import HumanMessage
    
  
    
 sys_msg = SystemMessage(content="""
    
 你是一个阅读理解机器人!
    
 请认真阅读用户提供的文章,并根据文章的内容来回答用户的问题!、
    
 请注意:如果问题没有在文章中出现,请直接使用你自己的知识来回答!
    
 """)
    
  
    
 user_msg = HumanMessage(content="""
    
 文章为:
    
   17. 孙中山(1866年11月12日-1925年3月12日),名文,字载之,号日新,又号逸仙,又名帝象,化名中山樵,伟大的民族英雄、伟大的爱国主义者、中国民主革命的伟大先驱 [1],中华民国和中国国民党的缔造者,三民主义的倡导者,创立了《五权宪法》。他首举彻底反帝反封建的旗帜,“起共和而终两千年封建帝制”。 [2]
    
 孙中山1866年11月12日生于广东省广州府香山县(今中山市)翠亨村。孙中山原在香港学医,并成为西医医师。孙中山目睹中华民族有被西方列强瓜分的危险,决定抛弃“医人生涯”,进行“医国事业”。孙中山早期受郑观应的改良思想影响,后看清了清政府的腐败,决心推翻清王朝,建立民主共和国。 [3-4] [44]
    
 1894年11月24日,孙中山在檀香山创立兴中会 [4]。1905年(光绪三十一年)成立中国同盟会。1911年10月10日(宣统三年)新军中的革命党人暗中联络,决定当天晚上起义。辛亥革命后被推举为中华民国临时大总统(任期1912年1月1日——1912年4月1日)。1925年3月12日,孙中山因癌症在北京逝世。1929年6月1日,根据其生前遗愿,葬于南京紫金山中山陵。1940年,国民政府通令全国,尊称其为“中华民国国父”。
    
 孙中山著有《建国方略》、《建国大纲》、《三民主义》等。其著述在逝世后多次被结集出版,有中华书局1986年出版的十一卷本《孙中山全集》,台北1969、1973、1985年出版的《国父全集》等。
    
   22. 问题为:
    
   24. 孙中山跟毛泽东是什么关系?
    
   26. 答案为:
    
 """)
    
  
    
 messages = [sys_msg, user_msg]
    
  
    
 model.invoke(input=messages)
复制代码
 # 让用户传过一篇文章和一个问题,我们根据用户的文章来回答用户的问题

    
  
    
 from langchain_core.prompts import SystemMessagePromptTemplate
    
 from langchain_core.prompts import HumanMessagePromptTemplate
    
 from langchain_core.prompts import ChatPromptTemplate
    
  
    
 sys_prompt = SystemMessagePromptTemplate.from_template(template="""
    
 你是一个阅读理解机器人!
    
 请认真阅读用户提供的文章,并根据文章的内容来回答用户的问题!
    
 请注意:
    
     1, 如果问题没有在文章中出现,请直接使用你自己的知识来回答!
    
     2, 不需要做任何的解释,直接回答问题的结果即可!
    
 """)
    
  
    
 user_prompt = HumanMessagePromptTemplate.from_template(template="""
    
 文章为:
    
 {passage}
    
 问题为:
    
 {question}
    
 答案为:
    
 """)
    
  
    
 prompt = ChatPromptTemplate.from_messages(messages=[sys_prompt, user_prompt])
    
  
    
 from langchain_core.output_parsers import StrOutputParser
    
  
    
 output_parser = StrOutputParser()
    
  
    
 chain = prompt | model | output_parser
    
  
    
 passage = """
    
 孙中山,名文,字载之,号日新,又号逸仙,又名帝象,化名中山樵,伟大的民族英雄、伟大的爱国主义者、中国民主革命的伟大先驱 [1],中华民国和中国国民党的缔造者,三民主义的倡导者,创立了《五权宪法》。他首举彻底反帝反封建的旗帜,“起共和而终两千年封建帝制”。 [2]
    
 孙中山生于广东省广州府香山县(今中山市)翠亨村。孙中山原在香港学医,并成为西医医师。孙中山目睹中华民族有被西方列强瓜分的危险,决定抛弃“医人生涯”,进行“医国事业”。孙中山早期受郑观应的改良思想影响,后看清了清政府的腐败,决心推翻清王朝,建立民主共和国。 [3-4] [44]
    
 1894年11月24日,孙中山在檀香山创立兴中会 [4]。1905年(光绪三十一年)成立中国同盟会。1911年10月10日(宣统三年)新军中的革命党人暗中联络,决定当天晚上起义。辛亥革命后被推举为中华民国临时大总统(任期1912年1月1日——1912年4月1日)。1925年3月12日,孙中山因癌症在北京逝世。1929年6月1日,根据其生前遗愿,葬于南京紫金山中山陵。1940年,国民政府通令全国,尊称其为“中华民国国父”。
    
 孙中山著有《建国方略》、《建国大纲》、《三民主义》等。其著述在逝世后多次被结集出版,有中华书局1986年出版的十一卷本《孙中山全集》,台北1969、1973、1985年出版的《国父全集》等。
    
 """
    
  
    
 question = """
    
 Please list 孙中山's other names!
    
 """
    
  
    
 chain.invoke(input=dict(passage=passage, question=question))

拓展

  • 1. 公司内部的私有知识资料
    • 产品说明
    • 规章制度
    • 对外文案
    • ……
  • 2. 让大模型根据私有知识资料来回答问题

存在几个问题:

  • 私有知识可能存在大量信息,请问是否需要全面参考?
    • 如何筛选与问题相关的知识以供大模型参考? * 如何判断或确定与问题相关的知识?
      • 基于文本相似度进行检索 * 关键词匹配?
      • 要求过高,请提前准备好文章的关键点
      • 在全球化背景下,大模型不应受语言理解障碍限制
        所以我们不应依赖关键词匹配
      • 语义化匹配
        • 超越语言限制
        • 跨语言与表达习惯差异下直接聚焦核心含义
        • 生成最终回答时的优势是什么?
          把私有资料按逻辑独立单元划分
          使用基于BERT的向量化模型对每段知识提取核心信息并转化为1024维向量
          建立包含这些知识片段及其向量的数据库(向量化 GPU)
          提出一个问题:
          将问题转化为1024维向量表示
          在数据库中检索最相似的上下文片段
          将问题及上下文交给大模型生成最终回答
          疑问:在检索到相关结果后是否还需要大模型生成答案?
          检索结果中有些高度相关但有些低相关且长度较长需人工优化筛选
          大模型可辅助快速精炼筛选并按照用户习惯规范输出结果。

阅读理解拓展

  • 准备:
  • 在准备阶段中涉及加载/读取私有知识
  • 随后进行切分处理以获取私有知识
  • 使用:
  • 在查询阶段执行提问操作
  • 检索相关上下文信息
  • 增强功能通过整合问题与上下文信息生成更适合的提示词
  • 生成阶段负责根据整合后的提示词输出最终结果
  • RAG:检索增强生成
  • RAG相关的环境搭建:
    • 执行以下命令安装必要的依赖项:
    • pip install chromadb -U
    • pip install langchain -U
    • pip install langchain-chroma -U
    • pip install langchain-core -U
    • pip install langchain-community -U
    • pip install langchain-text-splitters -U
    • pip install langchain-openai -U
    • pip install langgraph -U
    • pip install langserve -U

全部评论 (0)

还没有任何评论哟~