nahj_rag/ask_llm.py
2026-02-17 16:52:37 +00:00

69 lines
4.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from openai import OpenAI
import datetime
from langchain_openai import ChatOpenAI # pip install -U langchain_openai
messages = [
{"role": "system", "content": "تو یک دستیار خبره در زمینه حقوق و قوانین مرتبط به آن هستی و می توانی متون حقوقی را به صورت دقیق توضیح بدهی . پاسخ ها باید الزاما به زبان فارسی باشد. پاسخ ها فقط از متون قانونی که در پرامپت وجود دارد استخراج شود."},
]
def get_client():
url = "https://api.avalai.ir/v1"
# key = 'aa-4tvAEazUBovEN1i7i7tdl1PR93OaWXs6hMflR4oQbIIA4K7Z'
key = 'aa-fdh9d847ANcBxQCBTZD5hrrAdl0UrPEnJOScYmOncrkagYPf'
client = OpenAI(
api_key= key, # با کلید واقعی خود جایگزین کنید
base_url= url, # آدرس پایه
)
return client
def request(query):
if query == '':
return 'لطفا متن سوال را وارد نمائید'
client = get_client()
determine_refrence = """شناسه هر ماده قانون در ابتدای آن و با فرمت "id: {idvalue}" آمده است که id-value همان شناسه ماده است. بازای هربخش از پاسخی که تولید می شود، ضروری است شناسه ماده ای که در تدوین پاسخ از آن استفاده شده در انتهای پاراگراف یا جمله مربوطه با فرمت {idvalue} اضافه شود. همیشه idvalue با رشته "qs" شروع می شود"""
try:
messages.append({"role": "user", "content": query})
messages.append({"role": "user", "content": determine_refrence})
response = client.chat.completions.create(
messages = messages,
model="gemini-2.5-flash-lite") # "gpt-4o", "gpt-4o-mini", "deepseek-chat" , "gemini-2.0-flash", gemini-2.5-flash-lite
# gpt-4o : 500
# gpt-4o-mini : 34
# deepseek-chat: : 150
# gemini-2.0-flash : error
# cf.gemma-3-12b-it : 1
# gemini-2.5-flash-lite : 35 خیلی خوب
answer = response.choices[0].message.content
# پاسخ را هم به سابقه اضافه می‌کنیم
messages.append({"role": "assistant", "content": answer})
except Exception as error:
with open('./llm-answer/error-in-llm.txt', mode='a+', encoding='utf-8') as file:
error_message = f'\n\nquery: {query.strip()}\nerror:{error} \n-------------------------------\n'
file.write(error_message)
return 'با عرض پوزش؛ متاسفانه خطایی رخ داده است. لطفا لحظاتی دیگر دوباره تلاش نمائید'
return answer
if __name__ == '__main__':
query = """متن زیر را در 100 کلمه خلاصه کن:
تبصره- به منظور بهره وری کل عوامل تولید ، سازمان مکلف است با همکاری دستگاههای اجرایی ذی ربط نسبت به تهیه برنامه های لازم برای ارتقای بهره وری به تفکیک بخشهای مختلف از طریق واحدهای فناور، شرکتهای خصوصی و دانش بنیان متضمن زمان بندی عملیاتی سالانه، تأمین منابع و تمهید مقدمات، تقسیم و توزیع وظایف و اختیارات، تعیین مسوول تحقق برنامه ها در هر بخش، نظارت موثر و پاسخگویی و مسوولیت تحقق بهره وری کل عوامل تولید مطابق برنامه زمان بندی در همه بخشها با سهم سی و پنج درصد (35%) از هشت درصد (8%) رشد اقتصادی تا پایان سال اول برنامه اقدام قانونی به عمل آورد و به صورت سالانه نسبت به پایش و گزارشگری بهره وری کل عوامل تولید و تحقق برنامه ها اقدام نماید. موسسات و نهادهای عمومی غیردولتی نیز مشمول این حکم می باشند.
سازمان اداری و استخدامی کشور مکلف است گزارش پایش بهره وری کارکنان در بخش دولتی و تحقق آن را هر شش ماه یک بار به سازمان و مجلس ارائه کند. سازمان مکلف است سنجه های عملکردی رشد اقتصادی را سالانه به مجلس ارسال نماید.
"""
start = datetime.datetime.now()
result = request(query)
with open('./llm-answer/result.txt', mode='a+', encoding='utf-8') as file:
result_message = f'متن پرامپت: {query.strip()}\nپاسخ: {result} \n--------------------------------------------------------\n'
file.write(result_message)
# end = datetime.datetime.now()
# duration = (end - start).total_seconds()
# print(f'duration: {duration} seconds')