《LlamaIndex 之美》-01-LLM、Prompt、Embedding基础入门

打印 上一主题 下一主题

主题 672|帖子 672|积分 2016

在基于数据构建任何 LLM 应用程序时,选择合适的大型语言模型 (LLM) 是您需要思量的首要步骤之一。
LLM 是 LlamaIndex 的核心组成部分。它们可以作为独立模块利用,也可以插入到其他核心 LlamaIndex 模块(索引、检索器、查询引擎)中。
LlamaIndex 提供了一个同一的接口来定义 LLM 模块,支持对接世面上多种LLM大模型本领。


  • 支持文本完成聊天端点
  • 支持流式处置惩罚和非流式处置惩罚终结点
  • 支持同步异步端点
   本Llamaindex系列文章利用的模型是阿里的灵积平台
  Llamaindex 对接 QWen LLM

在Llamaindex中利用LLM很简朴,在这里你可以看到目前Llamaindex已经支持的LLM范例,下面我将利用QWen模型实现一个入门案例。

  • 安装干系依赖
  1. # 引入灵积平台依赖
  2. !pip install llama-index-llms-dashscope --quiet
  3. # 加载环境变量
  4. !pip install python-dotenv --quiet
复制代码

  • 初始化模型Client对象
  1. from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels
  2. from dotenv import load_dotenv
  3. # 加载环境变量
  4. load_dotenv()
  5. dashscope_llm = DashScope(
  6.     model_name=DashScopeGenerationModels.QWEN_TURBO,
  7.     max_tokens=1000,
  8.     enable_search=False,
  9.     temperature=0.2
  10. )
复制代码
  关于如何利用dotenv,可以参考文章《揭秘python-dotenv:那些鲜为人知的实用窍门》
  

  • 构建complete回话
  1. # 同步输出
  2. resp = dashscope_llm.complete("你好!")
  3. print(resp)
复制代码

  • 构建stream会话
  1. # 流式输出
  2. responses = dashscope_llm.stream_complete("你好!")
  3. for response in responses:
  4.     print(response.delta, end="")
复制代码

  • 构建Chat会话
  1. # chat 模型会话
  2. from llama_index.core.base.llms.types import MessageRole, ChatMessage
  3. messages = [
  4.     ChatMessage(
  5.         role=MessageRole.SYSTEM, content="你是一个AI智能机器人"
  6.     ),
  7.     ChatMessage(role=MessageRole.USER, content="你好。"),
  8. ]
  9. resp = dashscope_llm.chat(messages)
  10. print(resp)
复制代码

  • 构建多轮会话
  1. # 多轮对话
  2. messages = [
  3.     ChatMessage(
  4.         role=MessageRole.SYSTEM, content="你是一个AI智能机器人"
  5.     ),
  6.     ChatMessage(role=MessageRole.USER, content="你好。"),
  7. ]
  8. # first round
  9. resp = dashscope_llm.chat(messages)
  10. print(resp)
  11. # add response to messages.
  12. messages.append(
  13.     ChatMessage(role=MessageRole.ASSISTANT, content=resp.message.content)
  14. )
  15. messages.append(
  16.     ChatMessage(role=MessageRole.USER, content="如何制作一个蛋糕?")
  17. )
  18. # second round
  19. resp = dashscope_llm.chat(messages)
  20. print(resp)
复制代码
LLamaindex 设置Prompt

在LLamaindex中利用Prompt就像创建格式字符串一样简朴,
  1. from llama_index.core import PromptTemplate
  2. template = (
  3.     "我提供的上下文内容如下: \n"
  4.     "---------------------\n"
  5.     "{context_str}"
  6.     "\n---------------------\n"
  7.     "基于给出的内容,回答一下问题: {query_str}\n"
  8. )
  9. qa_template = PromptTemplate(template)
  10. context_str = """
  11. 重达3000吨、总长超70米、20层楼高度,又一“大国重器”成功问世!此“重器”的诞生也标志我国自研冲破西方“壁垒”。
  12. 据悉,这个形状酷似“茅台“的国器是目前世界上最大的加氢反应器,其在石油工业中的地位“媲美芯片”。
  13. 不少西方国家对于此项技术给出高价,但我们表示:100%中国制造,永不出售!
  14. """
  15. query_str = "总结一下加氢反应器?"
  16. # you can create text prompt (for completion API)
  17. prompt = qa_template.format(context_str=context_str, query_str=query_str)
  18. print(prompt)
  19. # or easily convert to message prompts (for chat API)
  20. messages = qa_template.format_messages(context_str=context_str, query_str=query_str)
  21. print(messages)
复制代码
除此之外你还可以定义Chat格式的Prompt
  1. from llama_index.core import ChatPromptTemplate
  2. from llama_index.core.llms import ChatMessage, MessageRole
  3. message_templates = [
  4.     ChatMessage(content="You are an expert system.", role=MessageRole.SYSTEM),
  5.     ChatMessage(
  6.         content="Generate a short story about {topic}",
  7.         role=MessageRole.USER,
  8.     ),
  9. ]
  10. chat_template = ChatPromptTemplate(message_templates=message_templates)
  11. # you can create message prompts (for chat API)
  12. messages = chat_template.format_messages(topic="狼来了")
  13. print(messages)
  14. # or easily convert to text prompt (for completion API)
  15. prompt = chat_template.format(topic="狼来了")
  16. print(prompt)
复制代码
Llamaindex 支持 Embedding

Embedding是一种将离散数据映射到连续空间的表现方法。在天然语言处置惩罚中,Embedding技术可以将单词、句子等文本数据转化为低维向量,从而捕获文本的语义信息。
在LlamaIndex中,嵌入用于将文本数据映射到语义空间,使得相似的文本在向量空间中靠近。这种表现方式对于语义搜索、文本分类和信息检索等使命至关重要。通过嵌入,LlamaIndex可以或许理解和处置惩罚文本的细微差异,从而提供更精准和个性化的服务。
LlamaIndex利用Embedding技术实现文本向量的天生,详细步骤如下:
(1)预处置惩罚:对文本进行清洗、切块等处置惩罚。
(2)构建Embedding模型:利用预训练的Embedding模型,如Word2Vec、BERT等,将文本转化为向量。
(3)向量存储与搜索:与LLM应用雷同,将向量存储到向量数据库中,并进行相似度检索。
目前,LLamaindex已经支持了很多Embedding模型,你可以在这里查看,本次Embedding利用的是灵积平台中的Embedding模型。

  • 文件内容Embedding
  1. # imports
  2. from llama_index.embeddings.dashscope import (
  3.     DashScopeEmbedding,
  4.     DashScopeTextEmbeddingModels,
  5.     DashScopeTextEmbeddingType,
  6. )
  7. # Create embeddings
  8. # text_type=`document` to build index
  9. embedder = DashScopeEmbedding(
  10.     model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2,
  11.     text_type=DashScopeTextEmbeddingType.TEXT_TYPE_DOCUMENT,
  12. )
  13. text_to_embedding = ["风急天高猿啸哀", "渚清沙白鸟飞回", "无边落木萧萧下", "不尽长江滚滚来"]
  14. # Call text Embedding
  15. result_embeddings = embedder.get_text_embedding_batch(text_to_embedding)
  16. # requests and embedding result index is correspond to.
  17. for index, embedding in enumerate(result_embeddings):
  18.     if embedding is None:  # if the correspondence request is embedding failed.
  19.         print("The %s embedding failed." % text_to_embedding[index])
  20.     else:
  21.         print("Dimension of embeddings: %s" % len(embedding))
  22.         print(
  23.             "Input: %s, embedding is: %s"
  24.             % (text_to_embedding[index], embedding[:5])
  25.         )
复制代码

  • 查询Embedding
  1. # imports
  2. from llama_index.embeddings.dashscope import (
  3.     DashScopeEmbedding,
  4.     DashScopeTextEmbeddingModels,
  5.     DashScopeTextEmbeddingType,
  6. )
  7. # Create embeddings
  8. # text_type=`query` to retrieve relevant context.
  9. embedder = DashScopeEmbedding(
  10.     model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2,
  11.     text_type=DashScopeTextEmbeddingType.TEXT_TYPE_QUERY,  #指定对查询问题进行Embedding
  12. )
  13. # Call text Embedding
  14. embedding = embedder.get_text_embedding("骆驼祥子这本书讲了什么?")
  15. print(f"Dimension of embeddings: {len(embedding)}")
  16. print(embedding[:5])
复制代码
  后面的章节将会继承说明如何将向量化的内容存储到向量数据库中,以及如何对向量化结果进行Retrieval。
  末了

本篇文章仅带着大家熟悉一下LLamaindex的LLM、Prompt以及Embedding干系功能,实际上你会发现LLamaindex的本领和Langchain是非常相似的,甚至LLamaindex可以和Langchain一起利用。
后面咱们会着重研究一下基于LLamaindex搭建利用RAG加强的ChatBot,以及干系的组件本领。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表