common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Overview
Contact
Event
Project
Research

Terms of service (Web service)

Terms of service (Quantum and ML Cloud service)

Privacy policy


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