2024年9月7日 星期六

Groq Python API 文字聊天測試 (二)

在前一篇測試中使用 groq.Groq 類別建立一個 Groq 物件來呼叫聊天 API, 本篇則是要另一個類別 groq.Cliet 來建立 Groq 物件, 方式不同但功能是完全一樣的. 安裝 groq 套件與檢視物件內容等參考本系列前一篇文章 :


為了隱藏 API 金鑰, 先將其存在隱藏檔 .env 內的 GROQ_API_KEY 變數 : 



 
然後用 os 與 dotenv 模組將其讀出來 :

import os   
from dotenv import load_dotenv   
load_dotenv()   
groq_api_key=os.environ.get('GROQ_API_KEY')

套件 dotenv 用法參考 :


例如 : 

>>> import os   
>>> from dotenv import load_dotenv   
>>> load_dotenv()   
True
>>> groq_api_key=os.environ.get('GROQ_API_KEY')    

然後從 groq 匯入 Client 類別, 呼叫其建構式 Client() 並傳入 api_key 參數 : 

>>> from groq import Client  
>>> client=Client(api_key=groq_api_key)   

使用 llama3-70b-8192 模型向其詢問 "愛情是甚麼" : 

>>> chat_completion=client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "請問愛情是甚麼? 請用繁體中文(zh_Hant)回答",
        }
    ],
    model="llama3-70b-8192",   
 
>>> chat_completion.choices[0].message.content   
'愛情是人類最基本、最普遍、也是最複雜的情感體驗之一。它是人際之間的一種深入、熱烈、且持久的情感連結,往往是指人們之間的情感依附、承諾、信任和支持。\n\n愛情可以具體地表現為 романтик愛情、親情、友情、親切之情、同情、感恩之情等多種形式。它可以是對某人的情感依戀,也可以是對某種事物或理想的熱情和榮耀。\n\n愛情的核心特徵是強烈的情感需求和承諾。當人們在情感中時,他們往往會感到幸福、安全、信任和滿足。愛情也可以激發人的創造力、慷慨和奉獻,讓人們竭盡所能地為對方做出貢獻。\n\n然而,愛情也可能帶來傷痛、失望和分離。當愛情不被回報或失去時,人們可能會感到悲伤、痛苦和空虛。\n\n總之,愛情是人類生命中最重要、最珍貴的感情之一。它讓人們獲得溫暖、支持和幸福,也讓人們感到生命的意義和價值。'

這次不知為何會出現一個似乎是俄文的單字 "романтик", 哈哈. 查詢谷歌翻譯原來 "романтик" 是蒙古文 "浪漫的" 意思.

可以將前篇中的 ask_llm 模組改用 Clieent 類別 :

# ask_llm.py
from groq import Client   

def ask_groq(prompt, api_key, model='llama3-70b-8192'):
    client=Client(api_key=api_key)
    chat_completion=client.chat.completions.create(
        messages=[
            {"role": "user",
             "content": prompt,
             }],
        model=model,   
        )
    return chat_completion.choices[0].message.content

事實上就只是把 Groq 換成 Client 而已.

先讀取 API Key : 

>>> import os    
from dotenv import load_dotenv   
load_dotenv()   
groq_api_key=os.environ.get('GROQ_API_KEY')
True

從 ask_llm 模組匯入 ask_grok() 函式, 呼叫時傳入提示詞與 API Key : 

>>> from ask_llm import ask_groq   
>>> question='請問愛情是甚麼? 請用繁體中文(zh_Hant)回答'    
>>> answer=ask_groq(question, groq_api_key)     
>>> answer   
'愛情這個複雜難以捉摸的感覺!以下是我的嘗試回答:\n\n愛情是一種強烈的情感體驗,源於對他人或事物的深入了解、感激和熱戀。它是一種複雜多面的情感體驗,包含著情感、思想、行為和生理反應等多個方面。\n\n愛情可以是Romantic的,例如戀愛、親密關係中的愛情,但同時也可以是Platonic的,例如友情、家人之間的愛情。它還可以是自我愛,例如自尊自愛、自我接納和自我肯定。\n\n愛情的特點包括:\n\n1. 情感強烈:愛情是一種強烈的情感體驗,能夠激發我們的情感 Response。\n2. 深入了解:愛情需要我們對他人或事物有深入的了解和認識。\n3. 感激和熱戀:我們對被愛的人或事物感到感激和熱戀,願意為他們付出和犧牲。\n4. 互動和連結:愛情需要我們與他人或事物之間的互動和連結,建立起紧密的關係。\n5. 多種形式:愛情可以出現於各種形式,包括戀愛、友情、家人之間的愛情、自我愛等。\n\n愛情對我們的人生有著很大的影響。它可以帶來我們生命中的愉悦和滿足,讓我們感到被 Needed 和被愛。但同時,愛情也可以帶來痛苦和失落,讓我們感到脆弱和受傷。\n\n總之,愛情是一種複雜難以捉摸的感覺,它可以是美好的,也可以是痛苦的。但無論如何,它都是我們生命中的一部分,使我們的人生更加豐富多彩。'

這回從蒙古文 "романтик" 變成英文 "Romantic" 了. 

參考 :



2024-09-17 補充 :

今天將 Groq 的文字與圖片聊天程式碼寫成一個 ask_llm.py 模組方便呼叫 : 

# ask_llm.py 
# Please install the following packages in advance:
# !pip install groq

import base64
from groq import Client

def ask_groq_text(prompt, api_key, model='llama3-70b-8192'):
    client=Client(api_key=api_key)
    chat_completion=client.chat.completions.create(
        messages=[
            {"role": "user",
             "content": prompt,
             }],
        model=model,   
        )
    return chat_completion.choices[0].message.content

def ask_groq_vision_file(prompt, file, api_key):
    client=Client(api_key=api_key)
    with open(file, 'rb') as image_file:  
        base64_image=base64.b64encode(image_file.read()).decode('utf-8')
    image_url=f'data:image/jpeg;base64,{base64_image}' 
    content=[{'type': 'text', 'text': prompt}, 
             {'type': 'image_url', 'image_url': {'url': image_url}}]
    chat_completion=client.chat.completions.create(
         messages=[{'role': 'user', 'content': content}],
         model='llava-v1.5-7b-4096-preview'
         )
    return chat_completion.choices[0].message.content

def ask_groq_vision_url(prompt, url, api_key):
    client=Client(api_key=api_key)
    content=[{'type': 'text', 'text': prompt},  
             {'type': 'image_url', 'image_url': {'url': url}}] 
    chat_completion=client.chat.completions.create(
         messages=[{'role': 'user', 'content': content}],
         model='llava-v1.5-7b-4096-preview'
         )
    return chat_completion.choices[0].message.content

使用時先從 ask_llm 模組匯入所有函式 :

>>> from ask_llm import *    

首先從隱藏檔 .env 讀取 GROQ_API_KEY 變數 :

>>> import os      
>>> from dotenv import load_dotenv   
>>> load_dotenv()   
True
>>> groq_api_key=os.environ.get('GROQ_API_KEY')   

設定提示詞後呼叫 ask_groq_text(prompt, api_key) 進行文字聊天 :

>>> prompt='甚麼是量子糾纏? 請以小學生能了解的程度簡述且用繁體中文 (zh_Hant) 回答'    
>>> print(ask_groq(prompt, groq_api_key))   
😊

量子糾纏(Quantum Entanglement)是一個非常奇怪、有趣的現象,它發生在量子世界中。

在我們日常生活中,兩個物體之間的距離越遠,牽扯的關聯就越少。例如,你和你的朋友站在兩端的街口,你做出一個動作,朋友不會馬上知道。

但是,在量子世界中,事情就不同了。當兩個粒子( tiny particles)處於量子糾纏的狀態時,無論牽扯的距離有多遠,它們之間的關聯都會保持著。

舉個簡單的例子:

想像你和你的朋友各拿了一個小球,球的顏色可能是紅色或藍色。你們站在兩端的街口,隨機翻開球,看到自己的球的顏色就是什麼顏色。

但是,如果這兩個球處於量子糾纏的狀態,你翻開球,看到自己的球是紅色的,瞬間,你朋友那端的球也一定是紅色的,無論距離有多遠 !

這是因為量子糾纏使得這兩個粒子之間的關聯非常緊密,遠遠超過我們日常生活中理解的範圍。

量子糾纏這種現象讓科學家們感到非常驚奇和困惑,但它也開啟了我們對於量子世界的理解和認識的一扇門。

Hope you understand! 😊

沒有留言 :