paint-brush
আমি কিভাবে BigQuery এবং Langchain এর সাথে একটি ডেটা বিশ্লেষণ সহকারী তৈরি করেছিদ্বারা@yi
966 পড়া
966 পড়া

আমি কিভাবে BigQuery এবং Langchain এর সাথে একটি ডেটা বিশ্লেষণ সহকারী তৈরি করেছি

দ্বারা Yi Ai11m2024/06/10
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

স্ট্রীমলিট এবং Google ক্লাউড ডিএলপি-এর মতো টুলগুলির সাহায্যে ডেটা বিশ্লেষণ, প্রক্রিয়াকরণকে স্ট্রীমলাইন এবং ডেটা গোপনীয়তা নিশ্চিত করতে ল্যাংচেন, ওপেনএআই এবং বিগকুয়েরির সুবিধা নিন।
featured image - আমি কিভাবে BigQuery এবং Langchain এর সাথে একটি ডেটা বিশ্লেষণ সহকারী তৈরি করেছি
Yi Ai HackerNoon profile picture



যেহেতু ব্যবসাগুলি প্রতিদিন প্রচুর পরিমাণে ডেটা তৈরি করে, তাই এই সমস্ত তথ্য থেকে দরকারী অন্তর্দৃষ্টিগুলি বের করা কঠিন হতে পারে, বিশেষত জটিল ডেটাসেট এবং বিপুল পরিমাণ ডেটা সহ। কিন্তু জেনারেটিভ AI দিয়ে, আমরা ডেটা বিশ্লেষণকে স্ট্রীমলাইন এবং স্বয়ংক্রিয় করতে পারি, এটিকে দক্ষ এবং অ্যাক্সেসযোগ্য করে তুলতে পারি। এই নিবন্ধে, আমি আপনাকে দেখাব কিভাবে Google Langchain , OpenAI, BigQuery এবং ডেটা লস প্রিভেনশন (DLP) ব্যবহার করে একটি AI ডেটা বিশ্লেষণ সহকারী সেট আপ এবং ব্যবহার করতে হয়।


ব্যবহারের ক্ষেত্রে: BigQuery-এর সাহায্যে স্বয়ংক্রিয় ডেটা বিশ্লেষণ

সমাধান ডিজাইন

সমাধানটিতে একটি Langchain এবং OpenAI ব্যবহার করে একটি Streamlit অ্যাপ সেট আপ করা জড়িত যা ডেটা বিশ্লেষণ স্বয়ংক্রিয় করতে BigQuery ডেটাসেটের সাথে ইন্টারঅ্যাক্ট করে। এই এজেন্ট নির্দিষ্ট কাজের জন্য কাস্টম সরঞ্জাম ব্যবহার করবে যেমন PII গ্রাহকের বৈশিষ্ট্যগুলি মাস্ক করা এবং ডেটা ভিজ্যুয়ালাইজ করা। অতিরিক্তভাবে, এজেন্টকে চ্যাটের ইতিহাস ধরে রাখার জন্য কনফিগার করা হবে, প্রাসঙ্গিকভাবে সঠিক প্রতিক্রিয়া নিশ্চিত করা হবে।


এখানে সমাধান আর্কিটেকচারের একটি চিত্র রয়েছে:


আসুন একটি দৃশ্যকল্প বিবেচনা করি যেখানে আমাদের কাছে একটি BigQuery ডেটাসেট রয়েছে যাতে নিম্নলিখিত টেবিলগুলি রয়েছে:

  • গ্রাহক সারণী : গ্রাহকের ডেটা রয়েছে।
  • যোগাযোগের টেবিল : গ্রাহকের যোগাযোগের বিশদ রয়েছে।
  • গ্রাহকের ঠিকানা সারণী : গ্রাহকদের ঠিকানার সাথে লিঙ্ক করে।
  • ঠিকানা সারণী : ঠিকানার তথ্য রয়েছে।
  • কাজের পরিসংখ্যান সারণী : লগ ইটিএল ব্যাচের কাজের সারাংশ যা গ্রাহকের প্রোফাইল টেবিলে ডেটা ছেঁটে এবং লোড করে


ল্যাংচেইন সেট আপ করুন

ল্যাংচেইন কি?

ল্যাংচেইন এআই ডেভেলপারদের বাহ্যিক ডেটা উত্সগুলির সাথে ভাষার মডেলগুলিকে সংযুক্ত করার জন্য সরঞ্জাম সরবরাহ করে। এটি ওপেন সোর্স এবং একটি সক্রিয় সম্প্রদায় দ্বারা সমর্থিত। সংস্থাগুলি বিনামূল্যে ল্যাংচেইন ব্যবহার করতে পারে এবং কাঠামোতে দক্ষ অন্যান্য বিকাশকারীদের কাছ থেকে সমর্থন পেতে পারে।


ল্যাংচেন ব্যবহার করে ডেটা বিশ্লেষণ করতে, আমাদের প্রথমে ল্যাংচেইন এবং ওপেনএআই লাইব্রেরিগুলি ইনস্টল করতে হবে। এটি প্রয়োজনীয় লাইব্রেরিগুলি ডাউনলোড করে এবং তারপরে আপনার প্রকল্পে আমদানি করে করা যেতে পারে।


ল্যাংচেইন ইনস্টল করুন:

 pip install langchain matplotlib pandas streamlit pip install -qU langchain-openai langchain-community


ল্যাংচেইন মডেল সংজ্ঞায়িত করুন এবং বিগকুয়েরি সংযোগ সেট আপ করুন:

 import os import re import streamlit as st from google.cloud import dlp_v2 from google.cloud.dlp_v2 import types from langchain.agents import create_sql_agent from langchain_community.vectorstores import FAISS from langchain_core.example_selectors import SemanticSimilarityExampleSelector from langchain_core.messages import AIMessage from langchain_core.prompts import ( SystemMessagePromptTemplate, PromptTemplate, FewShotPromptTemplate, ) from langchain_core.prompts.chat import ( ChatPromptTemplate, HumanMessagePromptTemplate, MessagesPlaceholder, ) from langchain.memory import ConversationBufferMemory from langchain_experimental.utilities import PythonREPL from langchain_openai import ChatOpenAI, OpenAIEmbeddings from langchain.sql_database import SQLDatabase from langchain.tools import Tool service_account_file = f"{os.getcwd()}/service-account-key.json" os.environ["OPENAI_API_KEY"] = ( "xxxxxx" ) os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = service_account_file model = ChatOpenAI(model="gpt-4o", temperature=0) project = "lively-metrics-295911" dataset = "customer_profiles" sqlalchemy_url = ( f"bigquery://{project}/{dataset}?credentials_path={service_account_file}" ) db = SQLDatabase.from_uri(sqlalchemy_url)


কাস্টম টুল সেট আপ করা হচ্ছে

আমাদের এজেন্টের ক্ষমতা বাড়ানোর জন্য, আমরা নির্দিষ্ট কাজের জন্য কাস্টম টুল সেট আপ করতে পারি, যেমন PII ডেটা মাস্ক করা এবং ডেটা ভিজ্যুয়ালাইজ করা।


  1. Google ক্লাউড DLP এর সাথে PII মাস্ক করা

    ডেটা গোপনীয়তা অত্যন্ত গুরুত্বপূর্ণ। আউটপুটগুলিতে PII সুরক্ষিত করতে, আমরা Google ক্লাউড ডেটা লস প্রিভেনশন (DLP) ব্যবহার করতে পারি। আমরা একটি কাস্টম টুল তৈরি করব যা DLP API-কে কল করে প্রতিক্রিয়াতে উপস্থিত যেকোনো PII ডেটা মাস্ক করতে।


 def mask_pii_data(text): dlp = dlp_v2.DlpServiceClient() project_id = project parent = f"projects/{project_id}" info_types = [ {"name": "EMAIL_ADDRESS"}, {"name": "PHONE_NUMBER"}, {"name": "DATE_OF_BIRTH"}, {"name": "LAST_NAME"}, {"name": "STREET_ADDRESS"}, {"name": "LOCATION"}, ] deidentify_config = types.DeidentifyConfig( info_type_transformations=types.InfoTypeTransformations( transformations=[ types.InfoTypeTransformations.InfoTypeTransformation( primitive_transformation=types.PrimitiveTransformation( character_mask_config=types.CharacterMaskConfig( masking_character="*", number_to_mask=0, reverse_order=False ) ) ) ] ) ) item = {"value": text} inspect_config = {"info_types": info_types} request = { "parent": parent, "inspect_config": inspect_config, "deidentify_config": deidentify_config, "item": item, } response = dlp.deidentify_content(request=request) return response.item.value


  1. পাইথন REPL

    এর পরে, পাইথন ব্যবহার করে LLM-কে ডেটা ভিজ্যুয়ালাইজেশন করতে সক্ষম করার জন্য, আমরা Python REPL-এর লিভারেজ করব এবং আমাদের এজেন্টের জন্য একটি কাস্টম টুল সংজ্ঞায়িত করব।


 python_repl = PythonREPL()


এখন, এজেন্ট টুল তৈরি করা যাক, যার মধ্যে থাকবে mask_pii_data এবং python_repl:

 def sql_agent_tools(): tools = [ Tool.from_function( func=mask_pii_data, name="mask_pii_data", description="Masks PII data in the input text using Google Cloud DLP.", ), Tool( name="python_repl", description=f"A Python shell. Use this to execute python commands. \ Input should be a valid python command. \ If you want to see the output of a value, \ you should print it out with `print(...)`.", func=python_repl.run, ), ] return tools

কয়েকটি শট উদাহরণ ব্যবহার করে

কয়েকটি-শট উদাহরণ সহ মডেল সরবরাহ করা এর প্রতিক্রিয়াগুলিকে গাইড করতে এবং কর্মক্ষমতা উন্নত করতে সহায়তা করে।

নমুনা SQL প্রশ্ন সংজ্ঞায়িত করুন,

 # Example Queries sql_examples = [ { "input": "Count of Customers by Source System", "query": f""" SELECT source_system_name, COUNT(*) AS customer_count FROM `{project}.{dataset}.customer` GROUP BY source_system_name ORDER BY customer_count DESC; """, }, { "input": "Average Age of Customers by Gender", "query": f""" SELECT gender, AVG(EXTRACT(YEAR FROM CURRENT_DATE()) - EXTRACT(YEAR FROM dob)) AS average_age FROM `{project}.{dataset}.customer` GROUP BY gender; """, }, ... ]


এরপরে, কয়েক-শট প্রম্পট টেমপ্লেটে উদাহরণ যোগ করুন।

 example_selector = SemanticSimilarityExampleSelector.from_examples( sql_examples, OpenAIEmbeddings(), FAISS, k=2, input_keys=["input"], )


এর পরে, উপসর্গ এবং প্রত্যয় সংজ্ঞায়িত করুন, তারপর সরাসরি from_messages ফ্যাক্টরি পদ্ধতিতে few_shot_prompt পাস করুন।


দ্রষ্টব্য: SUFFIX-এ একটি {chat_history} ভেরিয়েবল আছে, যা আমি পরবর্তী ধাপে ব্যাখ্যা করব যখন আমরা এজেন্ট তৈরি করব এবং মেমরি যোগ করব।

 PREFIX = """ You are a SQL expert. You have access to a BigQuery database. Identify which tables can be used to answer the user's question and write and execute a SQL query accordingly. Given an input question, create a syntactically correct SQL query to run against the dataset customer_profiles, then look at the results of the query and return the answer. Unless the user specifies a specific number of examples they wish to obtain, always limit your query to at most {top_k} results. You can order the results by a relevant column to return the most interesting examples in the database. Never query for all the columns from a specific table; only ask for the relevant columns given the question. You have access to tools for interacting with the database. Only use the information returned by these tools to construct your final answer. You MUST double check your query before executing it. If you get an error while executing a query, rewrite the query and try again.DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database. If the question does not seem related to the database, just return "I don't know" as the answer. If the user asks for a visualization of the results, use the python_agent tool to create and display the visualization. After obtaining the results, you must use the mask_pii_data tool to mask the results before providing the final answer. """ SUFFIX = """Begin! {chat_history} Question: {input} Thought: I should look at the tables in the database to see what I can query. Then I should query the schema of the most relevant tables. {agent_scratchpad}""" few_shot_prompt = FewShotPromptTemplate( example_selector=example_selector, example_prompt=PromptTemplate.from_template( "User input: {input}\nSQL query: {query}" ), prefix=PREFIX, suffix="", input_variables=["input", "top_k"], example_separator="\n\n", ) messages = [ SystemMessagePromptTemplate(prompt=few_shot_prompt), MessagesPlaceholder(variable_name="chat_history"), HumanMessagePromptTemplate.from_template("{input}"), AIMessage(content=SUFFIX), MessagesPlaceholder(variable_name="agent_scratchpad"), ] prompt = ChatPromptTemplate.from_messages(messages)


ভেরিয়েবলের ব্যাখ্যা

  • ইনপুট : ব্যবহারকারীর ইনপুট বা প্রশ্ন।

  • agent_scratchpad : মধ্যবর্তী পদক্ষেপ বা চিন্তার জন্য একটি অস্থায়ী স্টোরেজ এলাকা।

  • chat_history : প্রসঙ্গ বজায় রাখতে পূর্ববর্তী ইন্টারঅ্যাকশনের ট্র্যাক রাখে।

  • handle_parsing_errors : নিশ্চিত করে যে এজেন্ট সুন্দরভাবে পরিচালনা করতে পারে এবং পার্সিং ত্রুটি থেকে পুনরুদ্ধার করতে পারে।

  • মেমরি : চ্যাট ইতিহাস সংরক্ষণ এবং পুনরুদ্ধার করতে ব্যবহৃত মডিউল।


এটা চূড়ান্ত ধাপের জন্য সময়. অ্যাপটি তৈরি করা যাক!


Streamlit সহ একটি LLM অ্যাপ তৈরি করা

আমরা এইমাত্র তৈরি করা ল্যাংচেইন এজেন্ট পরীক্ষা করার জন্য একটি ইন্টারেক্টিভ ইন্টারফেস তৈরি করতে, আমরা স্ট্রিমলিট ব্যবহার করতে পারি।


 st.title("Data Analysis Assistant") if "history" not in st.session_state: st.session_state.history = [] user_input = st.text_input("Ask your question:") if st.button("Run Query"): if user_input: with st.spinner("Processing..."): st.session_state.history.append(f"User: {user_input}") response = agent_executor.run(input=user_input) if "sandbox:" in response: response = response.replace(f"sandbox:", "") match = re.search(r"\((.+\.png)\)", response) if match: image_file_path = match.group(1) if os.path.isfile(image_file_path): st.session_state.history.append({"image": image_file_path}) else: st.error("The specified image file does not exist.") else: st.session_state.history.append(f"Agent: {response}") st.experimental_rerun() else: st.error("Please enter a question.") for message in st.session_state.history: if isinstance(message, str): st.write(message) elif isinstance(message, dict) and "image" in message: st.image(message["image"])


আমরা সবকিছু গুছিয়ে নিয়েছি। স্ট্রিমলিট অ্যাপটি চালাই

 streamlit run app.py


এবং কয়েকটি বিশ্লেষণ প্রশ্ন জিজ্ঞাসা করে এটি পরীক্ষা করুন।


উপসংহার

ল্যাংচেইন এবং ওপেনএআই ব্যবহার করে, আমরা জটিল ডেটা বিশ্লেষণের কাজগুলিকে স্বয়ংক্রিয় করতে পারি, যার ফলে বড় ডেটাসেটগুলি থেকে অন্তর্দৃষ্টি পাওয়া আরও সহজ হয়। এই পদ্ধতিটি কেবল সময় বাঁচায় না তবে সঠিক এবং সামঞ্জস্যপূর্ণ বিশ্লেষণও নিশ্চিত করে। আপনি গ্রাহকের প্রোফাইল, যোগাযোগের তথ্য বা চাকরির পরিসংখ্যান নিয়ে কাজ করছেন না কেন, একটি AI-চালিত ডেটা বিশ্লেষণ সহকারী আপনার ডেটা প্রক্রিয়াকরণ ক্ষমতাকে ব্যাপকভাবে উন্নত করতে পারে। সম্পূর্ণ উৎস কোডের জন্য, দেখুন GitHub সংগ্রহস্থল .