ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: var(--articleFontsize);letter-spacing: 0.034em;text-align: justify;">概念
接下来,通过对比RAG与微调,帮助大家根据具体的业务需求,选择合适的策略:
任务特定vs通用性:微调通常是为特定任务进行优化,而RAG是通用的,可以用于多种任务。微调对于特定任务的完成效果好,但在通用性问题上不够灵活。
知识引用vs学习:RAG模型通过引用知识库来生成答案,而微调是通过学习任务特定的数据生成答案。RAG的答案直接来自外部知识,更容易核实。
即时性vs训练:RAG模型可以实现即时的知识更新,无需重新训练,在及时性要求高的应用中占优势。微调通常需要重新训练模型,时间成本较高。
可解释性vs难以解释性:RAG的答案可解释性强,因为它们来自知识库。微调模型的内部学习可能难以解释。
定制vs通用性:RAG可以根据特定领域进行定制,而微调需要为每个任务进行特定微调,需要更多任务特定的数据。
结合上面的比较,我们可以清楚的看到RAG的优势在于通用性、知识引用、即时性和可解释性,而微调在特定任务上可能更适用,但同时需要更多的任务特定数据和训练。选择使用哪种方法,应根据具体的应用需求和任务来决定。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.034em;">安装ERNIE BotingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.034em;">
!pipinstall--upgradeerniebot
测试embedding
importerniebot
erniebot.api_type="aistudio"
erniebot.access_token="<你的token>"
response=erniebot.Embedding.create(
model="ernie-text-embedding",
input=[
"我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot,可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题,请随时向我提问。"])
print(response.get_result())
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.034em;">引入Chromadb向量数据库
!pipinstallchromadb
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.034em;">自定义嵌入函数ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.034em;">
importos
importerniebot
fromtypingimportDict,List,Optional
importchromadb
fromchromadb.api.typesimportDocuments,EmbeddingFunction,Embeddings
defembed_query(content):
response=erniebot.embedding.create(
model="ernie-text-embedding",
input=[content])
result=response.get_result()
print(result)
returnresult
classErnieEmbeddingFunction(EmbeddingFunction):
def__call__(self,inputocuments)->Embeddings:
embeddings=[]
fortextininput:
response=embed_query(text)
try:
embedding=response[0]
embeddings.append(embedding)
except(IndexError,TypeError,KeyError)ase:
print(f"Errorprocessingtext:{text},Error:{e}")
returnembeddings
chroma_client=chromadb.Client()
chroma_client=chromadb.PersistentClient(path="chromac")#数据保存硬盘位置可选
collection=chroma_client.create_collection(name="demo",embedding_function=ErnieEmbeddingFunction())
print(collection)
导入数据集
文档切割
fromlangchain.text_splitterimportCharacterTextSplitter
fromlangchain.vectorstoresimportChroma
fromlangchain.document_loadersimportTextLoader
loader=TextLoader('./AI大课逐字稿.txt',encoding='utf-8')
documents=loader.load()
text_splitter=CharacterTextSplitter(chunk_size=600,chunk_overlap=20)
docs=text_splitter.split_documents(documents)
docs
Embedding 嵌入
importuuid
docs_list=[]
metadatas=[]
ids=[]
foritemindocs:
docs_list.append(item.page_content)
metadatas.append({"source":"AI大课逐字稿"})
ids.append(str(uuid.uuid4()))
collection.add(
documents=docs_list,
metadatas=metadatas,
ids=ids
)
检索
query="讲师说见VC有两种错误的思维方式,分别是什么"
results=collection.query(
query_texts=[query],
n_results=2
)
content=results['documents'][0]
[]
prompt=f"""
用户问题:{query}
<context>
{content}
</context>
根据<context>里的知识点回答用户问题
"""
response=erniebot.ChatCompletion.create(model="ernie-4.0",messages=[{"role":"user","content":prompt}])
print(response.get_result())
#讲师说见VC有两种错误的思维方式,分别是:
##1. 用过去的方式套今天的人工智能,比如比喻成OS。一旦比喻成操作系统,就得出结论全世界两套到三套,你觉得必然会被垄断、没有机会了,这种是典型的刻舟求剑。
#2. 人容易对已经成功的事委曲求全,对于创新的新生代创业者容易求全责备。特别是有些做VC容易犯这个错误,比如OpenAI做成了,已经证明了,是个傻子都能看到OpenAI做的很成功,我们容易对它顶礼膜拜,恨不得跪下。对创业者很多还不成形的想法,因为八字没有一撇,光看到了你的很多缺点,这种价值观是不对的,容易Miss掉一些有潜力的项目。
封装函数
defmain(query):
results=collection.query(
query_texts=[query],
n_results=2
)
content=results['documents'][0]
prompt=f"""
用户问题:{query}
<context>
{content}
</context>
根据<context>里的知识点回答用户问题
"""
response=erniebot.ChatCompletion.create(model="ernie-4.0",messages=[{"role":"user","content":prompt}])
returnresponse.get_result()
query=input("请输入您要查询的问题:")
print(main(query))
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |