
2022年11月ChatGPT发布了3.5版本,迅速成为了炙手可热的大语言模型。短时间内,网络上涌现出了许多基于ChatGPT的想法和应用。
ChatGPT展现了其毋庸置疑的强大能力,同时我们发现它在特定领域的能力依然不够突出。因此我们在思考:能否基于 ChatGPT 训练出一个专精于特定领域大语言模型,使之在该领域的认知更深入、更精准。
以 Metaverse 领域为例,在MetaCat官网中有大量 Metaverse 领域研究的重要文章,因此,我们在寻找一种方法能够将这些文章所传达观点、思维方式赋予类似 ChatGPT 的大语言模型,使之成为一个像 MetaCat 一样具备 Metaverse 领域深度见解的大语言模型,以下是探索过程。
我们开始时寻找是否已经有一个模型或者通过对现有模型的训练可以满足需求。通过查阅文档和进行初步的调研,预选了三种方式:
LlamaIndex(原GPT-Index)
GPT微调(Fine-tuning)
BERT微调
简单了解了一下它的作用和工作原理
LlamaIndex是一种面向大规模文本数据集的索引技术,可为结构化和非结构化数据提供索引支持。它将庞大的文本数据集划分为多个小块,并通过索引表快速定位目标文档,以加快检索和处理速度。
在进一步调研之后,我们决定放弃采用LlamaIndex方案。最初我们的期望是让一个模型学习所有的文章,并且在提问时能够对这些知识进行总结和归纳。由于文章的连贯性,这可能需要对整篇文章进行一次性的学习,而LlamaIndex则是通过对内容进行分块索引的方式来工作的,不符合我们的需求。它适用于基于文档内容的对话场景。
接下来,我们将继续探索GPT微调和BERT这两种方式,以找到最适合我们目标的训练方法。
GPT微调:
GPT微调(Fine-tuning)是指在GPT模型的基础上,利用特定的数据集对其进行进一步的训练和调整,以适应特定的任务和应用场景。微调的目标是在已经训练好的模型上进行少量的调整,从而使模型在特定任务上表现更出色。
在微调过程中,我们使用 prompt 和 completion 文本对的格式作为输入数据。例如:
{"prompt":"元宇宙和互联网有什么区别?","completion":" 元宇宙和互联网不同,互联网是一个“二维”的网络世界,而元宇宙则是一个“三维”的虚拟世界。"}
因此,我们需要将文章的内容进行拆分和总结,生成多个文本对,然后使用这些文本对进行微调。值得注意的是,文本对中的信息质量将直接影响微调后模型的质量。
通过利用GPT模型获取每个部分的文本对,并对其进行总结,我们可以基于这些文本对对模型进行微调,这样的微调过程将使模型对特定领域的理解和生成能力得到显著提升。
Google的BERT(Bidirectional Encoder Representations from Transformers),它与GPT都是基于Transformer网络架构。但与GPT不同的是BERT 是一个双向的预训练模型,它通过在大规模无标签数据上进行预训练,学习到句子中各个位置的上下文表示。
BERT主要用于自然语言理解任务,如文本分类、情感分析、命名实体识别等。 它可以理解文本中的语义和关系,并能够找出语句之间的联系
相比之下GPT 则通常用于生成式任务,如文本生成、对话生成等。
这样看下来,通过GPT微调可能会实现我们最初的需求,接着让我们来实现并总结评估一下该过程中遇到的问题。
注:什么是单向预训练模型和双向预训练模型?
单向预训练模型:单向模型只能按照给定的顺序阅读文本,类似于我们在阅读时从左到右的方式。这意味着模型只能看到当前单词之前的上下文信息,而无法预测后面的单词。
双向预训练模型:双向模型可以同时考虑当前单词之前和之后的上下文信息,类似于我们在阅读时可以回头查看前面的内容,然后再继续往后读。这样的模型可以更好地理解整个句子的语义和上下文关系。
https://github.com/themetacat/ChatGPT_Fine_Tuning
注:由于“gpt-3.5-turbo”模型不支持微调,GPT-4 api并未直接开放使用,需要申请加入候补名单所以我们选用GPT-3模型,
首先获取到文章的内容,然后对其结构,内容进行处理
通过 “gpt-3.5-turbo”获得问答对数据
将数据整合上传
根据上传的数据创建微调模型
对模型进行质量评估
我们可以通过GitHub获取到文章content.txt,已经对其进行简单的结构化和内容处理。
(处理原因:原始文章的段落结构可能不代表一个完整的内容段落。例如,第一段可能是提问问题,而第二段则是对问题的解答,这些应该放在同一个段落中。此外,如果文章是由某个组织撰写的,并且内容中出现了大量的"我们"等词语,需要将这些词替换为该组织的名称,以使GPT生成更准确的问题和答案。)
content.txt:
似乎有许多新组织出现,在大型行业参与者的支持下,联合构建元宇宙。然后是 M3,一个由艺术家和开源黑客组成的草根社区,他们也想要参与构建开放元宇宙,并且在同一个章程的指导下已经运营了将近 4 年。
M3代表 Metaverse Makers。我们无法决定第三个 M 是什么,所以发挥你的想象力吧。它是 JanusXR、AnarchyArcade、Webaverse 和 Hyperfy 等创新项目背后思想的家园。自 2019 年以来,我们一直致力于构建一个可互操作和去中心化的元宇宙的共同目标,我们的 GitHub 证明了这一点:github.com/m3-org
......
然后通过“gpt-3.5-turbo”获取对每段内容获取不定量的问答对数据
获取到问答对数据后,我们可以使用官方提供的工具将数据格式转换为JSONL,并将其上传,获取文件的唯一标识符(ID)。
# 由于上传文件的格式要是JSONL的,使用官方 CLI 工具做一下转化,输入以下内容
# openai tools fine_tunes.prepare_data -f qa_pairs.json
# 上传文件
# https://platform.openai.com/docs/api-reference/files/upload
def create_file():
res = openai.File.create(
file=open("qa_pairs_prepared.jsonl", "rb"),
purpose='fine-tune'
)
print(res)
return res
接着,我们可以基于上传的数据文件创建微调模型,以便让模型能够更好地理解和回答特定领域的问题。
def create_fine_tune():
# file-xxx在上传文件后返回的结果中
res = openai.FineTune.create(training_file="file-xxx")
# res = openai.FineTune.retrieve(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
print(res)
最后,我们应对模型进行质量评估。(由于整体需求的性质,每个问题的答案可能是不确定的,类似于语文中的阅读理解。因此,直接进行人工评估可能是最准确的方法。通过评估模型在特定问题集上的回答质量,我们可以进一步优化微调过程,并确保生成的答案的准确性和一致性。)
在上述操作中提到,文本对的内容质量会直接影响到微调模型的质量,而处理后的文章内容又会影响到文本对的内容质量。因此,在初期的文章内容和文本对内容处理过程中,我们需要特别注意,因为它们会直接或间接地影响到最终模型的质量。
以此为前提,在初步测试和评估后得到以下问题
在“实现”过程中的第一步是获取所有的文章。这可以通过脚本来实现,但是获取到的文章内容格式可能各不相同,因此需要进行预处理。在此过程中,需要处理的问题是:原始文章中的每个段落不一定代表一个完整的部分。有时,在第n-1段是问题,第n段是答案,或者第n段是问题,第n+1段是答案。因此,这部分预计需要进行人工处理
””” 例如: 我们是谁 我们是一群致力于具体化实用“Metaverse”的创客。 我们通过开发产品、内容制作、布道和筹款来做到这一点。 “““
在分段处理完成后,类似于"我们"这样的内容需要明确指出是指文章的作者还是其他人,这样为了获得更准确的文本对,这也需要进行人工处理
处理完内容后,我们可以使用"gpt-3.5-turbo"模型来获取文本对的内容。由于速率限制,每分钟只能调用3次,并且根据token数计费(成本为💲0.002/1k tokens)。对于文章的长度约为1600字,分为15段,获取到了53条文本对,总共花费了💲0.011
对于获取到的文本对的内容,也需要通过人工检查和调整,以使其更加准确。
最后,对于通过微调得到的模型质量,我们需要进行评估。由于每个问题的答案可能不是确定型的,如之前提到的,最好的评估方法是通过人工实际测试。这样可以确保模型在特定领域的问题回答能力的准确性。
在所有的这些步骤处理好了之后,因为文章是频繁更新的,需要更新微调模型,而我在OpenAI文档中并未找到如何对微调模型进行更新操作
在探索“训练一个精通于特定领域的GPT模型”解决方案的过程中,最初,我们希望将所有原始文章的内容输入到一个模型中,以获得专属数据的GPT。然而,我们最终发现这种方法不可行,大多数情况下需要通过微调的方式来实现。因此,我们对微调进行了测试和评估。
经过测试和评估后总结了上述“关键步骤与成本评估”内容,我们也可以看到,需要对所有的文章进行分段、内容处理,并检查获取到的文本对的质量(需要对每篇文章有一定的理解)。此外,我们还需要评估模型的质量(评估者需要具备对文章和MetaVerse领域的一定认知)。所有这些步骤都需要人工进行处理,而且后两步的检查还需要一定的专业能力。综合而言,这会导致成本很高。如果使用一些自动化的方法,很可能会对某些步骤的结果质量产生影响,从而影响微调模型的质量。
目前暂未找到其他方法可以更好的实现我们这个想法,如果读者有更好的期待交流。微调的实现过程所需的内容和代码已经上传到GitHub,供大家参考。如果您在使用过程中发现有任何不清楚或问题,欢迎随时交流。
注:参考资料
OpenAI文档:https://platform.openai.com/docs/introduction LlamaIndex文档:https://gpt-index.readthedocs.io/en/latest/ https://blog.frankzhao.cn/build_gpt_bot_for_doc/

2022年11月ChatGPT发布了3.5版本,迅速成为了炙手可热的大语言模型。短时间内,网络上涌现出了许多基于ChatGPT的想法和应用。
ChatGPT展现了其毋庸置疑的强大能力,同时我们发现它在特定领域的能力依然不够突出。因此我们在思考:能否基于 ChatGPT 训练出一个专精于特定领域大语言模型,使之在该领域的认知更深入、更精准。
以 Metaverse 领域为例,在MetaCat官网中有大量 Metaverse 领域研究的重要文章,因此,我们在寻找一种方法能够将这些文章所传达观点、思维方式赋予类似 ChatGPT 的大语言模型,使之成为一个像 MetaCat 一样具备 Metaverse 领域深度见解的大语言模型,以下是探索过程。
我们开始时寻找是否已经有一个模型或者通过对现有模型的训练可以满足需求。通过查阅文档和进行初步的调研,预选了三种方式:
LlamaIndex(原GPT-Index)
GPT微调(Fine-tuning)
BERT微调
简单了解了一下它的作用和工作原理
LlamaIndex是一种面向大规模文本数据集的索引技术,可为结构化和非结构化数据提供索引支持。它将庞大的文本数据集划分为多个小块,并通过索引表快速定位目标文档,以加快检索和处理速度。
在进一步调研之后,我们决定放弃采用LlamaIndex方案。最初我们的期望是让一个模型学习所有的文章,并且在提问时能够对这些知识进行总结和归纳。由于文章的连贯性,这可能需要对整篇文章进行一次性的学习,而LlamaIndex则是通过对内容进行分块索引的方式来工作的,不符合我们的需求。它适用于基于文档内容的对话场景。
接下来,我们将继续探索GPT微调和BERT这两种方式,以找到最适合我们目标的训练方法。
GPT微调:
GPT微调(Fine-tuning)是指在GPT模型的基础上,利用特定的数据集对其进行进一步的训练和调整,以适应特定的任务和应用场景。微调的目标是在已经训练好的模型上进行少量的调整,从而使模型在特定任务上表现更出色。
在微调过程中,我们使用 prompt 和 completion 文本对的格式作为输入数据。例如:
{"prompt":"元宇宙和互联网有什么区别?","completion":" 元宇宙和互联网不同,互联网是一个“二维”的网络世界,而元宇宙则是一个“三维”的虚拟世界。"}
因此,我们需要将文章的内容进行拆分和总结,生成多个文本对,然后使用这些文本对进行微调。值得注意的是,文本对中的信息质量将直接影响微调后模型的质量。
通过利用GPT模型获取每个部分的文本对,并对其进行总结,我们可以基于这些文本对对模型进行微调,这样的微调过程将使模型对特定领域的理解和生成能力得到显著提升。
Google的BERT(Bidirectional Encoder Representations from Transformers),它与GPT都是基于Transformer网络架构。但与GPT不同的是BERT 是一个双向的预训练模型,它通过在大规模无标签数据上进行预训练,学习到句子中各个位置的上下文表示。
BERT主要用于自然语言理解任务,如文本分类、情感分析、命名实体识别等。 它可以理解文本中的语义和关系,并能够找出语句之间的联系
相比之下GPT 则通常用于生成式任务,如文本生成、对话生成等。
这样看下来,通过GPT微调可能会实现我们最初的需求,接着让我们来实现并总结评估一下该过程中遇到的问题。
注:什么是单向预训练模型和双向预训练模型?
单向预训练模型:单向模型只能按照给定的顺序阅读文本,类似于我们在阅读时从左到右的方式。这意味着模型只能看到当前单词之前的上下文信息,而无法预测后面的单词。
双向预训练模型:双向模型可以同时考虑当前单词之前和之后的上下文信息,类似于我们在阅读时可以回头查看前面的内容,然后再继续往后读。这样的模型可以更好地理解整个句子的语义和上下文关系。
https://github.com/themetacat/ChatGPT_Fine_Tuning
注:由于“gpt-3.5-turbo”模型不支持微调,GPT-4 api并未直接开放使用,需要申请加入候补名单所以我们选用GPT-3模型,
首先获取到文章的内容,然后对其结构,内容进行处理
通过 “gpt-3.5-turbo”获得问答对数据
将数据整合上传
根据上传的数据创建微调模型
对模型进行质量评估
我们可以通过GitHub获取到文章content.txt,已经对其进行简单的结构化和内容处理。
(处理原因:原始文章的段落结构可能不代表一个完整的内容段落。例如,第一段可能是提问问题,而第二段则是对问题的解答,这些应该放在同一个段落中。此外,如果文章是由某个组织撰写的,并且内容中出现了大量的"我们"等词语,需要将这些词替换为该组织的名称,以使GPT生成更准确的问题和答案。)
content.txt:
似乎有许多新组织出现,在大型行业参与者的支持下,联合构建元宇宙。然后是 M3,一个由艺术家和开源黑客组成的草根社区,他们也想要参与构建开放元宇宙,并且在同一个章程的指导下已经运营了将近 4 年。
M3代表 Metaverse Makers。我们无法决定第三个 M 是什么,所以发挥你的想象力吧。它是 JanusXR、AnarchyArcade、Webaverse 和 Hyperfy 等创新项目背后思想的家园。自 2019 年以来,我们一直致力于构建一个可互操作和去中心化的元宇宙的共同目标,我们的 GitHub 证明了这一点:github.com/m3-org
......
然后通过“gpt-3.5-turbo”获取对每段内容获取不定量的问答对数据
获取到问答对数据后,我们可以使用官方提供的工具将数据格式转换为JSONL,并将其上传,获取文件的唯一标识符(ID)。
# 由于上传文件的格式要是JSONL的,使用官方 CLI 工具做一下转化,输入以下内容
# openai tools fine_tunes.prepare_data -f qa_pairs.json
# 上传文件
# https://platform.openai.com/docs/api-reference/files/upload
def create_file():
res = openai.File.create(
file=open("qa_pairs_prepared.jsonl", "rb"),
purpose='fine-tune'
)
print(res)
return res
接着,我们可以基于上传的数据文件创建微调模型,以便让模型能够更好地理解和回答特定领域的问题。
def create_fine_tune():
# file-xxx在上传文件后返回的结果中
res = openai.FineTune.create(training_file="file-xxx")
# res = openai.FineTune.retrieve(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
print(res)
最后,我们应对模型进行质量评估。(由于整体需求的性质,每个问题的答案可能是不确定的,类似于语文中的阅读理解。因此,直接进行人工评估可能是最准确的方法。通过评估模型在特定问题集上的回答质量,我们可以进一步优化微调过程,并确保生成的答案的准确性和一致性。)
在上述操作中提到,文本对的内容质量会直接影响到微调模型的质量,而处理后的文章内容又会影响到文本对的内容质量。因此,在初期的文章内容和文本对内容处理过程中,我们需要特别注意,因为它们会直接或间接地影响到最终模型的质量。
以此为前提,在初步测试和评估后得到以下问题
在“实现”过程中的第一步是获取所有的文章。这可以通过脚本来实现,但是获取到的文章内容格式可能各不相同,因此需要进行预处理。在此过程中,需要处理的问题是:原始文章中的每个段落不一定代表一个完整的部分。有时,在第n-1段是问题,第n段是答案,或者第n段是问题,第n+1段是答案。因此,这部分预计需要进行人工处理
””” 例如: 我们是谁 我们是一群致力于具体化实用“Metaverse”的创客。 我们通过开发产品、内容制作、布道和筹款来做到这一点。 “““
在分段处理完成后,类似于"我们"这样的内容需要明确指出是指文章的作者还是其他人,这样为了获得更准确的文本对,这也需要进行人工处理
处理完内容后,我们可以使用"gpt-3.5-turbo"模型来获取文本对的内容。由于速率限制,每分钟只能调用3次,并且根据token数计费(成本为💲0.002/1k tokens)。对于文章的长度约为1600字,分为15段,获取到了53条文本对,总共花费了💲0.011
对于获取到的文本对的内容,也需要通过人工检查和调整,以使其更加准确。
最后,对于通过微调得到的模型质量,我们需要进行评估。由于每个问题的答案可能不是确定型的,如之前提到的,最好的评估方法是通过人工实际测试。这样可以确保模型在特定领域的问题回答能力的准确性。
在所有的这些步骤处理好了之后,因为文章是频繁更新的,需要更新微调模型,而我在OpenAI文档中并未找到如何对微调模型进行更新操作
在探索“训练一个精通于特定领域的GPT模型”解决方案的过程中,最初,我们希望将所有原始文章的内容输入到一个模型中,以获得专属数据的GPT。然而,我们最终发现这种方法不可行,大多数情况下需要通过微调的方式来实现。因此,我们对微调进行了测试和评估。
经过测试和评估后总结了上述“关键步骤与成本评估”内容,我们也可以看到,需要对所有的文章进行分段、内容处理,并检查获取到的文本对的质量(需要对每篇文章有一定的理解)。此外,我们还需要评估模型的质量(评估者需要具备对文章和MetaVerse领域的一定认知)。所有这些步骤都需要人工进行处理,而且后两步的检查还需要一定的专业能力。综合而言,这会导致成本很高。如果使用一些自动化的方法,很可能会对某些步骤的结果质量产生影响,从而影响微调模型的质量。
目前暂未找到其他方法可以更好的实现我们这个想法,如果读者有更好的期待交流。微调的实现过程所需的内容和代码已经上传到GitHub,供大家参考。如果您在使用过程中发现有任何不清楚或问题,欢迎随时交流。
注:参考资料
OpenAI文档:https://platform.openai.com/docs/introduction LlamaIndex文档:https://gpt-index.readthedocs.io/en/latest/ https://blog.frankzhao.cn/build_gpt_bot_for_doc/

搜索引擎Typesense的使用
注: 使用语言 python一:Typesense介绍Typesense将数据保存在磁盘当中,建立的索引保存内存中 Typesense是一个开源的、有容错能力的搜索引擎,针对实时(通常低于 50 毫秒)搜索即键入体验和开发人员生产力进行了优化。 Typesense做了一个对于其他搜索引擎的对比。(文档版,表格版) 索引数据速度以及资源占用: 对于220万份食谱(一份食谱相当于下文中提到的一个document)在 Typesense 中进行索引时占用了大约 900MB 的 RAM(内存)花了 3.6 分钟索引所有 220 万条记录在具有 4 个 vCPU 的服务器上,Typesense 每秒能够处理104 个并发搜索查询,平均搜索处理时间为11毫秒。RAM(内存)方面:如果数据量为 X MB大小,则需要占用2X-3XRAM(2-3倍数据量大小的占用) 如需深入了解可以查阅官方文档二:Typesense的用法1:使用typesense有两种方法使用自带的云服务,配置运行简单(收费)在本地安装typesense,自己维护配置(本文使用这种方法)2:安装启动typesense(1):下载...

Mastodon 和 Nostr:两种不同的社交产品,一样的去中心化愿景
概述:本文将分析和讲解Mastodon和Nostr这两个社交媒体平台,重点关注它们的产品应用和技术层面,以了解它们如何实现去中心化社交,并探讨它们在这方面的优势。我们将深入了解它们的架构设计和实现思路,并比较它们在用户体验、隐私保护、安全性等方面的差异。通过本文的分析和总结,读者将更好地了解这两个平台,以及它们在去中心化社交方面的贡献和发展。MastodonMastodon(长毛象)成立于2016年,是由Eugen Rochko创建的一个开源的微博客(microblog)平台,旨在为用户提供去中心化、隐私保护的社交体验。首先对涉及到的一些名词进行简单解释:联邦(federation):联邦是去中心化的一种形式。在联邦中,不是所有人共同使用一个中心服务,而是使用多个不限人数的服务器。ActivityPub:Mastodon使用一种标准化的、开放的协议来实现站点之间的互动,这种协议叫做ActivityPub。任何通过ActivityPub实现互联的软件都可以与Mastodon无缝通信,就像Mastodon站点之间的通信一样。实例(instance):每个人都可以在自己服务器上配置运行...

使用 The Graph 获取各大元宇宙项目交易信息
The graph 工作原理 Graph 根据subgraph描述(称为subgraph.graphq)学习什么以及如何索引以太坊数据。子图描述定义了subgraph感兴趣的智能合约,这些合约中要关注的事件,以及如何将事件数据映射到 The Graph 将存储在其数据库中的数据。该流程遵循以下步骤:去中心化应用程序通过智能合约上的交易将数据添加到以太坊。智能合约在处理交易时发出一个或多个事件。Graph Node 不断地扫描以太坊以寻找新的块以及它们可能包含的子图的数据。Graph Node 在这些块中为您的子图查找 Ethereum 事件并运行您提供的映射处理程序。映射是一个 WASM 模块,它创建或更新 Graph Node 存储的数据实体以响应以太坊事件。去中心化应用程序使用节点的GraphQL 端点查询 Graph 节点以获取从区块链索引的数据。Graph 节点反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便利用存储的索引功能获取此数据。去中心化应用程序在丰富的 UI 中为最终用户显示这些数据,他们使用这些数据在以太坊上发布新交易。循环重复 (来自The ...

搜索引擎Typesense的使用
注: 使用语言 python一:Typesense介绍Typesense将数据保存在磁盘当中,建立的索引保存内存中 Typesense是一个开源的、有容错能力的搜索引擎,针对实时(通常低于 50 毫秒)搜索即键入体验和开发人员生产力进行了优化。 Typesense做了一个对于其他搜索引擎的对比。(文档版,表格版) 索引数据速度以及资源占用: 对于220万份食谱(一份食谱相当于下文中提到的一个document)在 Typesense 中进行索引时占用了大约 900MB 的 RAM(内存)花了 3.6 分钟索引所有 220 万条记录在具有 4 个 vCPU 的服务器上,Typesense 每秒能够处理104 个并发搜索查询,平均搜索处理时间为11毫秒。RAM(内存)方面:如果数据量为 X MB大小,则需要占用2X-3XRAM(2-3倍数据量大小的占用) 如需深入了解可以查阅官方文档二:Typesense的用法1:使用typesense有两种方法使用自带的云服务,配置运行简单(收费)在本地安装typesense,自己维护配置(本文使用这种方法)2:安装启动typesense(1):下载...

Mastodon 和 Nostr:两种不同的社交产品,一样的去中心化愿景
概述:本文将分析和讲解Mastodon和Nostr这两个社交媒体平台,重点关注它们的产品应用和技术层面,以了解它们如何实现去中心化社交,并探讨它们在这方面的优势。我们将深入了解它们的架构设计和实现思路,并比较它们在用户体验、隐私保护、安全性等方面的差异。通过本文的分析和总结,读者将更好地了解这两个平台,以及它们在去中心化社交方面的贡献和发展。MastodonMastodon(长毛象)成立于2016年,是由Eugen Rochko创建的一个开源的微博客(microblog)平台,旨在为用户提供去中心化、隐私保护的社交体验。首先对涉及到的一些名词进行简单解释:联邦(federation):联邦是去中心化的一种形式。在联邦中,不是所有人共同使用一个中心服务,而是使用多个不限人数的服务器。ActivityPub:Mastodon使用一种标准化的、开放的协议来实现站点之间的互动,这种协议叫做ActivityPub。任何通过ActivityPub实现互联的软件都可以与Mastodon无缝通信,就像Mastodon站点之间的通信一样。实例(instance):每个人都可以在自己服务器上配置运行...

使用 The Graph 获取各大元宇宙项目交易信息
The graph 工作原理 Graph 根据subgraph描述(称为subgraph.graphq)学习什么以及如何索引以太坊数据。子图描述定义了subgraph感兴趣的智能合约,这些合约中要关注的事件,以及如何将事件数据映射到 The Graph 将存储在其数据库中的数据。该流程遵循以下步骤:去中心化应用程序通过智能合约上的交易将数据添加到以太坊。智能合约在处理交易时发出一个或多个事件。Graph Node 不断地扫描以太坊以寻找新的块以及它们可能包含的子图的数据。Graph Node 在这些块中为您的子图查找 Ethereum 事件并运行您提供的映射处理程序。映射是一个 WASM 模块,它创建或更新 Graph Node 存储的数据实体以响应以太坊事件。去中心化应用程序使用节点的GraphQL 端点查询 Graph 节点以获取从区块链索引的数据。Graph 节点反过来将 GraphQL 查询转换为对其底层数据存储的查询,以便利用存储的索引功能获取此数据。去中心化应用程序在丰富的 UI 中为最终用户显示这些数据,他们使用这些数据在以太坊上发布新交易。循环重复 (来自The ...
Share Dialog
Share Dialog

Subscribe to Yooma

Subscribe to Yooma
<100 subscribers
<100 subscribers
No activity yet