接入讯飞星火大模型API结合RAG实现外挂知识库的简易实例

最近OpenAI限制了国内对ChatGPT的接入,作者与身边许多朋友都在抱怨,许多基于OpenAI进行落地的AI项目看这个情况也得大改(无奈)。基于这种情况,作者尝试使用讯飞星火大模型进行项目实现,以下是作者尝试的方案情况。

目录

一、使用讯飞星火API

二、实现RAG外挂知识库

总结

一、使用讯飞星火API

首先,需要进入讯飞开放平台注册一个账号讯飞开放平台-以语音交互为核心的人工智能开放平台科大讯飞推出的移动互联网智能交互平台,为开发者免费提供:涵盖语音能力增强型SDK,一站式人机智能语音交互解决方案,专业全面的移动应用分析;icon-default.png?t=N7T8https://www.xfyun.cn/目前讯飞有一个SparkMax大模型一个亿token的免费方案,创建项目之后开源免费购买,Max模型对于非科研类项目还是够用的,如果觉得效果不行Ultra版模型也有相应的token赠送。 

进入讯飞官网的文档可以了解到初步的API调用方法星火认知大模型Web API文档 | 讯飞开放平台文档中心

首先,安装讯飞星火官方包

pip install --upgrade spark_ai_python

然后就可以运行下面代码实现最基础的chat调用

from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage

#星火认知大模型Spark Max的URL值,其他版本大模型URL值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
#星火认知大模型调用秘钥信息,请前往讯飞开放平台控制台(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
#星火认知大模型Spark Max的domain值,其他版本大模型domain值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'generalv3.5'

if __name__ == '__main__':
    spark = ChatSparkLLM(
        spark_api_url=SPARKAI_URL,
        spark_app_id=SPARKAI_APP_ID,
        spark_api_key=SPARKAI_API_KEY,
        spark_api_secret=SPARKAI_API_SECRET,
        spark_llm_domain=SPARKAI_DOMAIN,
        streaming=False,
    )
    messages = [ChatMessage(
        role="user",
        content='你好呀'
    )]
    handler = ChunkPrintHandler()
    a = spark.generate([messages], callbacks=[handler])
    print(a)
二、实现RAG外挂知识库

首先我们需要创建一个知识库,作者这边使用langchain库进行创建

from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import DirectoryLoader
from langchain_community.embeddings import HuggingFaceEmbeddings


# 加载文件夹中的所有txt类型的文件
loader = DirectoryLoader('./', glob='*.txt')
# 将数据转成 document 对象,每个文件会作为一个 document
documents = loader.load()

# 初始化加载器
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
# 切割加载的 document
split_docs = text_splitter.split_documents(documents)

# 这边的model_name可以根据自己需要选择,运行时会根据模型自动在线拉取
model_name = "all-MiniLM-L6-v2"
embeddings = HuggingFaceEmbeddings(
    model_name=model_name,
)
# 将 document 通过 openai 的 embeddings 对象计算 embedding 向量信息并临时存入 Chroma 向量数据库,用于后续匹配查询
docsearch = Chroma.from_documents(split_docs, embeddings, persist_directory="./vector_store")
docsearch.persist()
# 加载数据
docsearch = Chroma(persist_directory="./vector_store", embedding_function=embeddings)

之后就可以使用我们的知识库对我们的问题进行向量化的相似度匹配,然后将输出结果转化为提示词,与问题结合,进行chat调用就可以简单的实现RAG外挂知识库的功能,如果使用其他的API也可以参考这种方法(如使用OpenAI进行模型调用还可以直接使用langchain库建议调用)

question = "什么是组织创新网络"
# 加载之前持久化数据(k值为选取4个最匹配结果输出)
similarDocs = docsearch.similarity_search(question, k=4)
info = ""
for similardoc in similarDocs:
    info = info + similardoc.page_content
question = "结合以下信息:" + info + "回答" + question
from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage

#星火认知大模型Spark Max的URL值,其他版本大模型URL值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
#星火认知大模型调用秘钥信息,请前往讯飞开放平台控制台(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
#星火认知大模型Spark Max的domain值,其他版本大模型domain值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'generalv3.5'

if __name__ == '__main__':
    spark = ChatSparkLLM(
        spark_api_url=SPARKAI_URL,
        spark_app_id=SPARKAI_APP_ID,
        spark_api_key=SPARKAI_API_KEY,
        spark_api_secret=SPARKAI_API_SECRET,
        spark_llm_domain=SPARKAI_DOMAIN,
        streaming=False,
        max_tokens=500
    )
    messages = [ChatMessage(
        role="user",
        content=question
    )]
    handler = ChunkPrintHandler()
    a = spark.generate([messages], callbacks=[handler]).generations[0][0].text
    print(a)

作者这边使用的是一篇论文作为知识库文档,也可以使用其他格式,如doc、pdf等,只要将其转化为document类型就可以。

Output:组织创新网络是一种由多个组织构成的网络,这些组织通过复杂的关系相互连接,共同致力于创新活动。这种网络的目的是获取更多的异质性资源,汇聚不同类型组织的优势资源,促进信息及知识在网络中的实时流动,弥补单一企业内部知识资源的不足,发挥个体的知识创新资源,从而提高企业创新质量。
总结

以上是接入讯飞星火大模型API结合RAG实现外挂知识库的简单实现,在线搜索等也可以使用将结果转化为提示词,同问题一起向AI提问的思路。

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
模型+RAG(Retrieval-Augmented Generation)是一种结合了检索和生成的方法,用于实现数据采集。具体步骤如下: 1. 数据收集:首先需要收集大量的原始数据,可以是文本、图像、音频等形式的数据。这些数据可以从互联网、数据库、文档等多个渠道获取。 2. 数据预处理:对收集到的原始数据进行预处理,包括数据清洗、去重、标注等操作。这一步骤旨在提高数据的质量和准确性,为后续的模型训练做准备。 3. 模型训练:使用大模型进行训练,可以选择使用预训练的语言模型(如GPT)或自定义的模型。在训练过程中,可以采用生成式对抗网络(GAN)等方法来增强模型的生成能力。 4. 检索模块构建:为了提高生成结果的准确性和相关性,需要构建一个检索模块。该模块可以使用传统的信息检索技术,如倒排索引、向量检索等,也可以使用深度学习方法,如BERT、Dense Retrieval等。 5. 数据采集:利用构建好的检索模块,对用户提出的问题或需求进行检索,获取与之相关的数据。可以根据检索结果的相关性进行排序,选择最相关的数据进行生成。 6. 数据生成:基于检索到的数据,使用大模型进行生成。可以采用生成式模型,根据检索到的数据进行文本、图像等内容的生成。生成的结果可以根据需求进行进一步的处理和优化。 7. 结果评估:对生成的结果进行评估,可以使用人工评估或自动评估的方式。评估指标可以包括生成结果的准确性、流畅性、相关性等。 8. 迭代优化:根据评估结果,对模型和检索模块进行优化和调整。可以通过增加训练数据、调整模型参数、改进检索算法等方式来提升系统的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值