common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


autoQAOA
Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

RAGで量子コンピュータのプログラミングを教えてくれるAIを作る

Yuichiro Minato

2024/04/12 15:52

こんにちは、このシリーズ何度か分からないですが色々作ってます。今回はプログラミングコードが含まれたものをやってみます。

量子コンピュータのプログラミングって学ぶのが大変ですよね。それらをLLMに覚え込ませたいところですが、全部覚えてるとは限らないので、参照させてみます。今回はCSVを使ってみました。

pip install --quiet transformers accelerate langchain langchain-community sentence-transformers faiss-gpu pypdf gradio

from transformers import AutoTokenizer, pipeline

model_id = "mistralai/Mistral-7B-Instruct-v0.2"
tokenizer = AutoTokenizer.from_pretrained(model_id)

pipe = pipeline("text-generation", model=model_id, tokenizer=tokenizer, device=0, max_new_tokens=300)

モデルはMistral7Bを使いました。データはpandasでcsvを読み込みます。今回はこのlist2.csvのファイルの中に色々説明やコードが入ってます。

from langchain_community.document_loaders import DataFrameLoader
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import CharacterTextSplitter
import pandas as pd

df = pd.read_csv("list2.csv")
loader = DataFrameLoader(df)

documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = HuggingFaceEmbeddings(
 model_name="intfloat/multilingual-e5-large"
)

db = FAISS.from_documents(docs, embeddings)
retriever = db.as_retriever()
print(db.index.ntotal)

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain.llms import HuggingFacePipeline

llm = HuggingFacePipeline(pipeline=pipe)

template = """あなたは量子コンピュータプログラミングの先生です。次のコンテクストに含まれる説明とコードを参照して質問に答えてください:

{context}

Question: {question}
"""

prompt = ChatPromptTemplate.from_template(template)

chain = (
 {"context": retriever, "question": RunnablePassthrough()}
 | prompt
 | llm
 | StrOutputParser()
)

この辺りはお馴染みです。pipelineで構築したLLMをRAGに渡します。プロンプトは日本語で丁寧に指定をしました。そして最後にGradio。

import gradio as gr
import os

def add_text(history, text):
 history = history + [(text, None)]
 return history, gr.Textbox(value="", interactive=False)

def bot(history):
 query = history[-1][0]
 response = chain.invoke(query)  
 if "Answer:" in response:
  response = response.split("Answer:")[1]
 if "Question:" in response:
  response = response.split("Question:")[0]
 history[-1][1] = ""
 for character in response:
  history[-1][1] += character
  yield history

with gr.Blocks() as demo:
 chatbot = gr.Chatbot([])
 with gr.Row():
  txt = gr.Textbox(
   scale=4,
   show_label = False,
   container = False
  )
 clear = gr.Button("Clear")

txt_msg = txt.submit(add_text, [chatbot, txt], [chatbot, txt], queue = False).then(bot, chatbot, chatbot)
 txt_msg.then(lambda: gr.Textbox(interactive = True), None, [txt], queue = False)
 clear.click(lambda: None, None, chatbot, queue=False)

demo.queue()  
demo.launch(share=True)

もうなんというか最低限の構成を色々使い回すだけでできますね。こんな感じでインターフェースでやってくれます。

しかも、きちんとコードも提示して、コードの中も説明してくれました。

© 2025, blueqat Inc. All rights reserved