如何利用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 文档

现在,不用再担心幻觉的问题了!