deepseek+RAG

from flask import Flask, request, jsonify, render_template_string
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer


from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "deepseek-ai/deepseek-coder-6.7b-base"  # 以代码模型为例
# 假设模型文件已拷贝到本地目录
model_path = r"D:\deepseek_chat\final_save_models"

tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path)

embedding_path = r"C:\Users\Administrator\.cache\modelscope\hub\models\sentence-transformers\all-MiniLM-L6-v2"
embedding_model = SentenceTransformer(embedding_path)
documents = ["你好", "这是第二条文档内容"]
document_embeddings = embedding_model.encode(documents)

dimension = document_embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(np.array(document_embeddings))


# 假设这些函数和变量已经定义
def retrieve_documents(query, top_k=3):
    query_embedding = embedding_model.encode(query)
    distances, indices = index.search(np.array([query_embedding]), top_k)
    retrieved_docs = [documents[i] for i in indices[0]]
    return retrieved_docs

def generate_answer(query, retrieved_docs):
    input_text = f"查询: {query}\n相关文档: {' '.join(retrieved_docs)}\n回答: "
    input_ids = tokenizer.encode(input_text, return_tensors='pt')
    output = model.generate(input_ids, max_length=200, num_beams=5, no_repeat_ngram_size=2)
    answer = tokenizer.decode(output[0], skip_special_tokens=True)
    return answer

# 加载模型和数据

app = Flask(__name__)

@app.route('/', methods=['GET'])
def index_html():
    # 简单的 HTML 模板,用于显示输入框和提交按钮
    html_template = """
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>DeepSeek RAG 问答系统</title>
    </head>
    <body>
        <h1>DeepSeek RAG 问答系统</h1>
        <form id="questionForm">
            <label for="question">请输入你的问题:</label><br>
            <input type="text" id="question" name="question" size="50"><br>
            <input type="submit" value="提交">
        </form>
        <div id="answer" style="margin-top: 20px;"></div>

        <script>
            const form = document.getElementById('questionForm');
            form.addEventListener('submit', async (event) => {
                event.preventDefault();
                const question = document.getElementById('question').value;
                const response = await fetch('/ask', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({ query: question })
                });
                const data = await response.json();
                const answerDiv = document.getElementById('answer');
                answerDiv.innerHTML = `<p><strong>回答:</strong> ${data.answer}</p>`;
            });
        </script>
    </body>
    </html>
    """
    return render_template_string(html_template)

@app.route('/ask', methods=['POST'])
def ask():
    data = request.get_json()
    query = data.get('query')
    retrieved_docs = retrieve_documents(query,)
    answer = generate_answer(query, retrieved_docs)
    return jsonify({'answer': answer})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mxmevol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值