如何通过检索增强生成利用AI幻觉
如何利用AI幻觉和RAG
AI幻觉似乎不可避免,但我们可以通过检索增强生成(RAG)来优化输出。以下是一个示例,说明如何请求ChatGPT生成所需的法律条文。
组件:OpenAI API,Zilliz Cloud Collection
1. 设置
from openai import OpenAI
from pymilvus import MilvusClient
import numpy as np
import re
2. ChatGPT
# OpenAI的配置
openai_client = OpenAI(
api_key=your_api_key
)
# 调用模型生成目标内容
completion = openai_client.chat.completions.create(
model="gpt-4o", # 选择一个模型
messages=[
{"role": "system", "content": "your_system_content"}, # 设置环境
{"role": "user", "content": "your_user_content"} # 提问
]
)
raw_content = completion.choices[0].message.content
3. 在Zilliz Cloud Collection中进行向量搜索
# 嵌入原始内容
def get_embedding(text, model="text-embedding-3-small"):
return openai_client.embeddings.create(input=[text], model=model).data[0].embedding
raw_vector = get_embedding(raw_content)
vector = np.array(raw_vector) # 转换为(1536, )的向量
# Zilliz配置
milvus_client = MilvusClient(
uri=your_url,
token=your_token
)
# 在集合中进行向量搜索
milvus_search = milvus_client.search(
collection_name="your_collection", # 你的集合名称
data=[vector],
limit=1, # 返回结果数量
search_params={"metric_type": "COSINE", "params": {"nprobe": 10}} # 自定义参数
)
milvus_search = str(milvus_search) # 否则将被视为额外列表
4. 从Zilliz Cloud Collection中检索目标内容
# 使用正则表达式从搜索结果中提取ID
id_pattern = r"'id':\s*(\d+)"
id_match = re.search(id_pattern, milvus_search)
id = int(id_match.group(1))
# 根据ID在集合中获取内容
milvus_get = milvus_client.get(
collection_name="your_collection",
ids=[id]
)
milvus_get = str(milvus_get) # 否则将被视为额外列表
# 使用正则表达式从结果中提取法律条文
law_article_pattern = r"'law_article':\s*'([^']*?)'"
law_article_match = re.search(law_article_pattern, milvus_get)
law_article = law_article_match.group(1)
print(law_article)
更多详细信息请参阅 OpenAI 文档 和 Zilliz 文档。
现在,不用再担心幻觉的问题了!
评论 (0)