深入构建企业级生成式AI解决方案:从RAG架构到LangChain实战

本文全面解析企业级生成式AI解决方案的核心架构,涵盖向量数据库、提示工程、LLM运维等关键技术,并通过LangChain实现RAG框架的完整代码示例,为开发者提供实战指南。

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

企业中的生成式AI概述

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

生成式AI是深度学习技术的子集,使用机器学习算法和人工神经网络生成新内容(文本、音频、视频或图像),无需人工干预。

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

随着Gen-AI成为新兴技术,各行业企业争相采用时往往忽视负责任AI、可解释AI以及合规安全方面。这导致客户隐私问题和生成内容存在偏见。组织必须以合规方式构建Gen-AI系统,否则可能失去公众信任。

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

技术型企业可利用Gen-AI提升软件开发生产力和代码质量。Gen-AI驱动的自动补全和代码推荐功能帮助开发者高效编写代码,而代码文档和从自然语言注释生成代码能简化开发流程。

内容摘要领域,生成式AI可自动总结产品评论、文章、长篇报告、会议记录和电子邮件,节省分析师时间。客户支持中,生成式AI驱动的虚拟聊天机器人提供个性化协助,提升用户体验。

企业架构核心组件

向量数据库

嵌入用于确定不同实体或数据之间的相似性,无论是文本、词语、图形还是数字资产。机器通过深度学习模型将内容转换为数值格式。

传统数据库在高维向量数据存储方面面临挑战,向量数据库使用K-NN或A-NN等算法索引和检索相关数据,优化最短距离。

两种主要类型:

  • 纯向量数据库:专为高效存储和管理向量嵌入设计,如Weaviate、Milvus、Chroma和Pinecone
  • 集成向量数据库:在高性能NoSQL或关系数据库中提供附加功能,如pgVector、Redis Enterprise和MongoDB

提示工程

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

精心设计的提示结构包含:

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

提示工程技术包括:

  • 零样本提示:不提供示例,模型基于先前训练生成内容
  • 少样本提示:提供几个示例,模型从样本学习生成响应
  • 思维链:模型展示逐步思考过程后再提供最终答案
  • ReAct:LLM访问外部工具获取所需数据
  • 思维树:LLM评估不同思维过程分支并比较结果选择最优方案

LLM运维

LLMOps是大型语言模型可用的操作平台,通过API模式暴露推理功能。三种设置方法:

  1. 封闭模型库:由Microsoft、Google、OpenAI等巨头管理
  2. 开源模型库:通过HuggingFace或kaggle利用开源社区管理的LLM
  3. 混合方法:AWS、Azure和GCP等云提供商提供无服务器库,可部署开源模型或使用封闭模型

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

RAG是构建企业生成式AI应用的流行框架,帮助LLM访问外部知识数据。核心组件:

  • 检索:从向量数据库获取最相关相似内容
  • 增强:构建精心设计的提示,明确LLM需要生成什么输出
  • 生成:LLM基于足够上下文和清晰步骤生成高质量响应

数据摄取工作流

从PDF报告、HTML文章或对话记录等各种数据源提取内容,使用适当分块策略(固定大小分块或上下文感知分块)。分块后通过LLMOps生成嵌入并存储到向量数据库。

数据检索工作流

用户查询经过检查确保无毒性数据或偏见内容,通过审核层后转换为嵌入,在向量数据库中进行相似性搜索。前k个结果用于构建明确提示,馈送到不同LLM模型生成有意义的响应。

RAG挑战与解决方案

分块问题

大文档分块时通常使用固定大小分块模式,可能导致有意义句子被错误分块。解决方案是使用上下文感知分块或语义分块。

检索问题

RAG模型性能严重依赖从向量数据库检索的上下文文档质量。解决方案包括使用摘要版本更新元数据,或使用RA-FT(检索增强微调)方法。

中间迷失问题

当LLM面对过多信息时,即使具有大上下文窗口的优质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.",
    # ... 更多AI相关文本
]

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 = "your-api-key"
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.')]

结论

强大的参考架构对于构建或初步尝试Gen-AI解决方案的组织至关重要。精心设计的参考架构通过遵循标准化术语、最佳实践和IT架构方法,帮助工程团队应对生成式AI开发的复杂性。随着对生成式AI需求的持续增长,投资开发并遵循全面参考架构的企业将能更好地满足监管要求、提升客户信任、降低风险并在各自行业推动创新前沿。

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