【LLM】智能学生顾问构建技术学习(Lyrz SDK + OpenAI API )

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 【5月更文挑战第13天】智能学生顾问构建技术学习(Lyrz SDK + OpenAI API )

[toc]


如果您是一名学生,你正在寻求个性化顾问来帮助你的课程作业,那么AI学生顾问正好可以帮助你,这是一种创新的解决方案,利用 AI 的力量彻底改变学生咨询。

Lyzr Student Advisor 应用程序的核心是为了让学生在学术之旅中发挥作用,通过利用 Lyzr 聊天机器人的功能,该应用程序提供量身定制的见解和建议,以帮助学生在课程作业中脱颖而出、发展职业轨迹并促进个人成长。使用 Lyzr SDK,制作您自己的 GenAI 应用程序变得轻而易举,只需几行代码即可快速启动和运行。

查看Lyzr SDK: https://docs.lyzr.ai/homepage

创建文件 app.py ,导入依赖库:

import os
import shutil
import streamlit as st
from lyzr import ChatBot

该代码首先导入用于文件处理的基本模块,例如 os 和 shutil,以及用于创建 Web 应用程序(如 streamlit)。此外,从 lyzr 模块导入 ChatBot 类,这表明聊天机器人功能的潜在集成可能利用自然语言处理功能。

使用 Streamlit 的密钥管理工具初始化 OpenAI API 密钥,通过访问安全存储在 Streamlit 密钥中的特定密钥(其中安全存储了 OpenAI API 密钥),它取代了占位符“OPENAI_API_KEY”,确保了对 Streamlit 应用程序中 OpenAI API 的安全访问。

# Set the OpenAI API key
os.environ["OPENAI_API_KEY"] = st.secrets["apikey"]
# Function to remove existing files
def remove_existing_files(directory):
    for filename in os.listdir(directory):
        file_path = os.path.join(directory, filename)
        try:
            if os.path.isfile(file_path) or os.path.islink(file_path):
                os.unlink(file_path)
            elif os.path.isdir(file_path):
                shutil.rmtree(file_path)
        except Exception as e:
            st.error(f"Error while removing existing files: {e}")

函数 remove_existing_files(directory) 用于擦除指定目录中的所有文件和目录。它使用 os.listdir(directory) 遍历指定目录中的每个项目。对于遇到的每个项目,它通过将目录路径与项目的文件名组合在一起来形成完整的文件路径。随后,它尝试使用 os.unlink() 来消除文件或 shutil.rmtree() 来消除目录的项目。如果在此删除过程中出现任何错误,它会处理它们并使用 Streamlit 的 st.error() 函数显示错误通知。

# Set the local directory
data_directory = "data"

# Create the data directory if it doesn't exist
os.makedirs(data_directory, exist_ok=True)

# Remove existing files in the data directory
remove_existing_files(data_directory)

这些代码行处理文件系统中名为“data”的本地目录。首先,将变量 data_directory 设置为字符串 “data”,指示要管理的目录的名称。然后,代码使用 os.makedirs(data_directory, exist_ok=True) 创建“data”目录。

exist_ok=True 参数可确保仅当目录尚不存在时才创建该目录。在此之后,调用函数 remove_existing_files(data_directory) 以清除“data”目录中任何预先存在的文件或子目录,确保它是空的并准备好使用。

# Function to implement RAG Lyzr Chatbot
def rag_implementation(file_path):
    # Check the file extension
    _, file_extension = os.path.splitext(file_path)

    if file_extension.lower() == ".pdf":
        # Initialize the PDF Lyzr ChatBot
        rag = ChatBot.pdf_chat(
            input_files=[file_path],
            llm_params={"model": "gpt-4"},
        )
    elif file_extension.lower() == ".docx":
        # Initialize the DOCX Lyzr ChatBot
        rag = ChatBot.docx_chat(
            input_files=[file_path],
            llm_params={"model": "gpt-4"},
        )
    else:
        # Handle unsupported file types
        raise ValueError("Unsupported file type. Only PDF and DOCX files are supported.")

    return rag

rag_implementation,此函数用于根据提供的文件类型实现 RAG Lyzr 聊天机器人。它首先从给定file_path中提取文件扩展名。如果文件是 PDF,则使用 ChatBot 类中的 pdf_chat 方法初始化专为 PDF 文件设计的 Lyzr ChatBot。同样,如果文件是 DOCX 文档,则使用 docx_chat 方法初始化 DOCX 文件的 ChatBot。

这两个初始化过程都包括指定输入文件和设置语言模型参数,此处定义为 {“model”: “gpt-4”}。如果文件扩展名与“.pdf”或“.docx”不匹配,则该函数将引发 ValueError,指示仅支持 PDF 和 DOCX 文件。

# Function to get Lyzr response
def advisor_response(file_path, ambition):
    rag = rag_implementation(file_path)
    prompt = f"""Your name is Isha, always remember that, and you are a student advisor at a university. Always introduce yourself.

                 To generate advice for the uploaded document, please follow the instructions below:

                      - Course work and grades: Being a Student Advisor, look into the uploaded marksheet and give important insights about where the student performance lies.

                      - Ambition: Informed by the student's ambition (replace {ambition}), advise them on the steps required to excel in their chosen path.

                      - Academic advice: Being a Student Advisor, look into the uploaded document and give important insights about where the student's strength and weaknesses lie and how to improve them.

                      - Career guidance: Being a student Advisor utilize the student's ambition, coursework, and grades, offer pertinent suggestions for their career trajectory.

                      - Personal development: Being a student Advisor offer guidance on fostering high productivity through effective time management techniques and engaging in relevant extracurricular activities.

                      - Please ensure adherence to these steps and provide responses akin to a student advisor. """

    response = rag.chat(prompt)
    return response.response

此advisor_response函数利用 rag_implementation 函数初始化 Lyzr ChatBot。然后,它会生成一个提示,其中包含有关建议各个方面的说明和占位符,例如课程作业、抱负、学术建议、职业指导和个人发展。占位符 {ambition} 用于将学生的抱负动态地合并到提示中。

该函数会向 Lyzr ChatBot 提示此消息,指示它根据上传的文档和提供的提示提供建议。ChatBot 处理提示并生成响应,然后由函数返回。该回复预计将包含针对学生的学术旅程和抱负量身定制的建议和见解。

# File upload widget
uploaded_file = st.file_uploader("Upload your Marksheet⬇️", type=["pdf", "docx"])

if uploaded_file is not None:
    # Save the uploaded file to the data directory
    file_path = os.path.join(data_directory, uploaded_file.name)
    with open(file_path, "wb") as file:
        file.write(uploaded_file.getvalue())

    # Display the path of the stored file
    st.success("File successfully saved")

    # User input for student's ambition
    ambition = st.text_input("What is your Ambition?")

    # Generate advice button
    if st.button("Get Advice"):
        if not ambition:
            st.warning("Please enter your ambition.")
        else:
            automatic_response = advisor_response(file_path, ambition)
            st.markdown(automatic_response)

本部分代码使用 Streamlit 的 file_uploader 函数创建文件上传小部件。系统会提示用户上传其标记表文件,支持的文件类型仅限于 PDF 和 DOCX 格式。

文件上传后,代码将上传的文件保存到指定的data_directory,确保将其存储在本地以供进一步处理。将显示一条成功消息,以确认文件已成功保存。

接下来,系统会提示用户通过文本输入字段输入他们的想法。这些信息对于生成针对用户职业抱负量身定制的个性化建议至关重要。

最后,标有“获取建议”的按钮允许用户触发建议生成过程。在继续操作之前,代码会检查目标字段是否为空,并在必要时提示用户输入其目标。如果提供了 ambition,则调用 advisor_response 函数,并将path和 ambition 作为参数。然后使用 Streamlit 的 Markdown 函数向用户显示生成的建议。

以上就是基于Lyzr SDK实现的学生顾问的核心内容,希望对同学们有所帮助。

目录
相关文章
|
1月前
|
缓存 监控 API
淘宝 API 接口使用的技术要点与注意事项
在数字化商业环境中,淘宝API为开发者提供了强大的工具,用于与淘宝平台交互,获取商品信息及处理交易等。本文总结了正确使用API的关键技术要点:注册认证、理解接口文档、遵守调用限制、确保参数准确性、保护数据安全、处理异常、性能优化、版本兼容、合规性及日志监控,帮助开发者实现高效、安全的程序开发。
|
16天前
|
监控 安全 测试技术
深入理解后端技术中的API设计原则
在当今数字化时代,后端技术已成为构建高效、可扩展和安全应用程序的关键因素。本文将探讨后端开发中的API设计原则,包括RESTful架构、版本控制以及安全性等方面,旨在帮助开发者提升API设计的质量和用户体验。通过对这些原则的深入理解,可以更好地满足业务需求并提高系统的可靠性。
|
12天前
|
人工智能 缓存 搜索推荐
OPENAI DevDay 2024:推动AI技术的新边界
在今年的OPENAI DevDay活动中,尽管形式更为低调,但OpenAI依然带来了四项令人瞩目的技术创新,展示了其在推动人工智能开发者生态方面的持续努力,以及向更高效、用户友好的AI工具转型的决心。我将为大家详细介绍这些新产品
74 10
|
20天前
|
缓存 测试技术 API
电商平台 API 接入技术要点深度剖析
本文介绍了高效使用电商平台API的关键步骤。首先,深入理解API文档,明确功能权限与参数格式要求;其次,选择合适的接入方式,如HTTP/HTTPS协议和RESTful API;接着,实施身份验证与授权机制,确保数据安全传输;此外,还需关注性能优化、安全防护、监控与日志记录,以提升系统稳定性和响应速度;最后,进行充分测试与调试,并关注API版本更新,确保长期兼容性。
|
4天前
|
安全 NoSQL 测试技术
商品详情API接口的技术实现
本文介绍了电商平台上商品详情API接口的设计与实现过程,涵盖需求分析、接口定义、数据模型设计及技术选型等方面。通过合理的后端框架、数据库设计和安全措施,确保接口高效、稳定和安全。最后,通过详尽的测试与部署步骤,实现优质购物体验。旨在为技术人员提供实用参考。
|
1月前
|
设计模式 测试技术 API
Micronaut魔法书:揭秘构建超光速RESTful API的绝密技术!
【9月更文挑战第10天】在现代Web开发中,构建RESTful API至关重要。Micronaut作为一款轻量级框架,能够快速创建高效API。本文探讨使用Micronaut构建RESTful API的最佳设计模式与实践,涵盖注解(如`@Controller`、`@Get`)、代码组织、REST原则、数据验证及测试等方面,帮助开发者构建结构清晰、可维护性强的API服务。示例代码展示了如何使用Micronaut实现用户管理API,强调了良好设计模式的重要性。
49 3
|
19天前
|
自然语言处理 搜索推荐 数据挖掘
电商 API 接口:电商领域的强大技术引擎
在数字化浪潮中,电商API接口作为连接系统的桥梁,已成为电商市场的核心技术引擎。它通过实时库存信息、多样化支付等功能提升用户体验,支持自动化订单处理,促进数据流通与分析,并允许定制化开发,集成移动应用,从而增强系统灵活性和业务竞争力。
|
2月前
|
数据采集 自然语言处理 测试技术
CMU&清华新作:让LLM自己合成数据来学习,特定任务性能同样大幅提升
【8月更文挑战第24天】近期研究提出SELF-GUIDE,一种创新方法,旨在通过大型语言模型(LLMs)自动生成特定任务数据并用于自我微调,以克服其在特定任务上的性能局限。SELF-GUIDE分为三个阶段:数据合成、模型微调及性能评估。通过向目标LLM提供适当提示生成高质量合成数据,并用于微调以提升特定任务表现。实验证明,该方法在Natural Instructions V2等多个基准测试中显著提升了分类与生成任务性能。SELF-GUIDE不仅有效提高性能,还具备高数据效率,减少对外部数据依赖。然而,生成数据质量受限于LLM能力,且并非适用于所有任务。
43 4
|
2月前
|
弹性计算 API 开发工具
揭秘Python与阿里云API的神秘邂逅!流式处理的魔法之旅,一场颠覆想象的技术盛宴!
【8月更文挑战第15天】在数字世界的广阔舞台上,Python与阿里云API的相遇,就像是一场命中注定的邂逅。它们携手共舞,为我们带来了流式处理的魔法之旅。本文将揭开这场神秘邂逅的面纱,带你领略Python与阿里云API之间的奇妙互动。让我们一起踏上这场颠覆想象的技术盛宴,探索流式处理的无限可能!
77 7
|
2月前
|
Java API 网络安全
探索Java中的Stream API:从基础到高级应用云计算与网络安全:技术融合与挑战
【8月更文挑战第27天】在Java的海洋中,Stream API犹如一艘强大的船,让开发者能以声明式的方式处理集合数据。本文将启航,先带你了解Stream的基本概念和用法,再深入探讨其高级特性,如并行流、管道操作以及性能考量。我们将通过具体代码示例,展示如何高效利用Stream API简化数据处理流程,提升代码的可读性和性能。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往更优雅编程风格的大门。