AI 大模型之美
徐文浩
bothub 创始人
32335 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
AI 大模型之美
15
15
1.0x
00:00/00:00
登录|注册

10|AI连接外部资料库,让Llama Index带你阅读一本书

pip install langchain
pip install llama-index
提供相关内容作为提示语
使用关键词或语义搜索技术
源码以及示例
官方文档
思考llama-index的其他应用场景
探索llama-index的不同索引形式
利用索引进行问答和内容总结
使用llama-index建立索引
DataConnector支持多种格式
读取不同数据源格式
使用OCR和多模态模型
索引文本和图片
树状索引结构
分段小结
查询和回答问题
构建索引
安装和使用
查询索引后用AI回答问题
建立外部索引
先搜索,后提示(Prompt)
中文语料不足
训练样本的前后关系
问题:信息可能不全面或不适用于内部使用
连接外部第三方应用
无法回答最新新闻事件
中文问题回答不准确
推荐阅读
课后练习
小结
llama_index的应用
多模态能力
通过llama_index进行文章小结
llama-index封装
AI的“第二大脑”模式
Bing的解法
大型语言模型的不足
ChatGPT Plugins
GPT系列模型的局限性
AI连接外部资料库

该思维导图由 AI 生成,仅供参考

你好,我是徐文浩。
有不少人在使用 OpenAI 提供的 GPT 系列模型的时候,都反馈效果并不好。这些反馈中有一大类问题,是回答不了一些简单的问题。比如当我们用中文问 AI 一些事实性的问题,AI 很容易胡编乱造。而当你问它最近发生的新闻事件的时候,它就干脆告诉你它不知道 21 年之后的事情。
本来呢,我写到这里就可以了。不过到了 3 月 24 日,OpenAI 推出了 ChatGPT Plugins 这个功能,可以让 ChatGPT 通过插件的形式链接外部的第三方应用。我自己也还在排队等 waiting list,所以暂时也无法体验。不过,即使有了第三方应用,我们也不能确保自己想要知道的信息正好被其他人提供了。而且,有些信息和问题我们只想提供给自己公司的内部使用,并不想开放给所有人。这个时候,我们既希望能够利用 OpenAI 的大语言模型的能力,但是又需要这些能力仅仅在我们自己指定的数据上。那么这一讲,就是为了解决这个问题的。

大型语言模型的不足之处

我们先来尝试问 ChatGPT 一个人尽皆知的常识,“鲁迅先生去日本学习医学的老师是谁”,结果它给出的答案是鲁迅的好友,内山书店的老板内山完造,而不是大家都学习过的藤野先生。
之所以会出现这样的情况,和大模型的原理以及它使用训练的数据集是有关的。大语言模型的原理,就是利用训练样本里面出现的文本的前后关系,通过前面的文本对接下来出现的文本进行概率预测。如果类似的前后文本出现得越多,那么这个概率在训练过程里会收敛到少数正确答案上,回答就准确。如果这样的文本很少,那么训练过程里就会有一定的随机性,对应的答案就容易似是而非。而在 GPT-3 的模型里,虽然整体的训练语料很多,但是中文语料很少。只有不到 1% 的语料是中文的,所以如果问很多中文相关的知识性或者常识性问题,它的回答往往就很扯。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

llama_index是一个强大的Python库,可以帮助用户生成文章摘要和进行多模态信息索引。通过构建树状索引,用户可以对长文本进行分段小结,再对总结内容进行再次小结,从而生成整篇文章的摘要。文章还介绍了如何利用llama_index的GPTListIndex结构进行索引构建,并展示了如何利用ChatOpenAI模型进行文章小结。此外,文章还提到了llama_index的多模态能力,可以索引文本和图片信息,为读者展示了如何利用llama_index索引小票信息并进行查询。整体而言,本文深入浅出地介绍了llama_index库的使用方法,为读者提供了实用的技术指导,帮助他们快速了解并应用该库进行文章摘要生成和多模态信息索引。文章还提到了llama_index的快速迭代和不断发展,以及对中文支持和各种数据源格式的DataConnector。通过这篇文章,读者可以快速了解llama_index的功能和使用方法,以及如何构建自己的“第二大脑”资料库,将数据集交给AI进行索引,获得一个专属于自己的AI。同时,文章还提出了课后练习,鼓励读者深入探索llama_index的生态和功能,以及思考该库在其他领域的应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 大模型之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(72)

  • 最新
  • 精选
  • Owen
    置顶
    截止到目前,最新能运行的代码 ''' 归纳总结文章内容 ''' from langchain.chat_models import ChatOpenAI from langchain.text_splitter import SpacyTextSplitter from llama_index.core import SummaryIndex, ServiceContext, SimpleDirectoryReader from llama_index.core.node_parser import SentenceSplitter documents = SimpleDirectoryReader(input_dir="data").load_data() # 只能填写文件夹,不能具体到文件 service_context = ServiceContext.from_defaults( llm=ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo", max_tokens=1000, n=1), node_parser=SentenceSplitter(chunk_size=512, chunk_overlap=20), ) index = SummaryIndex.from_documents(documents = documents, service_context = service_context) query_engine = index.as_query_engine() response = query_engine.query("用中文总结这个故事") print(response)
    2024-03-01归属地:广东
    2
  • Penguin Shi
    置顶
    《藤野先生》输出摘要的代码,因为代码更新,有bug,参考https://gpt-index.readthedocs.io/en/latest/guides/primer/usage_pattern.html更新代码如下: from langchain.chat_models import ChatOpenAI from langchain.text_splitter import SpacyTextSplitter from llama_index import ListIndex, LLMPredictor, ServiceContext from llama_index import ( VectorStoreIndex, get_response_synthesizer, ) from llama_index.retrievers import VectorIndexRetriever from llama_index.query_engine import RetrieverQueryEngine from llama_index.node_parser import SimpleNodeParser # define LLM llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo", max_tokens=1024)) text_splitter = SpacyTextSplitter(pipeline="zh_core_web_sm", chunk_size = 2048) parser = SimpleNodeParser(text_splitter=text_splitter) documents = SimpleDirectoryReader('./data/mr_fujino').load_data() index = ListIndex.from_documents(documents) retriever = index.as_retriever() query_engine = RetrieverQueryEngine.from_args(retriever, response_mode='tree_summarize') response = query_engine.query("下面鲁迅先生以第一人称‘我’写的内容,请你用中文总结一下:") print(response) 另目前文档中,"我把从网上找到的《藤野先生》这篇文章变成了一个 txt 文件,放在了 data/mr_fujino 这个目录下。我们的代码也非常简单,一共没有几行。"此文字下方代码的,第7行,index = GPTSimpleVectorIndex.from_documents(documents)中,“GPTSimpleVectorIndex”还未改成“GPTVectorStoreIndex” ;第9行,更改为index.storage_context.persist('index_mr_fujino')。 请更改,方便后续同学学习并运行代码。
    2023-07-09归属地:广东
    7
  • Wise
    在llama_index V0.6.1 版本中,没有GPTSimpleVectorIndex 类了 import openai, os from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader os.environ["OPENAI_API_KEY"] = '' # 加载 documents documents = SimpleDirectoryReader('./data/mr_fujino').load_data() index = GPTVectorStoreIndex.from_documents(documents) index.storage_context.persist('index_mr_fujino') # 从磁盘重新加载: from llama_index import StorageContext, load_index_from_storage # rebuild storage context storage_context = StorageContext.from_defaults(persist_dir="./index_mr_fujino") # load index index = load_index_from_storage(storage_context) query_engine = index.as_query_engine() response = query_engine.query("鲁迅先生在日本学习医学的老师是谁?") print(response) 参考官方文档连接:https://gpt-index.readthedocs.io/en/latest/getting_started/starter_example.html

    作者回复: 👍 如果还想要用0.5.x运行,参看以下 “llama index 最近又更新了大版本,接口又改了一遍。如果要立刻可以运行,可以先 pip install --force-reinstall -v "llama-index==0.5.27" 退回到 0.5 系列的版本” 晚点我看一下更新代码到0.6.x 版本

    2023-05-07归属地:黑龙江
    5
    20
  • hello
    想请教下老师,我们喂的语料,会被其他人看到使用吗?

    作者回复: 根据OpenAI的协议 1. 通过ChatGPT界面提交的会被内部看到,审核,并用于训练 2. 通过API提交的不会用于训练

    2023-04-06归属地:湖南
    4
    13
  • daz2yy
    老师,请问下一个问题,我把它用作 QA 系统的时候有个问题,原本 QA 就有标准的回答模版,里面包括有文档地址、操作步骤等;如果让 GPT 根据这个模版来回答问题,他会自由发挥,会漏掉一部分内容;想拥有 AI 自由对话的能力,又想有固定的回答模版这个怎么能较好的兼顾呢?

    作者回复: 可以通过Few-Shot的方式,在Prompt里面给AI一些例子,类似于下面这样,具体Prompt你自己调了多试一下。 ==== 我们的问题一般用这样的格式回答: 问题:blablabla 回答: 1. 文档地址 blabla 2. 操作步骤 blabla === 以下是上下文 {context_str} 问题:{question_str} 回答:

    2023-04-04归属地:广东
    9
  • 马听
    分享一个加载MySQL数据的例子: from llama_index import GPTSimpleVectorIndex,download_loader DatabaseReader = download_loader('DatabaseReader') reader = DatabaseReader( scheme = "mysql", # Database Scheme host = "localhost", # Database Host port = "3306", # Database Port user = "martin", # Database User password = "xxxxxx", # Database Password dbname = "martin", # Database Name ) query = f""" select * from student_info """ documents = reader.load_data(query=query) print(documents)

    作者回复: 👍

    2023-04-12归属地:上海
    3
    8
  • Terry
    老师,请教一下langchain我理解也是一个LLM应用框架,它的功能和版本也更新很快。它和llama_index的区分是什么?在LLM应用开发上,我们一般怎么选择会比较好?

    作者回复: llama_index的重点放在了Index上,也就是通过各种方式为文本建立索引,有通过LLM的,也有很多并非和LLM相关的。 langchain的重点在 agent 和 chain 上,也就是流程组合上。 可以根据你的应用组合两个,如果你觉得问答效果不好,可以多研究一下llama-index。如果你希望有更多外部工具或者复杂流程可以用,可以多研究一下langchain。

    2023-04-25归属地:浙江
    7
  • Oxygen Au 昕
    response = list_index.query("下面鲁迅先生以第一人称‘我’写的内容,请你用中文总结一下:", response_mode="tree_summarize") print(response) 上面这段代码报错,AttributeError: 'GPTListIndex' object has no attribute 'query' , 我用的是llama-index 0.6.1 下面是正确的代码 query_engine = list_index.as_query_engine(response_mode="tree_summarize") response = query_engine.query("下面鲁迅先生以第一人称‘我’写的内容,请你用中文总结一下:") print(response) 结果: 鲁迅先生在日本学习医学时遇到了藤野严九郎教授,他很有学问,对学生也很关心,甚至帮助鲁迅修改讲义。但鲁迅当时不够用功,有时也很任性。在学习中,他遇到了一些困难和不愉快的事情,最终决定离开医学去学习生物学。离开前,藤野先生送给他一张照片,并希望他能保持联系。鲁迅很久没有和任何人通信,但想起了这位热心的老师,他的照片挂在鲁迅的房间里,每当他疲倦时看到照片就会感到勇气和良心发现。

    作者回复: llama index 最近又更新了大版本,接口又改了一遍。如果要立刻可以运行,可以先 pip install --force-reinstall -v "llama-index==0.5.27" 退回到 0.5 系列的版本 晚点我看一下更新代码到0.6.x 版本

    2023-05-09归属地:美国
    5
  • 勇.Max
    上面from llama_index import GPTSimpleVectorIndex会报错,因为现在已经改成了GPTVectorStoreIndex。 from llama_index import GPTVectorStoreIndex //老师看到后可以更新下

    编辑回复: 收到,马上更新,感谢提醒🌹

    2023-05-08归属地:北京
    3
    2
  • Viola
    有同学遇到吗? type object 'GPTSimpleVectorIndex' has no attribute 'from_documents'

    作者回复: 更新一下 llama-index 的版本,llama-index的接口从 0.4 到 0.5 做了比较大的更新。这一讲的内容,也是根据 0.5 的更新重新改过的。用最新版吧。 pip install -U llama-index

    2023-04-05归属地:摩尔多瓦
    2
    2
收起评论
显示
设置
留言
72
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部