前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大模型结合知识库问答应用第一次实践(下)

大模型结合知识库问答应用第一次实践(下)

原创
作者头像
用户9295575
发布2024-09-11 09:37:59
630
发布2024-09-11 09:37:59

记录一次用大模型LLM和向量数据库,搭建垂直领域的知识库问答实践。上文已经介绍了文本如何转换成向量,存储到向量数据库中。本文将介绍大语言模型LLM+提示工程+向量数据库作为背景知识,回答用户的提问。

1、LangChain框架的介绍

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。我们相信,和不同的应用程序结合,不仅通过 API 调用语言模型,还应结合:

  • 数据感知:将语言模型与其他数据源连接在一起。
  • 主动性:允许语言模型与其环境进行交互。

LangChain 框架的设计目标就是为了实现这些类型的应用程序。它提供了两个主要的价值主张:

  • 组件:LangChain 为处理语言模型所需的组件提供模块化的抽象。LangChain 还为所有这些抽象提供了实现的集合。
  • 用例特定链:链可以被看作是以特定方式组装这些组件,以便最好地完成特定用例。

2、LangChain框架有哪些模块

  1. 索引(Indexs):创建检索的索引,包含加载文档、文档分片、向量存储
  2. 模型(Models):模型的调用,包含LLMs、聊天模型 Chat Models、文本嵌入模型 Text Embedding Models
  3. 提示(Prompt):Prompt Templates提示模板、Prompt Value用户输入的值、示例选择器 Example Selectors、输出解析器 Output Parsers结构化的信息
  4. 内存(Memory):内存(Memory)是在对话过程中存储和检索数据的概念。内存主要分为两种类型:短期内存和长期内存。短期内存通常指的是如何在单个对话的上下文中传递数据(通常是先前的聊天消息或其摘要)。长期内存处理的是如何在对话之间获取和更新信息的问题。
  5. 链(Chains):链( Chains )是一个非常通用的概念,它指的是将一系列组件(或其他链)以特定方式组合起来,以实现共同的用例。最常用的链类型是LLMChain(LLM链),它结合了PromptTemplate(提示模板)、Model(模型)
  6. 代理(Agents):有些应用程序不仅需要预定的LLM/其他工具的调用链,还可能需要根据用户的输入构建未知的链条。在这些类型的链条中,有一个"代理"(agent)可以访问一套工具。根据用户的输入,代理可以决定是否调用这些工具中的任何一个

3、python调用LangChain框架实践

环境:python3.9

3.1 pip安装依赖

代码语言:txt
复制
langchain
unstructured
markdown
qdrant-client
lark
modelscope
torch
transformers
dashscope

3.2 从向量数据库中匹配近似文本

代码语言:python
代码运行次数:0
复制
embedding = ModelScopeEmbeddings(
    model_id="./ai_model/nlp_corom_sentence-embedding_chinese-base-ecom")  # 加载模型 不需要外网

def search_from_vector_stores(collection, question):
    query_db_docs = []
    print(f"""原始的向量数据库查询相关文档""")
    client = qdrant_client.QdrantClient(
            url=qdrant_url,
            port=qdrant_port,
            api_key=qdrant_api_key
        )
    qdrant = Qdrant(
            client=client,
            collection_name="自己定义的向量数据库中的集合名称",
            embeddings=embedding,
        )
    found_docs = qdrant.similarity_search_with_score(question)
    for doc in found_docs:
        print(doc)
        query_db_docs.append(doc[0].page_content)
    return query_db_docs

3.3 调用通义千问模型

基于上一步检索出的相似文本为背景知识,加上提示工程,向大语言模型提问。

代码语言:python
代码运行次数:0
复制
def get_knowledge_based_answer(question, base_docs):
    llm = Tongyi(model_name="qwen-7b-chat")
    prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。如果有相关链接,请同时输出链接。如果无法从中得到答案,请说 "根据已知信息无法回答该问题" 或 "没有提供足够的相关信息",不允许在答案中添加编造成分,答案请使用中文。已知内容:{context},问题:{question}"""
    prompt = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
    chain = prompt | llm
    print("通义千问基于本地知识库的回答:")
    answer = chain.invoke({"context": base_docs, "question": question})
    print(answer)
    return answer

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、LangChain框架的介绍
  • 2、LangChain框架有哪些模块
  • 3、python调用LangChain框架实践
    • 3.1 pip安装依赖
      • 3.2 从向量数据库中匹配近似文本
        • 3.3 调用通义千问模型
        相关产品与服务
        向量数据库
        腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持千亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、自然语言处理等 AI 领域。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档