微信扫码
与创始人交个朋友
我要投稿
概念
接下来,通过对比RAG与微调,帮助大家根据具体的业务需求,选择合适的策略:
任务特定vs通用性:微调通常是为特定任务进行优化,而RAG是通用的,可以用于多种任务。微调对于特定任务的完成效果好,但在通用性问题上不够灵活。
知识引用vs学习:RAG模型通过引用知识库来生成答案,而微调是通过学习任务特定的数据生成答案。RAG的答案直接来自外部知识,更容易核实。
即时性vs训练:RAG模型可以实现即时的知识更新,无需重新训练,在及时性要求高的应用中占优势。微调通常需要重新训练模型,时间成本较高。
可解释性vs难以解释性:RAG的答案可解释性强,因为它们来自知识库。微调模型的内部学习可能难以解释。
定制vs通用性:RAG可以根据特定领域进行定制,而微调需要为每个任务进行特定微调,需要更多任务特定的数据。
结合上面的比较,我们可以清楚的看到RAG的优势在于通用性、知识引用、即时性和可解释性,而微调在特定任务上可能更适用,但同时需要更多的任务特定数据和训练。选择使用哪种方法,应根据具体的应用需求和任务来决定。
安装ERNIE Bot
!pip install --upgrade erniebot
测试embedding
import erniebot
erniebot.api_type = "aistudio"
erniebot.access_token = "<你的token>"
response = erniebot.Embedding.create(
model="ernie-text-embedding",
input=[
"我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot,可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题,请随时向我提问。" ])
print(response.get_result())
引入Chromadb向量数据库
!pip install chromadb
自定义嵌入函数
import os
import erniebot
from typing import Dict, List, Optional
import chromadb
from chromadb.api.types import Documents, EmbeddingFunction, Embeddings
def embed_query(content):
response = erniebot.embedding.create(
model="ernie-text-embedding",
input=[content])
result = response.get_result()
print(result)
return result
class ErnieEmbeddingFunction(EmbeddingFunction):
def __call__(self, input: Documents) -> Embeddings:
embeddings = []
for text in input:
response = embed_query(text)
try:
embedding = response[0]
embeddings.append(embedding)
except (IndexError, TypeError, KeyError) as e:
print(f"Error processing text: {text}, Error: {e}")
return embeddings
chroma_client = chromadb.Client()
chroma_client = chromadb.PersistentClient(path="chromac") #数据保存硬盘位置 可选
collection = chroma_client.create_collection(name="demo", embedding_function=ErnieEmbeddingFunction())
print(collection)
导入数据集
文档切割
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
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 嵌入
import uuid
docs_list=[]
metadatas=[]
ids=[]
for item in docs:
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掉一些有潜力的项目。
封装函数
def main(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}])
return response.get_result()
query=input("请输入您要查询的问题:")
print(main(query))
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-04-12
2024-05-28
2024-04-25
2024-05-14
2024-07-18
2024-08-13
2024-04-26