企业级生成式AI解决方案构建深度解析

本文深入探讨了构建企业级生成式AI解决方案的核心架构和技术实现,涵盖向量数据库、提示工程、LLM运维等关键技术组件,并通过LangChain实现RAG框架的完整代码示例,为企业AI应用开发提供实践指导。

企业级生成式AI解决方案构建深度解析

企业中的生成式AI概述

近期BCG对全球1406名CXO的调查显示,生成式AI是89%高管考虑在2024年投资的三大技术之一(仅次于网络安全和云计算)。各种规模的企业都在构建内部Gen-AI产品或投资从外部提供商添加Gen-AI产品线。

随着Gen-AI在企业环境中的大规模采用,一个良好架构的参考架构对于帮助工程团队和架构师识别构建安全合规Gen-AI解决方案的路线图和构建块至关重要。

安全合规Gen-AI解决方案的重要性

随着Gen-AI成为新兴技术,越来越多的企业急于采用该技术,但没有足够关注实践负责任AI、可解释AI以及解决方案的合规性和安全性方面。因此,我们看到了客户隐私问题或生成内容中的偏见。

企业环境中生成式AI的常见应用和优势

技术导向的组织可以通过提高生产力和代码质量来利用Gen-AI在软件开发中的真正力量。Gen-AI驱动的自动完成和代码推荐功能帮助开发人员和工程师更高效地编写代码,而代码文档和从任何语言的自然语言注释生成可以简化开发过程。

向量数据库

向量数据库对于存储和检索表示数据各个方面的向量至关重要,从而实现高效处理和分析。在AI或机器学习世界中,数据以多维数字格式表示,称为嵌入或向量。

纯向量数据库

纯向量数据库专门设计用于高效存储和管理向量嵌入以及少量元数据。开源产品如Weaviate、Milvus、Chroma数据库都是纯向量数据库。

集成向量数据库

另一方面,集成在高性能NoSQL或关系数据库中的向量数据库提供了额外功能。这种集成方法允许在存储原始数据的同时存储、索引和查询嵌入。

提示工程

提示工程是遵循特定指南和原则制作简洁文本或短语的艺术。这些提示作为大型语言模型(LLM)的指令,指导LLM生成准确相关的输出。

提示结构

任何构建良好的提示的典型结构将具有以下构建块:

  • 指令和任务
  • 上下文和示例
  • 角色(可选)
  • 语气(可选)
  • 边界(可选)
  • 输出格式(可选)

提示工程技术

  • 零样本提示:要求模型执行某些任务但不提供任何示例的提示类型
  • 少样本提示:在输入上下文中提供几个示例和清晰指令
  • 思维链:适用于需要LLM展示复杂推理能力的用例
  • ReAct:LLM可以访问外部工具或系统
  • 思维树提示:LLM使用类人方法通过推理解决复杂任务

LLM运维

LLMOps指的是大型语言模型(另一个术语是基础模型)可用的操作平台,并通过API模式公开推理,供应用程序与整个工作流的AI或认知部分交互。

LLMOps平台设置方法

  1. 封闭模型库:LLM产品由大型AI提供商严格管理
  2. 开源模型库:利用开源社区通过HuggingFace或kaggle管理的大型语言模型构建自己的模型库
  3. 混合方法:如今混合方法相当流行,主要云公司如AWS、Azure和GCP通过提供无服务器库主导这一领域

Gen-AI架构框架介绍 - 检索增强生成(RAG)

RAG是企业世界中构建生成式AI应用程序的流行框架。RAG框架的各种组件包括:

  • 检索:从向量数据库中获取最相关和相似的内容或块
  • 增强:创建构建良好的提示
  • 生成:LLM发挥作用生成高质量响应

数据摄取工作流

在此工作流中,来自各种数据源(如PDF报告、HTML文章或任何对话转录数据)的内容使用适当的分块策略进行分块。分块后,通过调用企业设置的适当LLMOps来生成嵌入。

数据检索工作流

在数据检索工作流中,检查用户查询的亵渎和其他审核,确保没有有毒数据或偏见内容。审核层还检查查询是否包含任何敏感或私人数据。

RAG挑战和解决方案

RAG框架是最具成本效益的方式,可以快速构建任何Gen-AI功能并将其集成到企业架构中。然而,RAG框架也有自己的一系列挑战和问题。

分块问题

分块对RAG系统生成有效响应起着最大作用。当大文档被分块时,通常使用固定大小的分块模式,这会在有意义句子被错误分块时产生问题。

检索问题

RAG模型的性能严重依赖于从向量数据库检索的上下文文档的质量。当检索器无法定位相关、正确的段落时,它显著限制了模型生成精确、详细响应的能力。

“迷失在中间"问题

当LLM呈现过多信息作为输入上下文且并非所有信息都相关时,就会出现此问题。

使用Langchain的示例RAG实现

步骤1:安装Python库/模块

1
2
3
4
!pip install langchain
!pip install langchain-community langchain-core
!pip install -U langchain-openai
!pip install langchain-chroma

步骤2:导入所需对象

1
2
3
4
5
6
7
8
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
import chromadb
import pprint

步骤3:数据摄取

1
2
3
4
5
6
7
8
input_texts = [
    "Artificial Intelligence (AI) is transforming industries around the world.",
    # ... 更多文本内容
]

combined_text = "\n".join(input_texts)
text_splitter = RecursiveCharacterTextSplitter(separators=["\n"], chunk_size=1, chunk_overlap=0)
chunk_texts = text_splitter.create_documents([combined_text])

步骤4:生成嵌入并存储在Chroma数据库中

1
2
3
4
5
6
7
8
9
openai_api_key = "sk-proj-REKM9ueLh5ozQF533c2sT3BlbkFJJTUfxT2nm113b28LztjD"
embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
persist_directory = "chroma_db"

db = Chroma.from_documents(
    documents=chunk_texts,
    embedding=embeddings,
    persist_directory=persist_directory
)

步骤5:提示工程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
template = """
Role: You are a Scientist.
Input: Use the following context to answer the question.
Context: {context}
Question: {question}
Steps: Answer politely and say, "I hope you are well," then focus on answering the question.
Expectation: Provide accurate and relevant answers based on the context provided.
Narrowing:
1. Limit your responses to the context given. Focus only on questions about AI.
2. If you don't know the answer, just say, "I am sorry...I don't know."
3. If there are words or questions outside the context of AI, just say, "Let's talk about AI."
Answer:
"""

PROMPT = PromptTemplate(
    template=template,
    input_variables=["context", "question"]
)

步骤6:配置LLM推理并进行检索

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
temperature = 0.2
param = {
    "top_p": 0.4,
    "frequency_penalty": 0.1,
    "presence_penalty": 0.7
}

llm = ChatOpenAI(
    temperature=temperature,
    openai_api_key=openai_api_key,
    model_kwargs=param
)

qa_with_source = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type='stuff',
    retriever=db.as_retriever(search_kwargs={"k": 5}),
    chain_type_kwargs={"prompt": PROMPT},
    return_source_documents=True,
)

query = "How does AI transform the industry?"
response = qa_with_source(query)
pprint.pprint(response)

最终输出

1
2
3
4
[Document(page_content='Artificial Intelligence (AI) is transforming industries around the world.'),
 Document(page_content='\nThe future of AI holds potential for even greater advancements and applications across various fields.'),
 Document(page_content='\nIn manufacturing, AI systems improve efficiency and quality control.'),
 Document(page_content='\nAI is also revolutionizing the field of finance through automated trading and fraud detection.')]

RetrievalQA是一种用于问答任务的方法,它利用索引检索相关文档或文本片段,适用于简单的问答应用程序。RetrievalQAChain结合了检索器和QA链,用于从检索器获取文档,然后利用QA链基于检索到的文档回答问题。

结论

总之,健壮的参考架构对于正在构建Gen-AI解决方案或考虑迈出第一步的组织来说是基本要求。这有助于构建安全合规的生成式AI解决方案。良好架构的参考架构可以通过遵循标准化术语、最佳实践和IT架构方法,帮助工程团队应对生成式AI开发的复杂性。它加速技术部署,提高互操作性,并为实施治理和决策过程提供坚实基础。随着对生成式AI需求的持续增长,投资于开发并遵守全面参考架构的企业将处于更有利的位置,以满足监管要求,提升客户信任,降低风险,并在各自行业的前沿推动创新。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计