【Weaviate RAG】OpenAI+Weaviate RAG实践

检索引擎主要用于通过 OpenAI API 和向量数据库进行查询和生成响应。
主要功能包括:

  • 生成响应:使用 OpenAI 的 GPT-3.5 模型生成流式响应。
  • 混合检索:结合向量和关键词检索,获取相关文档块,并通过 OpenAI 生成最终响应。
  • OpenAI 查询:根据查询字符串和聊天历史,生成更复杂的查询并调用 OpenAI API。
  • 文档检索:根据 ID 或查询字符串检索单个或多个文档。

控制流图

flowchart TD
    A[开始] --> B{是否为混合检索}
    B -->|是| C[执行混合检索]
    C --> D[获取相关文档块]
    D --> E[调用 OpenAI 生成响应]
    E --> F[返回结果]
    B -->|否| G[执行 OpenAI 查询]
    G --> H[处理查询字符串]
    H --> I[查询向量数据库]
    I --> J[合并聊天历史和数据库结果]
    J --> K[调用 OpenAI 生成响应]
    K --> L[返回结果]
class RetrieverEngine(QueryEngine):

    def generate_response(self, messages):

        print("===messages==",messages)
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=messages,  # messages(列表),应遵循 OpenAI 的格式,如 [{"role": "user", "content": "问题内容"}]
            stream=True  # 启用流式响应,返回的是生成器而非一次性结果
        )
        return response

    '''
    执行混合检索(向量+关键词),获取数据库中的相关文档块,并通过 OpenAI 生成最终响应
    模拟输入:query_string = [{"role": "user", "content": "什么是机器学习?"}]
    '''
    def query(self, query_string: str) -> tuple:
        query_results = (
            QueryEngine.client.query.get(
                class_name="Chunk",
                properties=["text", "doc_name", "chunk_id", "doc_uuid", "doc_type"],
            )
            .with_hybrid(query=query_string)
            .with_generate(
                grouped_task=f"您是RAG的聊天机器人,根据给定的上下文回答查询{
     query_string} 仅使用上下文提供的信息,务必用中文回答"
            )
            .with_additional(properties=["score"])
            .with_limit(1)
            .do()
        )
        '''
        模拟输出 query_results =
        {
    "data": {
        "Get": {
            "Chunk": [
                {
                    "text": "机器学习是人工智能的一个分支,通过算法让计算机从数据中学习规律。",
                    "doc_name": "AI基础

你可能感兴趣的:(向量数据库,AIGC)