首页 > 其他分享 >【AI落地工程技术】-LangChain框架介绍及使用步骤

【AI落地工程技术】-LangChain框架介绍及使用步骤

时间:2024-07-03 11:03:09浏览次数:19  
标签:prompt llm AI LangChain 工程技术 API OpenAI template

目录

一、特点

二、原理

三、应用场景

四、未来发展趋势

五、简单LangChain使用步骤

 安装LangChain

2. 配置环境

3. 创建提示模板(Prompt Templates)

4. 构建链(Chains)

5. 运行链并处理结果

6. 优化和部署

7. 持续监控和评估

示例代码整合

六、复杂LangChain使用步骤(构建一个问答系统)

步骤 1: 准备工作

安装必要的库

获取API密钥

步骤 2: 导入库和设置配置

步骤 3: 创建问答Chain


LangChain是一个开源框架,旨在帮助从事人工智能的开发者将大语言模型(如GPT-4)与外部计算和数据来源有效地结合起来。

一、特点

  1. 开源性:LangChain以Python或JavaScript包的形式提供,允许开发者自由使用和修改。
  2. 灵活性:支持多种大语言模型,如GPT-4和HuggingFace的模型,便于开发者根据需求选择合适的模型。
  3. 模块化设计:LangChain采用模块化设计思想,允许用户根据实际需求灵活组合不同的组件,构建功能强大的语言处理系统。
  4. 易于扩展:具有良好的扩展性,能够轻松集成新的语言模型和技术,以适应不断变化的需求。

二、原理

LangChain通过以下步骤实现其功能:

  1. 用户提出初始问题:用户通过LangChain提出一个初始问题。
  2. 问题处理与向量表示:这个问题被发送到大语言模型,并将其向量表示在向量数据库中做相似性搜索。
  3. 信息检索与反馈:从向量数据库中获取与问题相关的信息块,并将其反馈给大语言模型。
  4. 答案生成或行动执行:大语言模型根据初始问题和相关信息,生成一个答案或执行一个行动。

在这个过程中,LangChain使用了几个关键组件:

  • LLM Wrapper:包装器,允许连接到大语言模型。
  • Prompt Templates:提示模板,减少了对文本的硬编码需求。
  • Indexes for Relevant Information Retrieval:相关内容的索引,用于从外部数据源中提取信息。

三、应用场景

LangChain在多个领域展现出广泛的应用前景,包括但不限于:

  1. 智能客服:通过LangChain构建的智能客服系统能够更准确地理解用户意图,提供个性化的解答方案。
  2. 内容创作:辅助内容创作者快速生成高质量的文章、摘要等文本内容。
  3. 数据分析:帮助分析师从海量数据中快速提取关键信息,生成数据报告。
  4. 跨语言交流:在医疗、商务、旅游、教育等领域中,用于语言翻译,促进跨国交流和合作。
  5. 知识库构建:支持用户整理、分类和存储本地知识库,构建智能问答系统。

四、未来发展趋势

  1. 技术融合:LangChain将与更多先进技术进行融合,如深度学习、知识图谱等,进一步提升其语言处理能力。
  2. 定制化与个性化:通过深入分析用户数据,为用户提供更加定制化和个性化的语言处理方案。
  3. 跨界应用:LangChain有望在更多领域实现跨界应用,推动相关行业的数字化转型。
  4. 性能优化:不断优化模型间的交互机制,提高在大规模数据处理场景中的性能表现。

五、简单LangChain使用步骤

  1.  安装LangChain

    首先,确保你的Python环境已经设置好,并且pip工具可用。然后,通过pip安装LangChain及其相关依赖。在命令行中运行:

pip install langchain[llms]

这个命令会安装LangChain库以及支持大型语言模型(LLM)的额外组件。

2. 配置环境

对于使用OpenAI等大型语言模型的服务,你需要设置相应的环境变量或直接在代码中提供API密钥。这里以OpenAI为例,你可以在代码中直接设置API密钥:

from langchain.llms import OpenAI  
  
# 设置OpenAI API密钥  
OPENAI_API_KEY = "your_openai_api_key"  
  
# 初始化OpenAI模型  
llm = OpenAI(model_name="gpt-4-0613", temperature=0.7, openai_api_key=OPENAI_API_KEY)
3. 创建提示模板(Prompt Templates)

提示模板是LangChain中一个重要的概念,它允许你定义如何向LLM发送请求。你可以创建自己的提示模板或使用LangChain提供的模板。

from langchain.prompts import PromptTemplate  
  
# 创建一个简单的提示模板  
prompt_template = PromptTemplate(  
    template="请给我解释一下{}的概念。",  
    input_variables=["topic"]  
)
4. 构建链(Chains)

链是LangChain的核心,它将多个组件(如提示模板、LLM、输出解析器等)串联起来以执行复杂的任务。

# 创建一个链,将提示模板和LLM模型连接起来  
from langchain import Chain  
  
chain = Chain(  
    prompt=prompt_template.format_prompt,  
    llm=llm  
)

注意:在上面的代码中,直接使用了prompt_template.format_prompt作为链的prompt函数,这是一个简化的示例。在实际应用中,可能需要定义一个自定义函数来处理更复杂的逻辑。

5. 运行链并处理结果

现在,可以运行链并传入输入数据来获取处理结果了。

# 定义一个输入变量  
input_data = {"topic": "机器学习"}  
  
# 运行链并获取结果  
response = chain.run(input_data)  
  
# 打印结果  
print(response)
6. 优化和部署
  • 优化链:根据实际应用场景和需求,你可能需要调整链的组件、参数或逻辑,以提高处理效果和性能。
  • 部署链:你可以使用LangServe等工具将链部署为API服务,以便在生产环境中使用。部署过程通常涉及配置API端点、处理并发请求、监控API性能等步骤。
7. 持续监控和评估

使用LangSmith等工具对部署的链进行监控和评估,以确保其稳定性和可靠性。根据监控结果对链进行调整和优化。

示例代码整合

以下是将上述步骤整合在一起的示例代码:

from langchain import Chain  
from langchain.llms import OpenAI  
from langchain.prompts import PromptTemplate  
  
# 配置OpenAI API密钥  
OPENAI_API_KEY = "your_openai_api_key"  
  
# 初始化OpenAI模型  
llm = OpenAI(model_name="gpt-4-0613", temperature=0.7, openai_api_key=OPENAI_API_KEY)  
  
# 创建提示模板  
prompt_template = PromptTemplate(  
    template="请给我解释一下{}的概念。",  
    input_variables=["topic"]  
)  
  
# 创建链  
chain = Chain(  
    prompt=prompt_template.format_prompt,  
    llm=llm  
)  
  
# 定义输入变量并运行链  
input_data = {"topic": "机器学习"}  
response = chain.run(input_data)  
  
# 打印结果  
print(response)

请注意,上述代码中的"your_openai_api_key"需要替换为你自己的OpenAI API密钥。此外,由于LangChain和OpenAI等服务的更新,某些参数和API调用方式可能会发生变化,因此请参考最新的官方文档。

六、复杂LangChain使用步骤(构建一个问答系统)

这个问答系统将使用LangChain来集成数据检索(假设使用DuckDuckGo搜索API)和大型语言模型(如OpenAI的GPT)。用户输入一个问题,系统首先搜索相关信息,然后将搜索结果作为上下文传递给LLM以生成回答。

步骤 1: 准备工作
安装必要的库

首先,你需要确保安装了所有必要的Python库。这通常包括LangChain和任何你计划使用的LLM(如OpenAI的GPT模型)的库。

pip install langchain openai transformers

注意:如果你不打算使用OpenAI的GPT模型,你可以省略openai的安装。

获取API密钥

如果你打算使用像OpenAI这样的外部服务,你需要注册并获取API密钥。这通常在你的服务提供商的网站上完成。

步骤 2: 导入库和设置配置
import os  
from langchain.chains import LLMChain  
from langchain.prompts import PromptTemplate  
from langchain.retrievers import SearchEngineRetriever  # 注意:这里只是示例,可能需要自定义  
from langchain.llms import OpenAI  
  
# 设置API密钥(这里使用环境变量来存储敏感信息)  
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "default_value_if_not_set")  
  
# 初始化LLM(这里以OpenAI为例)  
llm = OpenAI(temperature=0.5, max_tokens=100, model_name="text-davinci-003", api_key=OPENAI_API_KEY)  
  
# 注意:SearchEngineRetriever在LangChain中可能不直接支持所有搜索引擎  
# 这里我们假设有一个自定义的或第三方的检索器,但这里我们还是用Mock来模拟  
class MockSearchEngineRetriever:  
    def __init__(self):  
        # 初始化代码(如果有的话)  
        pass  
  
    def get_documents(self, query):  
        # 模拟从搜索引擎获取的结果  
        # 这里应该调用实际的搜索引擎API并处理响应  
        # 但为了示例,我们手动返回一些数据  
        if query == "苹果公司的创始人":  
            return [  
                {"title": "苹果公司创始人", "text": "苹果公司的创始人是史蒂夫·乔布斯、斯蒂夫·沃兹尼亚克和罗恩·韦恩。"}  
            ]  
        elif query == "Python的创始人":  
            return [  
                {"title": "Python创始人", "text": "Python的创始人是吉多·范罗苏姆(Guido van Rossum)。"}  
            ]  
        else:  
            return []  
  
# 实例化检索器  
retriever = MockSearchEngineRetriever()  
  
# 定义提示模板  
prompt_template = """  
问题:{question}  
  
搜索结果摘要:  
{search_results_summary}  
  
请基于以上信息回答以下问题:  
"""  
  
# 注意:这里我们假设有一个函数可以生成搜索结果摘要,但在Mock中我们省略了这一步  
# 在实际应用中,你可能需要从检索器返回的文档中提取关键信息来构建摘要  
  
# 由于我们没有实现搜索结果摘要的生成,我们直接在模板中插入文档文本  
# 这在实际应用中可能不是最佳实践,因为它可能包含大量不必要的细节  
def format_documents(documents):  
    summaries = [f"{doc['title']}: {doc['text'][:100]}..." for doc in documents]  # 截取文本以模拟摘要  
    return "\n".join(summaries)  
  
# 修改提示模板以包含文档摘要  
prompt_template_with_summaries = prompt_template.replace("{search_results_summary}", "{documents}")  
prompt_template_with_summaries = prompt_template_with_summaries.replace("{documents}", "{document_summaries}")  
  
# 创建一个函数来生成带有摘要的提示  
def generate_prompt(question, documents):  
    document_summaries = format_documents(documents)  
    filled_prompt = prompt_template_with_summaries.format(question=question, document_summaries=document_summaries)  
    return filled_prompt  
  
# 创建PromptTemplate对象(但这里我们直接使用函数来生成提示)  
# prompt = PromptTemplate.from_template(prompt_template_with_summaries)  # 这行代码在当前上下文中被注释掉  
  
# 注意:由于我们直接使用了函数来生成提示,因此不需要PromptTemplate对象
步骤 3: 创建问答Chain
# 创建Chain,注意这里我们没有直接使用PromptTemplate,而是使用了函数来生成提示  
class CustomQAChain:  
    def __init__(self, llm, retriever):  
        self.llm = llm  
        self.retriever = retriever  
  
    def run(self, question):  
        # 使用检索器获取与问题相关的文档  
        documents = self.retriever.get_documents(question)  
          
        # 如果没有找到任何文档,则直接告诉用户  
        if not documents:  
            return "没有找到与您的问题相关的任何信息。"  
          
        # 使用之前定义的函数生成包含文档摘要的提示  
        prompt = generate_prompt(question, documents)  
          
        # 使用LLM处理提示并获取回答  
        answer = self.llm(prompt)  
          
        # 返回LLM生成的回答  
        return answer  
  
# 实例化问答Chain  
qa_chain = CustomQAChain(llm=llm, retriever=retriever)  
  
# 测试问答Chain  
question = "苹果公司的创始人是谁?"  
answer = qa_chain.run(question)  
print(f"问题:{question}\n回答:{answer}")  
  
# 你可以继续测试其他问题  
question = "Python的创始人是谁?"  
answer = qa_chain.run(question)  
print(f"问题:{question}\n回答:{answer}")

这里的generate_prompt函数和MockSearchEngineRetriever类已经在之前的步骤中定义好了。generate_prompt函数负责根据问题和检索到的文档生成一个适合LLM处理的提示,而MockSearchEngineRetriever类则模拟了一个检索器,它根据问题返回一些预定义的文档。

在实际应用中,检索器可能会是一个复杂的系统,它使用真实的搜索引擎API(如Google Custom Search JSON API、Bing Search API等)来检索互联网上的信息,并处理这些信息的格式和相关性。此外,你可能还需要一个更复杂的逻辑来生成提示,包括从检索到的文档中提取关键信息、构建摘要、处理多个文档等。

在这个示例中,为了简化,直接使用了模拟的检索器和提示生成函数。然而,这种方法为你提供了一个构建更复杂问答系统的框架,你可以根据需要对其进行扩展和修改。

标签:prompt,llm,AI,LangChain,工程技术,API,OpenAI,template
From: https://blog.csdn.net/u011196880/article/details/140143673

相关文章

  • 零门槛用AI大模型,AI全能工具箱302.AI让人工智能AIGC变得简单易用!
    前言在当今这个信息爆炸的时代,人工智能(AI)已经不再是遥不可及的高科技,而是逐渐融入我们的日常生活,成为我们解决问题的得力助手。提到AI,几乎每个人都能说上几句,然而,对于许多人来说,AI的使用似乎仍然存在一定的门槛。我和大家也一样,苦于找不到好用免费的AI工具而发愁,直到我使......
  • 提升AI绘画生成质量:探索与突破
    本文由ChatMoney团队出品随着人工智能技术的蓬勃发展,AI绘画生成技术已成为艺术领域的一颗璀璨新星。然而,尽管AI绘画技术在模仿人类绘画风格、创作独特艺术作品等方面取得了显著进展,但其生成的图像质量仍有待提升。本文旨在深入探讨如何提升AI绘画生成质量,以期为相关领域的研究和......
  • 提升AI绘画生成质量:探索与突破
    本文由ChatMoney团队出品随着人工智能技术的蓬勃发展,AI绘画生成技术已成为艺术领域的一颗璀璨新星。然而,尽管AI绘画技术在模仿人类绘画风格、创作独特艺术作品等方面取得了显著进展,但其生成的图像质量仍有待提升。本文旨在深入探讨如何提升AI绘画生成质量,以期为相关领域的研究和......
  • AI唱古诗大片,粉丝10W+, 手把手免费教你
    看到别人用AI做唱古诗的视频动画,小红薯10W+粉丝,后期接广变现。从YOUTUBE上学来的方法,自己实操起来感觉还是很简单的。打开思路,AI时代任何有亮点的创作都会有受众。百度网盘请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支......
  • AI美食怪兽短视频玩法,月入过万新手也能做!
    这种通过AI技术将各地的特色美食转为具有形象生动、创意满满的怪兽制作成的短视频,发布在各大短视频平台上,可以吸引大量的人群观看,那今天就教大家如何使用免费的AI工具生成这类爆款视频,从而轻松达到月入过万的收益百度网盘请输入提取码百度网盘为您提供文件的网络备份、同......
  • AI唱古诗大片,粉丝10W+, 手把手免费教你
     看到别人用AI做唱古诗的视频动画,小红薯10W+粉丝,后期接广变现。从YOUTUBE上学来的方法,自己实操起来感觉还是很简单的。打开思路,AI时代任何有亮点的创作都会有受众。百度网盘请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支......
  • HiAI Foundation开发平台,加速端侧AI应用的智能革命
    如果您是一名开发者,正在寻找一种高效、灵活且易于使用的端侧AI开发框架,那么HarmonyOSSDKHiAIFoundation服务(HiAIFoundationKit)就是您的理想选择。作为一款AI开发框架,HiAIFoundation不仅提供强大的NPU计算能力和丰富的开发工具,还提供完善的技术支持和社区资源,帮助您快速构建......
  • 深度学习与NLP | 全面回顾最先进:AI大模型+RAG的综述!
    本文来源公众号“深度学习与NLP”,仅用于学术分享,侵权删,干货满满。原文链接:全面回顾最先进:AI大模型+RAG的综述!1 介绍本文全面回顾了当前最先进的RAG技术,包括朴素RAG、进阶RAG和模块RAG等范式,并置于LLM背景下。文章讨论了RAG过程中的核心技术,如“检索”、“生成”和“增强”......
  • Stable Diffusion|人人都会的AI绘画变现
    人人都会的AI绘画变现分为三大板块:01AI绘画基础:......
  • AI绘画入门实践|Midjourney:画面权重控制
    在Midjourney中,使用两个连续的英文冒号::来进行分割与权重控制。作为分隔符使用在提示词中添加双冒号::表示让MJ将部分提示词单独考虑2dillustration,frenchfries,hotdog--v62dillustration,frenchfries,hot::dog--v6作为权重控制使用在......