AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


LangChain 最新版入门实战-v0.2
发布日期:2024-09-05 21:06:59 浏览次数: 1641


LangChain 基础入门文档

1. 认识 LangChain

  • LangChain 是一个基于大型语言模型(LLM)的应用开发框架。它通过两种方式规范和简化了使用大型语言模型的方式:
    • 集成:让语言模型能够使用更多的信息。
    • 代理:让语言模型能够帮助我们做更多的事情。

LangChain 目前有两个语言的实现:PythonNode.js

项目代码结构:

由于 LangChain 更新频繁,如果遇到过时的用法或找不到包路径,可以在项目结构中查找最新版本的路径和用法。

2. LangChain 的核心组件

  • Models(模型):处理自然语言生成和理解的核心,负责与大语言模型 (LLM) 的交互。
  • Prompts(提示):用于与模型沟通,设计和优化输入,以获得更准确和相关的输出。
  • Memory(记忆):保存对话上下文或长期数据,使得模型能够跨多轮对话保持连贯性。
  • Agents(代理):执行复杂任务的智能体,可以利用多种工具和功能自主决策。
  • Indexes(索引):结构化存储和检索大规模文本或数据,便于快速查询。
  • Chains(链):将多个组件和模型的调用组合起来,形成复杂的工作流程或任务处理链。

这些核心组件相互协作,使得 LangChain 能够构建灵活、可扩展的语言应用程序。 |

3、LangChain 开源组件

以下是各个 LangChain 开源组件的简要介绍:

  • langchain-core
    LangChain 核心库,包含基本的数据结构、工具和用于构建链式调用(Chains)的通用逻辑。它提供了 LLM 的抽象、向量数据库接口、内存管理、嵌入模型等组件,适用于构建复杂的语言模型应用。

  • langchain-community
    由社区贡献的扩展库,提供对各种第三方服务和工具的集成支持,如 OpenAI、Qianfan、FAISS、Pinecone 等,使开发者能够轻松使用这些服务进行文档检索、向量存储和嵌入处理。

  • langchain
    LangChain 框架的主包,整合了核心和社区扩展功能,提供丰富的工具链来构建与大语言模型(LLM)集成的应用。它支持从文本生成、问题回答到自定义工作流的各类应用场景。

  • langgraph
    一个扩展 LangChain 的工具,专注于构建高度可控和自定义的智能代理。通过引入图结构,可以灵活管理不同任务和工作流之间的复杂依赖关系,使得创建可扩展、交互式的代理系统更加容易。

  • langserver
    提供对 LangChain 服务化的支持,使得在云端运行和管理 LangChain 工作流成为可能。它为开发者提供 REST API,支持语言模型在服务环境中的自动扩展、部署和集成。

  • langsmith
    开发者工具,专为调试和监控 LangChain 应用设计。它帮助开发者分析、记录和优化链条调用过程中的数据流,提供了对错误排查、性能监控和模型行为的详细洞察。

这些组件共同构建了一个强大的语言模型生态系统,方便开发者根据需求搭建自定义的 AI 应用。

4、组件实现

4.1、准备工作

  • 搭建虚拟环境,下载相关包
conda create -n lang_chain python=3.10
conda activate lang_chain
pip install langchain 
pip install langchain_community
pip install qianfan
  • 准备Key值,在千帆大模型平台上,申请API_KEY和Secret_KEY。
import os
import platform
import subprocess


def load_env_from_bash_profile():
    command = 'source ~/.bash_profile && env'
    proc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True, executable='/bin/bash')
    for line in proc.stdout:
        (key, _, value) = line.decode('utf-8').partition('=')
        os.environ[key.strip()] = value.strip()


if platform.system() == 'Darwin':
    # 解决os.getenv('QIANFAN_API_AK')返回为None问题
    load_env_from_bash_profile()

ak = os.getenv('QIANFAN_API_AK')
sk = os.getenv('QIANFAN_API_SK')

print(f'ak: {ak}\nsk: {sk}')

os.environ['QIANFAN_AK'] = ak
os.environ['QIANFAN_SK'] = sk

注意:如果报错 raise errors.APIError(error_code, err_msg, req_id) qianfan.errors.APIError: api return error, req_id:  code: 17, msg: Open api daily request limit reached 可能的原因: 未开通所调用服务的付费权限,或者账户已欠费,则需要充值即可!

4.2、 models

1、LLMS

LLMS 是 LangChain 与大语言模型交互的基础模块。你可以使用不同的 LLM 提供商(如 OpenAI、Hugging Face、Cohere 等)的模型。

import os
from langchain_community.llms import QianfanLLMEndpoint

from settings import QIANFAN_API_AK, QIANFAN_API_SK

os.environ['QIANFAN_AK'] = QIANFAN_API_AK
os.environ['QIANFAN_SK'] = QIANFAN_API_SK


def llms():
    """
    预训练模型 LLMS
    :return:
    """

    # 实例化模型
    llm = QianfanLLMEndpoint(model='ERNIE-4.0-8K-Preview')

    res = llm.invoke("1+1=?")

    print(res)
[INFO][2024-09-05 12:13:04.781] oauth.py:275 [t:8676167488]: trying to refresh token for ak `7PMgrX***`
[INFO][2024-09-05 12:13:05.573] oauth.py:302 [t:8676167488]: successfully refresh token
这个问题是基础的数学加法问题。

当我们进行简单的加法计算时,需要将两个数相加来求得结果。

对于 1 + 1 这个表达式:
1 加上 1 等于 2

所以,1 + 1 = 2

2、chat_models

除了传统的 LLM,LangChain 还支持聊天模型。这些模型不仅可以处理单次输入,还能进行多轮对话,适合构建交互式聊天机器人。

from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.messages import HumanMessage

def chat_models():
    """
    聊天模型(LLMS 的微调模型)
    :return:
    """

    # 实例化模型
    chat = QianfanChatEndpoint(model='ERNIE-4.0-8K-Preview-0518')
    messages = [HumanMessage(content='帮我介绍下诗仙李白的生平!')]
    res = chat.invoke(messages)
    print(res)

[INFO][2024-09-05 12:20:21.711] oauth.py:275 [t:8676167488]: trying to refresh token for ak `7PMgrX***`
[INFO][2024-09-05 12:20:22.046] oauth.py:302 [t:8676167488]: successfully refresh token
content='诗仙李白的生平介绍如下:\n\n一、基本信息与早年经历\n\n* 李白,字太白,号青莲居士,出生于蜀郡绵州昌隆县(今四川省绵阳市江油市青莲镇),也有说法认为他出生于西域碎叶。\n* 祖籍陇西成纪(今甘肃省秦安县),他是唐朝伟大的浪漫主义诗人,被誉为“诗仙”。\n* 李白是凉武昭王李暠的九世孙,为人爽朗大方,乐于交友,爱好饮酒作诗。\n\n二、文学成就与风格\n\n* 李白的乐府、歌行及绝句成就极高,歌行完全打破诗歌创作的一切固有格式,笔法多端,达到了任随性之而变幻莫测、摇曳多姿的神奇境界。其绝句自然明快,飘逸潇洒,能以简洁明快的语言表达出无尽的情思。\n* 在盛唐诗人中,李白是兼长五绝与七绝而且同臻极境的诗人。其诗作常被后人誉为“笔落惊风雨,诗成泣鬼神”。\n* 李白的诗雄奇飘逸,艺术成就极高,大多以描写山水和抒发内心的情感为主。他讴歌祖国山河与美丽的自然风光,风格雄奇奔放,俊逸清新,富有浪漫主义精神,达到了内容与艺术的完美统一。\n\n三、主要诗作与影响\n\n* 李白的代表作有《望庐山瀑布》《行路难》《蜀道难》《将进酒》《早发白帝城》等。\n* 李白的诗歌对后代产生了极为深远的影响,中唐的韩愈、孟郊、李贺,宋代的苏轼、陆游、辛弃疾,明清的高启、杨慎、龚自珍等著名诗人,都受到李白诗歌的启发和影响。\n\n四、其他方面\n\n* 除了文学,李白在书法和剑术方面也有很深的造诣。他的唯一传世书法真迹是《上阳台帖》,其剑术之高在唐朝位居第二,仅次于裴旻。\n* 李白从少年时起就常去寻找道观的道士谈论道经,后来与一位号为东岩子的隐者隐居于岷山,潜心学习。\n\n总的来说,李白是中国古代文学史上的巨星,他的诗作至今仍然被广泛传颂和研究。' additional_kwargs={'finish_reason''normal''request_id''as-0tws9yei08''object''chat.completion''search_info': []} response_metadata={'token_usage': {'prompt_tokens'9'completion_tokens'518'total_tokens'527}, 'model_name''ERNIE-4.0-8K-Preview-0518''finish_reason''normal''id''as-0tws9yei08''object''chat.completion''created'1725510058'result''诗仙李白的生平介绍如下:\n\n一、基本信息与早年经历\n\n* 李白,字太白,号青莲居士,出生于蜀郡绵州昌隆县(今四川省绵阳市江油市青莲镇),也有说法认为他出生于西域碎叶。\n* 祖籍陇西成纪(今甘肃省秦安县),他是唐朝伟大的浪漫主义诗人,被誉为“诗仙”。\n* 李白是凉武昭王李暠的九世孙,为人爽朗大方,乐于交友,爱好饮酒作诗。\n\n二、文学成就与风格\n\n* 李白的乐府、歌行及绝句成就极高,歌行完全打破诗歌创作的一切固有格式,笔法多端,达到了任随性之而变幻莫测、摇曳多姿的神奇境界。其绝句自然明快,飘逸潇洒,能以简洁明快的语言表达出无尽的情思。\n* 在盛唐诗人中,李白是兼长五绝与七绝而且同臻极境的诗人。其诗作常被后人誉为“笔落惊风雨,诗成泣鬼神”。\n* 李白的诗雄奇飘逸,艺术成就极高,大多以描写山水和抒发内心的情感为主。他讴歌祖国山河与美丽的自然风光,风格雄奇奔放,俊逸清新,富有浪漫主义精神,达到了内容与艺术的完美统一。\n\n三、主要诗作与影响\n\n* 李白的代表作有《望庐山瀑布》《行路难》《蜀道难》《将进酒》《早发白帝城》等。\n* 李白的诗歌对后代产生了极为深远的影响,中唐的韩愈、孟郊、李贺,宋代的苏轼、陆游、辛弃疾,明清的高启、杨慎、龚自珍等著名诗人,都受到李白诗歌的启发和影响。\n\n四、其他方面\n\n* 除了文学,李白在书法和剑术方面也有很深的造诣。他的唯一传世书法真迹是《上阳台帖》,其剑术之高在唐朝位居第二,仅次于裴旻。\n* 李白从少年时起就常去寻找道观的道士谈论道经,后来与一位号为东岩子的隐者隐居于岷山,潜心学习。\n\n总的来说,李白是中国古代文学史上的巨星,他的诗作至今仍然被广泛传颂和研究。''is_truncated'False'need_clear_history'False'content_type''text''chat_id''118000104525182086''is_safe'1'usage': {'prompt_tokens'9'completion_tokens'518'total_tokens'527}} id='run-5591cb8a-b6d8-4355-a45a-31ccd33f0d65-0' usage_metadata={'input_tokens'9'output_tokens'518'total_tokens'527}

3、embedding model

嵌入模型用于将文本转换为数值向量,适用于相似度计算、检索增强生成等任务。

from langchain_community.embeddings import QianfanEmbeddingsEndpoint

def embedding_models():
    """
    向量模型
    :return:
    """

    # 实例化向量模型
    embed = QianfanEmbeddingsEndpoint(model='Embedding-V1')
    # 文本向量化
    result_one = embed.embed_query(text='郑钦文退出瓜达拉哈拉赛')
    print(f'result_one: {result_one}')
    print(f'result_one size: {len(result_one)}')
    print('***********************************')

    result_batch = embed.embed_documents(
        [
            '台风摩羯来临前夜 海口现巨型闪电',
            '外卖脱骨鸡被盗报警抓获1只小猫',
            '女生离家3月暴瘦50斤父母满眼心疼'
        ]
    )
    print(f'result_batch: {result_batch}')
    print(f'result_batch size: {len(result_batch)}')
    print(f'result_batch 的向量纬度: {len(result_batch[0])}')

  • embed_query:将单个查询字符串转换为向量表示
  • embed_documents:将一系列文档转化为向量表示
[INFO][2024-09-05 12:38:22.966] oauth.py:275 [t:8676167488]: trying to refresh token for ak `7PMgrX***`
[INFO][2024-09-05 12:38:23.272] oauth.py:302 [t:8676167488]: successfully refresh token
result_one: [-0.0611457824707031250.023861512541770935-0.099965117871761320.012274616397917270.023608896881341934-0.026105325669050217-0.0329381562769413-0.079042665660381320.0183623209595680240.01946936361491680.058596644550561905-0.028816560283303260.0291896089911460880.03286940976977348-0.0073604257777333260.0132493702694773670.0522079356014728550.086455710232257840.014012857340276241-0.04514427110552788-0.018283119425177574-0.011612636037170887-0.14034272730350494-0.13559050858020782-0.0123434076085686680.00891115702688694-0.07282404601573944-0.05236218497157097-0.05027031898498535-0.01724342070519924-0.0173147898167371750.009451561607420444-0.0180611964315176-0.004783155396580696-0.00097889709286391740.05491626635193825-0.013165475800633430.06516665965318680.0105256093665957450.07304934412240982-0.06495423614978790.013559294864535332-0.064366534352302550.0062106186524033550.021497363224625587-0.054295308887958530.0286792982369661330.0065652052871882915-0.030866280198097230.02248593606054783-0.06507388502359390.011616138741374016-0.012589828111231327-0.02901686541736126-0.012489354237914085-0.0475192703306674960.055055540055036545-0.0114260930567979810.039180558174848557-0.088449113070964810.05337926745414734-0.004245807416737080.013129422441124916-0.0070473896339535710.12116610258817673-0.16935740411281586-0.0127542680129408840.03491511195898056-0.0014863788383081555-0.02545318566262722-0.0567034855484962460.02036210335791111-0.0009915467817336320.085207916796207430.081837549805641170.052780844271183014-0.0142801403999328610.010278027504682541-0.010844850912690163-0.0136463986709713940.013640185818076134-0.039936725050210950.083040557801723480.0540512315928936-0.019430303946137430.092948347330093380.10973719507455826-0.0287335421890020370.007680305279791355-0.027695527300238610.03000280074775219-0.031616810709238050.109171994030475620.0447961688041687-0.044261734932661057-0.01019282452762127-0.0023051197640597820.028603155165910720.0166943576186895370.0112421959638595580.07452917844057083-0.011269165202975273-0.02256951853632927-0.0092473411932587620.014308636076748371-0.04892760515213013-0.029001299291849136-0.050903860479593280.0212065689265728-0.0249153021723032-0.07731495797634125-0.03553071618080139-0.017858985811471940.009226812049746513-0.038087826222181320.017230611294507980.04436529800295830.0012446608161553740.068019397556781770.030946256592869760.11120275408029556-0.0266608018428087230.055086214095354080.044698458164930344-0.069400742650032040.08186043798923492-0.019415805116295815-0.14930427074432373-0.092417314648628230.049485236406326294-0.038411282002925870.006813810672610998-0.02343638986349106-0.013086181133985520.093235105276107790.0078797144815325740.0210123639553785320.0139384651556611060.08210518211126328-0.0454006530344486240.0089825978502631190.042150434106588364-0.043173227459192276-0.001629128004424274-0.085140578448772430.12875023484230042-0.0259744171053171160.078791812062263490.027029704302549362-0.0414942800998687740.0198978632688522340.04039379209280014-0.144816741347312930.0008188045467250049-0.059386949986219406-0.0468063205480575560.009762996807694435-0.04030189290642738-0.0402404442429542540.057655241340398790.0126502271741628650.04292444884777069-0.04814681410789490.058423113077878950.07199015468358994-0.140189200639724730.06588041782379150.0470155403017997740.0259592011570930480.03927198424935341-0.081751868128776550.053323488682508470.026608632877469063-0.042681898921728134-0.034192468971014020.038568306714296340.068651691079139710.0175601635128259660.0232262443751096730.0034717232920229435-0.0007976234192028642-0.048287078738212585-0.00301572587341070180.098669335246086120.118696458637714390.04732683300971985-0.027377439662814140.0041959472000598910.04364129900932312-0.028887631371617317-0.042857948690652850.10470705479383469-0.0408879853785038-0.051475800573825836-0.05860661715269089-0.056715603917837140.0205586776137352-0.1393624246120453-0.029780531302094460.063673555850982670.040329758077859880.06255712360143661-0.05772097408771515-0.00461202114820480350.02574278414249420.0128983799368143080.030742239207029343-0.0153759690001606940.075282894074916840.12036753445863724-0.027847686782479286-0.05023723095655441-0.10574243962764740.027614230290055275-0.06196025013923645-0.0253206100314855580.0805106833577156-0.035054817795753480.08508069813251495-0.008360783569514751-0.09345240890979767-0.045183043926954270.039716653525829315-0.011702826246619225-0.023840755224227905-0.020589746534824370.03274783864617348-0.0196238104254007340.04653467237949371-0.0657004714012146-0.022832490503787994-0.10877890884876251-0.09515956044197083-0.001181238447315991-0.03510482981801033-0.004416486714035273-0.0290660448372364040.063013069331645970.026675516739487648-0.07738964259624481-0.0303911492228508-0.1289595216512680.04108332097530365-0.0247616339474916460.101295515894889830.0153361698612570760.120369903743267060.02574784681200981-0.105853967368602750.0481877438724041-0.044285569339990616-0.015749359503388405-0.0041341283358633520.04865095391869545-0.0193926468491554260.1887734532356262200-0.12669737637043000000000000000-0.1292078942060470600000000000000000000.0901355966925621000.172945991158485400000000000000000.09247284382581711000000000000000000000000000000000000000000000000.128649428486824040000000.26018074154853820000000-0.15358206629753113000000]
result_one 的向量纬度: 384
***********************************
result_batch: [[0.0292456559836864470.06558970361948013-0.08048833906650543-0.043510660529136660.02007218264043331-0.0338551364839077-0.0146461296826601030.029512533918023110.02428792603313923-0.0069256504066288470.0542233996093273160.07157529145479202-0.05407309904694557-0.00656783627346158-0.041879288852214810.05663100630044937-0.0196646507829427720.04049491882324219-0.036894135177135470.0125823467969894410.05698171257972717-0.001331504201516509-0.06157749891281128-0.0589274950325489040.018811061978340150.05411105230450630.0393385253846645360.0092234229668974880.017675152048468590.030851928517222404-0.10759645700454712-0.02536047250032425-0.009306006133556366-0.080821625888347630.044334512203931810.115209549665451050.0292060058563947680.017871527001261710.02189812809228897-0.04850282892584801-0.0231291335076093670.016689663752913475-0.00026810387498699130.0409078076481819150.040544554591178894-0.0333779975771904-0.043061554431915280.06878796964883804-0.090276367962360380.04061465710401535-0.045859087258577350.0248450916260480880.014886226505041122-0.0154953915625810620.08117575943470001-0.063868291676044460.009256614372134209-0.04564271122217178-0.03680528700351715-0.02314605563879013-0.021218957379460335-0.06859201937913895-0.08139422535896301-0.03127914294600487-0.00494861975312233-0.003661378053948283-0.114406108856201170.0189152676612138750.035271763801574710.048644840717315674-0.054539330303668976-0.05990486219525337-0.0142406206578016280.0787230059504509-0.0357420817017555240.040941115468740460.0091534787788987160.107727140188217160.0120082525536417960.077746853232383730.017971264198422432-0.026050359010696410.0484100915491580960.04463448002934456-0.04153643921017647-0.06149369478225708-0.088721059262752530.0066907685250043870.0216563940048217770.08044034242630005-0.01901768147945404-0.08414351195096970.08514054864645004-0.0229298006743192670.023368373513221740.04081713408231735-0.01286094170063734-0.0478512570261955260.019444083794951440.033737570047378540.044668488204479220.04775812476873398-0.057070504873991010.026686843484640120.09643639624118805-0.030883319675922394-0.06032019108533859-0.11758832633495331-0.0373451001942157750.0251945611089468-0.127159371972084050.029841352254152298-0.0098597733303904530.0015538301086053252-0.0253857132047414780.0631733313202858-0.01037281472235918-0.055575083941221240.037954200059175490.0106152594089508060.101606860756874080.06069841608405113-0.0187546182423830030.048313554376363754-0.0040788161568343640.018519394099712372-0.0356636270880699160.00952079612761736-0.066332034766674040.060060981661081314-0.032537177205085754-0.028637226670980453-0.0048932130448520180.01314787007868290.057202402502298355-0.073482848703861240.0295662228018045430.053562190383672714-0.0087563814595341680.075061157345771790.0048840045928955080.0305253211408853530.0073990081436932090.07655586302280426-0.142399236559867860.066696003079414370.0095196655020117760.018047815188765526-0.002290202770382166-0.09683565050363540.0310014560818672180.040406301617622375-0.02560652792453766-0.0134416902437806130.01740320399403572-0.011018154211342335-0.04025694355368614-0.0226153451949358-0.0071634291671216490.0446504019200801850.029555883258581160.05497200787067413-0.03216613456606865-0.035082932561635970.08922331780195236-0.03712785616517067-0.0089595085009932520.074116729199886329.668959683040157e-05-0.01436271145939827-0.077243119478225710.064418807625770570.02160792052745819-0.088405750691890720.0175627376884222030.0083953905850648880.0911942645907402-0.02592579834163189-0.0302099231630563740.004067786503583193-0.0094665195792913440.086042106151580810.0164852961897850040.013328078202903270.026726447045803070.0514499694108963-0.003258062293753028-0.043918877840042114-0.035855263471603394-0.1322089582681656-0.0156076895073056220.072300046682357790.086309462785720830.046040251851081850.09176873415708542-0.011060327291488647-0.0006686719716526568-0.10497952997684479-0.028848066926002502-0.0351075679063797-0.059855017811059950.0074297231622040270.0241792164742946620.0602357275784015660.009935239329934120.07571476697921753-0.02185540460050106-0.067706130445003510.081506446003913880.017597524449229240.09274228662252426-0.026951648294925690.02602461352944374-0.020356474444270134-0.066400974988937380.0229625701904296880.0021915955003350973-0.033324498683214190.13491277396678925-0.05148962512612343-0.1163063645362854-0.049601651728153230.056610740721225740.076220855116844180.04454787075519562-0.0242246501147747040.0145530300214886670.08659483492374420.032096680253744125-0.0213616956025362-0.012874231673777103-0.0107645643875002860.013416718691587448-0.01673184707760811-0.03829771280288696-0.0614520944654941560.059714507311582565-0.05892256274819374-0.033334761857986450.039367616176605225-0.03749806433916092-0.043544583022594450.025858543813228607-0.117360994219779970.035872943699359894-0.089089840650558470.017148172482848167-0.003803469007834792-0.05368763953447342-0.02880556695163255.082497409603093e-060.02275468409061432-0.1258903443813324-0.030655179172754288-0.095798395574092860.063031300902366640000000000000-0.27128753066062930000000000000000000000000-0.11520171910524368-0.01875990442931652-0.0117633529007434840000.2506221830844879000000000000.2831703424453735400000000.0424966327846050260-0.025690268725156784000000000000000-0.26191347837448120000000000000000000000-0.03187403827905655000000000000000000000], [0.112378597259521480.04861860349774361-0.0376137234270572660.060398664325475690.02703968994319439-0.09964825212955475-0.047511626034975050.0298021174967288970.046288002282381060.093099370598793030.027481129392981530.04515753686428070.0364395976066589360.06767767667770386-0.07525438815355301-0.010093528777360916-0.105853997170925140.0186307989060878750.03943737968802452-0.02702804096043110.012311549857258797-0.05268678441643715-0.024965906515717506-0.026482857763767242-0.008151397109031677-0.0021421143319457770.051235888153314590.0542431883513927460.109708234667778020.05001482367515564-0.063576169312000270.0044869966804981230.031074415892362595-0.06864775717258453-0.0112135792151093480.058609884232282640.039557170122861860.0278932936489582060.090154156088829040.042339041829109190.005969393532723188-0.0065846280194818970.0614190399646759-0.00134421396069228650.000323534564813599-0.0065315412357449530.054720487445592880.011065613478422165-0.0261209532618522640.050589241087436676-0.051431678235530850.0208277478814125060.06215802580118179-0.048511642962694170.074396632611751560.010935680009424686-0.09069500863552094-0.028675861656665802-0.026530716568231583-0.026212824508547783-0.11474236100912094-0.047392308712005615-0.07856929302215576-0.09073458611965180.149120658636093140.00073950708610937-0.0276066958904266360.088649630546569820.04736553877592087-0.09251098334789276-0.08699624240398407-0.008325239643454552-0.118013672530651090.0508645586669445040.028326757252216340.07250573486089706-0.0342592410743236540.05690464749932289-0.009491224773228168-0.056074574589729310.0038351030088961124-0.079145669937133790.038499917834997180.02390551194548607-0.06643089652061462-0.11977370083332062-0.030945260077714920.013981064781546593-0.070745989680290220.0635359063744545-0.0401991493999958040.0266127008944749830.04410440847277641-0.0457575619220733640.050664305686950684-0.0158576779067516330.000107162879430688920.0283281225711107250.035723075270652770.023175824433565140.00352183566428720950.01962110400199890.005977524910122156-0.0513034500181674960.005626533646136522-0.04476899281144142-0.004751210100948811-0.11106553673744202-0.004640893079340458-0.04027128219604492-0.04585787281394005-0.03198125585913658-0.030773147940635680.0024119659792631865-0.00351747614331543450.03931691125035286-0.00650871405377984050.034309525042772290.01876833848655224-0.111190162599086760.080571651458740230.061759755015373230.032501600682735440.03245925158262253-0.01989855244755745-0.093548327684402470.0218083355575799940.014541300013661385-0.079991757869720460.15274274349212646-0.078596465289592740.0043176063336431980.042733985930681230.014437444508075714-0.0416957177221775050.0455899313092231750.066071674227714540.0288530793040990830.008131169714033604-0.0160076450556516650.09268453717231750.046519018709659576-0.0054698707535862920.04338991641998291-0.03687686100602150.014725831337273121-0.053295224905014040.023308651521801950.03697780519723892-0.10461176931858063-0.0204610526561737060.005814286880195141-0.037546705454587936-0.011135002598166466-0.067623473703861240.00932338647544384-0.02837125025689602-0.065502867102622990.0037729912437498570.01625196635723114-0.03639095276594162-0.024458665400743484-0.122292920947074890.0028563493397086860.05628524720668793-0.048089597374200820.084921039640903470.07599000632762909-0.0090607134625315670.053737033158540726-0.084685735404491420.080737248063087460.033393792808055880.007297430187463760.032472383230924606-0.09071934968233109-0.00183458323590457440.091564387083053590.03870261088013649-0.004789541941136122-0.06289769709110260.03591926023364067-0.0449374616146087650.077307678759098050.081736102700233460.032510168850421906-0.11720295995473862-0.055041965097188950.03305969387292862-0.028758887201547623-0.124257348477840420.082423932850360870.08350227773189545-0.014061527326703072-0.0288104191422462460.022767679765820503-0.09259295463562012-0.03899339586496353-0.046944968402385710.03125568851828575-0.05229826271533966-0.115829899907112120.11383927613496780.086488857865333560.035391643643379210.053390156477689740.0310020279139280320.057377696037292480.074103042483329770.073623709380626680.11435332149267197-0.0081485994160175320.0035677594132721424-0.017051350325345993-0.0094016324728727340.026308294385671616-0.039822939783334730.0322037599980831150.016670774668455124-0.022109678015112877-0.03156069666147232-0.092156954109668730.032645314931869510.0566509552299976350.093317843973636630.035506553947925570.065813444554805760.048103749752044680.0028254217468202114-0.013030260801315308-0.09041456878185272-0.123045682907104490.038976632058620450.04356075078248978-0.02478792704641819-0.07482544332742691-0.010633297264575958-0.070473775267601010.058519195765256880.025826323777437210.013422787189483643-0.04334079474210739-0.016268182545900345-0.059182096272706985-0.07789990305900574-0.133418530225753780.07426107674837112-0.06384697556495667-0.08607056736946106-0.0069682304747402670.026449492201209070.029979858547449112-0.11920069158077240.0267218053340911870.0115496879443526270.0526302643120288850000-0.1685161143541336-0.03600144386291504000000000-0.17336703836917877000000000000.13832056522369385000000000000-0.170336678624153140-0.0043509136885404590000-0.18632999062538147000000000000000000000000.026328634470701218000-0.107257142663002010000000000000000000000000000000000000.0131998490542173390000000000000.0969453081488609300], [0.153186172246932980.0120481438934803010.060997374355793-0.03248025104403496-0.04544811695814133-0.003551278728991747-0.084154531359672550.03300673887133598-0.031614188104867935-0.00070115819107741120.047638762742280960.062480293214321136-0.013283523730933666-0.010895144194364548-0.005376795306801796-0.00969754345715046-0.044909164309501650.0120119508355855940.0506204403936862950.0512918122112751-0.021765172481536865-0.06621148437261581-0.029730729758739470.08347739279270172-0.030302915722131730.00640379404649138450.069077186286449430.059487920254468920.0538287311792373660.0084905885159969330.043449018150568010.021381264552474022-0.049303073436021805-0.057470329105854034-0.06423365324735641-0.032659899443387985-0.0137465875595808030.059947092086076736-0.0224541239440441130.04526257887482643-0.066187985241413120.0349330939352512360.067738912999629970.0378403291106224060.038373976945877075-0.0311806034296751020.022928236052393913-0.07407858967781067-0.0244397502392530440.016328342258930206-0.0484223291277885440.00486381398513913150.0298647228628397-0.0181980729103088380.05590683966875076-0.039292726665735245-0.07093042880296707-0.109619513154029850.0219470672309398650.04832296073436737-0.06029282510280609-0.05539312586188316-0.011324615217745304-0.082858540117740630.06846195459365845-0.10267366468906403-0.122998312115669250.126426681876182560.0028263500425964594-0.03375667706131935-0.0220743753015995030.05123089253902435-0.07047198712825775-0.041879534721374510.0522441565990448-0.017144419252872467-0.0008429868612438440.029549440369009970.0008572863298468292-0.0130836619064211850.06242526322603226-0.05625432729721069-0.038610145449638370.049790687859058380.0044310633093118670.015268760733306408-0.076758936047554020.0149511629715561870.083953782916069030.03826533257961273-0.00663897255435586-0.094296857714653020.16106882691383362-0.03774842247366905-0.0114024020731449130.0600762143731117250.030007813125848770.03327798470854759-0.0748489722609520.055900175124406815-0.0283402577042579650.01600261777639389-0.0262849293649196620.10443278402090073-0.0150891225785017010.0242751184850931170.05678171291947365-0.1455536037683487-0.01030773762613535-0.020783832296729088-0.075150348246097560.01248092483729124-0.016148805618286133-0.0901629775762558-0.031321380287408830.017282195389270782-0.010015499778091908-0.018107293173670770.060342885553836820.032393589615821840.12716381251811980.01998906210064888-0.0108323888853192330.10338100045919418-0.056557565927505490.030042702332139015-0.054028891026973724-0.000721592630725354-0.108895756304264070.14088381826877594-0.11793045699596405-0.083203613758087160.061841383576393130.112539477646350860.0202910210937261580.0339151956140995-0.027203723788261414-0.0076814289204776290.02081957459449768-0.06661828607320786-0.0045501179993152620.039198242127895355-0.067269995808601380.06550709158182144-0.02146827243268490.04889803007245064-0.0237016025930643080.056867405772209170.008659321814775467-0.037228401750326160.024795029312372208-0.02182435803115368-0.05772814154624939-0.0257082749158144-0.05164014920592308-0.037859994918107986-0.04754880443215370.0155101865530014040.03600529208779335-0.06733250617980957-0.013050341978669167-0.0379779040813446040.023307610303163530.068886347115039830.05834637209773064-0.07464545220136642-0.068808101117610930.052236989140510560.0362880527973175050.111953139305114750.0093527846038341520.0598069578409194950.04852903634309769-0.056169223040342330.0148395756259560590.0167610440403223040.06579736620187760.07730538398027420.026292018592357635-0.032488793134689330.079840637743473050.083088718354702-0.103003636002540590.040320802479982376-0.0046218233183026310.079517446458339690.013090482912957668-0.012350297532975674-0.05764230340719223-0.10284608602523804-0.074361301958560940.040860399603843690.11007206887006760.09862113744020462-0.008961549028754234-0.036280516535043716-0.02375003509223461-0.11150955408811569-0.100064337253570560.121646448969841-0.045186448842287064-0.0287429988384246830.0582641996443271640.069668412208557130.029326675459742546-0.052133571356534960.014226672239601612-0.0059239831753075120.102882951498031620.0420838259160518650.004057133570313454-0.10490916669368744-0.004548102617263794-0.002317698672413826-0.043322458863258360.031359348446130750.034361273050308230.068209826946258540.040867775678634644-0.044050052762031555-0.059429034590721130.12114147841930390.083524741232395170.053902089595794680.0263123642653226850.06423459947109222-0.0052928449586033820.106713995337486270.07304570078849792-0.054201606661081314-0.16842243075370789-0.08752123266458511-0.032818913459777830.00809864979237318-0.05722934752702713-0.064226768910884860.02131733112037182-0.019025782123208046-0.000134768764837645-0.09761235862970352-0.06996943801641464-0.07638676464557648-0.0389194414019584660.034888900816440580.020871419459581375-0.09783093631267548-0.0450081862509250640.05757489055395126-0.070098064839839940.05562001094222069-0.094446308910846710.06616976112127304-0.114637963473796840.007514768745750189-0.0219067204743623730.020799927413463593000-0.141600251197814940000000000000000000-0.03706675395369530000000.166964024305343630000-0.0713356584310531600000000000000000000000000-0.0347158126533031460000000.074345484375953670-0.04296543449163437000000000000000000000000000000000000.035426817834377290-0.09617671370506287000000000.093246154487133030000.1324938833713531500000]]
result_batch size: 3
result_batch 的向量纬度: 384

4.3、Prompts组件

在 LangChain 中,Prompts 组件用于为语言模型生成输入提示(prompts)。提示是引导语言模型生成期望结果的关键部分。LangChain 提供了多种构建和管理提示的方式,使得开发者可以创建高效、灵活的 prompts

1、few-short

Few-shot 提示是一种通过提供一些示例来引导语言模型更好地理解任务的方式。

from langchain_community.llms import QianfanLLMEndpoint
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
def few_shot_prompt_demo():
    """
    few_shot 用于在少量示例的基础上训练模型,使其能够更好地完成特定的任务
    :return:
    """

    # 示例
    examples = [
        {"Q""狗属于哺乳动物""A""对"},
        {"Q""蝙蝠属于鸟类""A""错,蝙蝠属于哺乳类"},
        {"Q""蛇属于爬行动物""A""对"},
    ]
    # 设置 example_prompt
    example_template = """
    问题:{Q}
    答案:{A}\n
    """


    # 实例化PromptTemplate
    example_prompt = PromptTemplate(
        input_variables=['Q''A'],  # 包含模版中所有变量的名称
        template=example_template  # 表示提示模版的字符串,待填充的变量位置
    )

    # 实例化 few-shot-prompt
    few_shot_prompt = FewShotPromptTemplate(
        examples=examples,  # 多个示例,一般是一个字典
        example_prompt=example_prompt,  # PromptTemplate 对象,为示例的格式
        prefix='判断动物的种类?',  # 示例之前要添加的文本
        suffix='问题:{input}\\答案',  # 示例之后要添加的文本
        input_variables=["input"],  # 所需要传递给模版的变量名
        example_separator="\\n"  # 用于分隔多个示例
    )

    # 实例化模型
    llm = QianfanLLMEndpoint(model='Qianfan-Chinese-Llama-2-13B')

    # 指定模型的输入
    prompt_text = few_shot_prompt.format(input='小明属于鸟类')
    print(f'prompt_text: {prompt_text}')

    # 将 prompt_text 输入模型
    result = llm.invoke(prompt_text)
    print(f'result: {result}')
2、zero_shot

Zero-Shot 是指通过提供简短的提示,让语言模型在没有提供具体示例的情况下完成任务。这与 Few-Shot 不同,Few-Shot 通过提供若干示例来帮助模型理解任务,而 Zero-Shot 则完全依赖模型的预训练知识来推测用户意图并给出答案。

def zero_shot_prompt_demo():
    """
    zero_shot 指在没有任何具体示例的情况下,让模型完成任务。
    :return:
    """

    # 定义模版
    template = "明天我要去{city}旅游,请告诉我{city}有哪些旅游景点?"
    prompt = PromptTemplate(
        input_variables=['city'],
        template=template
    )
    # 使用模版生成具体的prompt
    city = '深圳'
    prompt_text = prompt.format(city=city)
    print(f'prompt_text: {prompt_text}')

    # 实例化模型
    llm = QianfanLLMEndpoint(model='Qianfan-Chinese-Llama-2-13B')

    # 将 prompt 传入模型
    result = llm.invoke(prompt_text)
    print(f'result: {result}')

4.4、Chains组件

在 LangChain 中,Chains 是一种非常重要的概念,用于组合多个组件(如 PromptTemplate 和 LLM)来执行特定的任务。

1、单链
  • 旧版本
def single_chain_old():
    """
    单个chain
    :return:
    """

    # 定义模版
    template = "(name) 开了一家人工智能公司,帮我取一个符合公司气质的名字!"
    prompt = PromptTemplate(
        input_variables=["name"],  # 包含模版中所有变量名的名称
        template=template  # 表示提示模版字符串,待填充的变量位置
    )
    print(prompt)

    # 实例化模型
    llm = QianfanLLMEndpoint(model='Qianfan-Chinese-Llama-2-13B')

    # 构造 Chain,将大模型与prompt组合在一起
    #   chain = LLMChain(llm=llm, prompt=prompt)
    chain = LLMChain(llm=llm, prompt=prompt)

    # 执行 chain
    result = chain.invoke({"name""李白"})
    print(f"result: {result}")

LangChainDeprecationWarning: The class LLMChain was deprecated in LangChain 0.1.17 and will be removed in 1.0. Use RunnableSequence, e.g., prompt | llm instead.

  • 新版本
def single_chain():
    # 定义模版
    template = "{name} 开了一家人工智能公司,帮我取一个符合公司气质的名字!"
    prompt = PromptTemplate(
        input_variables=["name"],  # 包含模版中所有变量名的名称
        template=template  # 表示提示模版字符串,待填充的变量位置
    )
    print(prompt)  # 输出提示模版

    # 实例化模型
    llm = QianfanLLMEndpoint(model='Qianfan-Chinese-Llama-2-13B')

    # 构造 Chain,将大模型与prompt组合在一起
    chain = prompt | llm  # 使用 RunnableSequence

    # 执行 chain
    result = chain.invoke({"name""李白"})  # 输入参数为 {"name": "李白"}
    print(f"result: {result}")  # 输出结果

# 调用函数
llm_chain()

多链组合
def composite_chains()

    # 定义模版
    template = "{name} 开了一个早餐点,帮我取一个吸引人点名字!"
    prompt = PromptTemplate(
        input_variables=["name"],  # 确保使用大括号{}包裹变量名
        template=template  # 表示提示模版字符串,待填充的变量位置
    )


    # 实例化模型
    llm = QianfanLLMEndpoint(model='Qianfan-Chinese-Llama-2-13B')

    # 构造 chain:第一条链
    first_chain = prompt | llm  # 使用 RunnableSequence

    # 创建第二条链
    # 定义模版
    second_template = "{name} 开店赚钱了,然后又开了一个公司,帮我取一个吸引人的名字!"
    second_prompt = PromptTemplate(
        input_variables=["name"],
        template=second_template  # 表示提示模版字符串,待填充的变量位置
    )

    second_chain = second_prompt | llm  # 使用 RunnableSequence

    # 融合两条chain:使用 RunnableSequence
    overall_chain = first_chain | second_chain  # 将两条链组合在一起

    # 执行 chain
    result = overall_chain.invoke({"name""王安石"})  # 输入参数为 {"name":
 "王安石"}
    print(f"result: {result}")  # 输出结果

# 调用函数
simple_sequential_chain()
  • 定义模版
    • PromptTemplate 用于定义提示模版,包含输入变量和模版字符串。
    • input_variables 列出了模版中的变量名称。
    • template 提供了具体的提示模版字符串。
  • 实例化模型
    • 使用 QianfanLLMEndpoint 实例化大模型。
  • 构造 Chain
    • 使用 | 操作符将 prompt 和 llm 组合成一个 RunnableSequence。
  • 执行 Chain
    • 使用 invoke 方法执行链,并传入输入参数。
    • 输出结果。

4.5、Agents组件

在 LangChain 中,Agents 是一种高级抽象,用于构建复杂的任务流程。它们可以帮助你组合多个模型和工具,实现自动化的任务处理。下面是一些关于 LangChain 中 Agents 的基本概念和示例。

基本概念

  • Agents:代理是一种能够自动执行任务的组件,它可以调用多个工具和模型来完成复杂任务。

  • Tools:工具是代理可以调用的具体功能,例如查询数据库、执行网络请求等。

  • Chains:链是多个组件(如 PromptTemplate 和 LLM)的组合,用于执行特定任务。

  • RunnableSequence:用于组合多个组件,形成一个可执行的序列。

- 安装维基百科:pip install wikipedia
- 提高数值表达式的计算速度:pip install numexpr
def qianfan_agent():
    # 实例化大模型
    llm = QianfanLLMEndpoint(model='Qianfan-Chinese-Llama-2-13B')
    # 工具加载函数:利用工具来增强模型
    tools = load_tools(
        tool_names=['llm-math''wikipedia'],
        llm=llm
    )
    # 初始化智能体
    agent = initialize_agent(
        tools=tools,
        llm=llm,
        agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
        verbose=True,
        handle_parsing_errors=True
    )

    prompt_template = "商朝是什么时候建立的?开国皇帝是谁?推理过程显示中文,结果显示中文"
    prompt = PromptTemplate.from_template(prompt_template)

    print(f'prompt: {prompt}')

    res = agent.run(prompt)
    print(f'res: {res}')

4.5、Memory组件

在LangChain框架中,Memory组件是用来管理智能体(Agent)与其环境之间的交互历史的。这个组件允许智能体记住之前的对话或操作,以便在未来的交互中做出更明智的决策。这在构建具有上下文感知能力的应用程序时特别有用,例如聊天机器人或虚拟助手。

LangChain Memory组件的关键特性:

  • 会话历史记录:Memory组件可以存储过去的对话历史,使得智能体能够回顾之前的问题和答案。
  • 状态管理:通过保存状态信息,智能体可以在多次交互之间维护上下文,这对于需要连续对话的应用场景非常重要。
  • 数据持久化:某些Memory实现可能会支持将数据持久化到数据库或其他持久存储解决方案中,以防止数据丢失。
def add_msg_to_history() -> None:
    """
    添加消息到聊天历史记录

    该函数实例化一个 `ChatMessageHistory` 对象,并向其中添加用户消息和 AI 消息。
    最后打印出当前的消息历史记录,并将其转换为字典形式,再还原为消息对象。

    :return: 无返回值
    """


    # 实例化 ChatMessageHistory 对象
    history = ChatMessageHistory()

    # 向历史记录中添加用户消息
    history.add_user_message("你在哪里?")

    # 向历史记录中添加 AI 消息
    history.add_ai_message("我在图书馆!")

    # 打印当前的消息历史记录
    print(history.messages)

    # 将消息历史记录转换为字典形式
    dicts = messages_to_dict(history.messages)

    # 从字典形式还原消息历史记录
    new_messages = messages_from_dict(dicts)

    # 打印还原后的消息历史记录
    print(new_messages)


# 用于存储会话历史的字典
store = {}


def get_session_history(session_id: str) -> InMemoryChatMessageHistory:
    """
    获取会话历史

    :param session_id: 会话 ID
    :return: 会话历史实例
    """

    if session_id not in store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]


def store_qa_memory() -> None:
    """
    存储问答对并进行连续对话

    该函数使用 QianfanChatEndpoint 创建一个语言模型,并使用 RunnableWithMessageHistory 进行连续对话。
    最后打印出每次对话的结果。
    """


    # 初始化语言模型
    llm = QianfanChatEndpoint(model="ERNIE-4.0-8K-Preview-0518")

    # 创建 RunnableWithMessageHistory 对象,并传递语言模型和 get_session_history 函数
    chain = RunnableWithMessageHistory(llm, get_session_history)

    # 进行第一次预测
    result1 = chain.invoke(
        "老王有4个女朋友",
        config={"configurable": {"session_id""1"}}
    )  # session_id 确定线程
    print(f"result1: {result1}")

    # 进行第二次预测
    result2 = chain.invoke(
        "老李有6个女朋友",
        config={"configurable": {"session_id""1"}}
    )
    print(f"result2: {result2}")

    # 进行第三次预测
    result3 = chain.invoke(
        "老王和老李一共有多少个女朋友?",
        config={"configurable": {"session_id""1"}}
    )
    print(f"result3: {result3}")

4.6、Indexes组件

LangChain 的 Indexes 组件主要用于构建和管理索引,以便更高效地处理和检索数据。这些索引通常用于文档检索、知识库查询等场景。下面详细介绍 Indexes 组件的主要功能和使用方法。

  1. 索引的作用
  • 文档检索:快速查找相关文档或段落。
  • 知识库查询:从大量文本数据中提取有用信息。
  • 上下文理解:帮助模型更好地理解上下文,提高问答准确性。
  1. 主要组件
  • DocumentStore:存储和管理文档。
  • VectorStore:基于向量的存储,用于高效检索。
  • Retrievers:从存储中检索相关文档。
  • Index:索引结构,用于加速检索过程。

安装文档加载器的包:

pip install -U langchain-unstructured

4.7、VectorStore(向量数据库)

在 LangChain 中,VectorStore 是一种用于存储和检索向量化文档的组件,它可以用于执行相似性搜索。在使用自然语言处理任务时,将文本数据转换为向量(通常通过嵌入模型生成)后,我们可以使用 VectorStore 存储这些向量,并通过最近邻搜索或其他方式查询与查询向量最相似的文档。

VectorStore 组件在构建像语义搜索、推荐系统、聊天机器人等应用中非常有用。LangChain 提供了多种 VectorStore 的集成,支持不同的后端和存储方案,如 Pinecone、FAISS、Weaviate、Chroma 等。

VectorStore 的主要功能

  1. 添加文档:将向量化的文档存储在向量存储中。
  2. 检索文档:通过查询向量检索与之相似的文档。
  3. 更新和删除:某些 VectorStore 实现允许更新或删除存储的向量。

常见的 VectorStore 实现

以下是 LangChain 支持的一些常见向量存储后端:

  1. FAISS

  • FAISS 是一个开源的库,用于高效地执行相似性搜索。
  • 支持大规模的向量存储。
  • 可以在本地存储和快速检索。
  • Pinecone

    • 一个托管的向量数据库服务,支持大规模相似性搜索和在线更新。
    • 提供了快速和可扩展的向量检索服务。
  • Chroma

    • Chroma 是一个开源的向量数据库,支持高效的向量化数据存储和检索。
  • Weaviate

    • 一个基于云的开源向量搜索引擎,支持大规模相似性搜索。

    要安装 Chroma 向量数据库,可以通过 Python 的包管理器 pip 进行安装。以下是安装步骤:

    安装额外包

    1. 通过 pip 安装: 使用以下命令安装 chromadb 包,这是 Chroma 向量数据库的官方 Python 客户端:

      pip install chromadb
      # 使用的是 CPU 环境,并且不需要 GPU 加速
      pip install faiss-cpu
      # 需要使用 GPU 加速
      pip install faiss-gpu
    2. 安装带有额外依赖的版本(可选): 如果需要一些额外的功能或特性(如使用 SQLite 或其他后端),可以安装带有特定依赖的版本:

      pip install chromadb[all]
    3. 验证安装: 安装完成后,可以通过导入 chromadb 来确认安装成功:

      import chromadb
      import faiss

      如果没有错误提示,说明安装成功。

    文档加载器

    def load_text_file(file_path: str):
        """
        文档加载器
        :param file_path: 文件路径
        :return: 文本列表
        """

        loader = TextLoader(file_path=file_path, encoding="utf-8")
        docs = loader.load()
        print(f'docs:{docs}')
        print(len(docs))
        print(docs[0].page_content[:10])


    def text_splitter_docs():
        """
        使用 CharacterTextSplitter 将文档切分成较小的文本块。

        1. 初始化 CharacterTextSplitter 对象,指定切分参数。
        2. 将字符串列表转换为 Document 对象列表。
        3. 使用 CharacterTextSplitter 对 Document 对象列表进行切分。
        4. 输出切分后的结果。

        :return: 无返回值
        """


        # 初始化 CharacterTextSplitter 对象
        text_splitter = CharacterTextSplitter(
            separator='',  # 分隔文本的字符或者字符串(这里设置为空字符串,表示不使用分隔符)
            chunk_size=5,  # 每个文本块的最大长度
            chunk_overlap=2  # 文本块之间的重叠字符串长度
        )

        # 定义文档字符串列表
        docs = [
            "韩国未来环境可能不再利于白菜生长",
            "央视发声明回应不播国足比赛",
            "中国高铁1公里耗1万度电?官方回应",
        ]

        # 将字符串列表转换为 Document 对象列表
        documents = [Document(page_content=doc) for doc in docs]

        # 使用 CharacterTextSplitter 对 Document 对象列表进行切分
        results = text_splitter.split_documents(documents)

        # results = text_splitter.split_text(','.join(docs))

        # 输出切分后的结果
        print(f'results:{results}')

    向量数据库

    def vector_stores(file_path: str):
        """
        读取文件内容,切分文档,将切分后的文档向量化并保存到 Chroma 向量数据库中,
        并执行一次相似性搜索。

        :param file_path: 文件路径
        :return: 无返回值
        "
    ""

        # 读取文件内容
        with open(file_path, encoding="utf-8") as f:
            pku_text = f.read()

        # 切分文档
        text_splitter = CharacterTextSplitter(
            separator='',  # 分隔文本的字符或者字符串(这里设置为空字符串,表示不使用分隔符)
            chunk_size=100,  # 每个文本块的最大长度
            chunk_overlap=5  # 文本块之间的重叠字符串长度
        )
        texts = text_splitter.split_text(pku_text)
        print(f'texts:{len(texts)}')  # 输出切分后的文本块数量

        # 将切分后的文档向量化保存
        embed = QianfanEmbeddingsEndpoint()  # 初始化嵌入模型

        # 创建 Chroma 向量存储,并将切分后的文本块向量化保存
        doc_search = Chroma.from_texts(texts, embed)

        # 查询
        query = "中国高铁1公里耗1万度电?这种说法正确吗"  # 设置查询文本
        docs = doc_search.similarity_search(query)  # 在向量存储中搜索与查询文本最相似的文档
        print(f'docs:{docs}')  # 输出搜索结果
        print(len(docs))  # 输出搜索结果的数量

    文档检索器

    def retriever_faiss(file_path: str):
        """
        读取文件内容,切分文档,将切分后的文档向量化并保存到 FAISS 向量数据库中,
        并执行一次相似性搜索。

        :param file_path: 文件路径
        :return: 无返回值
        "
    ""

        # 加载文件内容
        loader = TextLoader(file_path=file_path, encoding="utf-8")
        documents = loader.load()

        # 使用 TokenTextSplitter 依据 tokens 数量切分文档
        text_splitter = TokenTextSplitter(
            chunk_size=50,  # 减少每个文本块的 token 长度
            chunk_overlap=10  # tokens 重叠部分
        )

        # 将文档切分为较小的文本块
        docs = text_splitter.split_documents(documents)

        # 初始化嵌入模型
        embed = QianfanEmbeddingsEndpoint()

        # 创建 FAISS 向量存储,并将切分后的文本块向量化保存
        db = FAISS.from_documents(docs, embed)

        # 创建检索器
        retriever = db.as_retriever(search_kwargs={"k": 1})

        # 执行相似性搜索
        query = "中国高铁1公里耗1万度电?这种说法正确吗"
        # results = retriever.get_relevant_documents(query)
        results = retriever.invoke(query)
        print(f'results:{results}')



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询