24Fall-NJUSE LLM4SE 实验文档
RAG实验(必做)
题目要求
基础要求
- 构建一个针对arXiv的知识问答系统
- 要求如下
- 给定一个入口,用户可以输入提问
- 不要求要求构建GUI界面
- 用户通过对话进行交互
- 系统寻找与问题相关的论文abstract
- 使用用户的请求对向量数据库进行请求
- 寻找与问题最为相关的abstract
- 系统根据问题和论文abstract回答用户问题,并给出解答问题的信息来源
- 示例
进阶要求
- 提示优化
- 用户给出的问题或陈述不一定能够匹配向量数据库的查询
- 使用大模型对用户的输入进行润色,提高找到对应文档的概率
- 思路提示(解决思路不唯一,提示仅作为可能的思路示例)
- 观察不同输入后向量数据库找到对应文档的概率
- 总结适用于查询的语句
- 构建提示(prompt)实现对用户输入的润色
- 查询迭代
- 单次的查询可能无法寻找到用户所期望的答案
- 需要通过多轮的搜索和尝试才能获得较为准确的答案
- 思路提示
- 如何将用户的需求拆解,变成可以拆解的逻辑步骤
- 如何判断已经获得准确的答案并停止迭代
- 如何再思路偏移后进行修正
资源简介
向量数据库可按需自行部署,大模型可选择自有api,下列内容为能完成任务的所需资源。
arxiv数据集可以从这里获取 https://www.kaggle.com/datasets/Cornell-University/arxiv
大模型(Qwen2.5-14B)
1 | # Qwen2.5-14B模型已接入LangChain Openai API,调用示例如下 |
openai包使用特定版本,避免与langchain不兼容 pip install openai==0.28
嵌入模型(sentence-transformers/all-MiniLM-L12-v2)
- 嵌入模型使用huggingface中的all-MiniLM-L12-v2模型
1 | from langchain.embeddings import HuggingFaceEmbeddings |
当前由于huggingface被墙,无梯子可以使用镜像,详见 https://hf-mirror.com/
向量数据库
arXiv数据存在Milvus中
1 | from langchain.vectorstores import Milvus |
由于向量数据库与SDK存在强绑定关系,安装milvus包时请检查版本: pip install pymilvus==2.2.6
数据项解释
- vector: 论文abstract的向量化表示
- access_id:论文的唯一id
- https://arxiv.org/abs/{access_id} 论文的详情页
- https://arxiv.org/pdf/{access_id} 论文的pdf地址
- authors:论文的作者
- title:论文的题目
- comments:论文的评论,一般为作者的补充信息
- journal_ref:论文的发布信息
- doi:电子发行doi
- text:论文的abstract (为了兼容langchain必须命名为text)
- categories:论文的分类
LangChain
- langchain官方文档 https://python.langchain.com/
- langchain官方课程 https://learn.deeplearning.ai/langchain
提交内容
- 代码实现
- 预置题目
- 预置由json文件构成,包含10个问题(question项目)
- 使用算法回答其中问题,答案存在answer项内
- 该文件存储为answer.json,单独提交
注意事项
Python版本要在3.8和3.11之间。(我使用了3.9.2rc1)因为要求ymilvus=2.2.6,这个库依赖1.49.1到1.53.0的grpcio,1.53.0的grpcio不支持python 3.12。
因为网络原因,运行时无法自动下载 sentence-transformers,需要手动下载:sentence-transformers 整个目录。对于根目录下
pytorch_model.bin
和model.safetensors
两个文件,需要手动下载。注:
sentence-transformers是一个基于Python的库,它专门用于句子、文本和图像的嵌入。这个库可以计算100多种语言的文本嵌入,并且这些嵌入可以轻松地用于语义文本相似性、语义搜索和同义词挖掘等任务。sentence-transformers基于PyTorch和Transformers库构建,提供了大量针对各种自然语言处理任务的预训练模型。此外,用户还可以根据自己的需求对模型进行微调。
a. 在项目根目录下git clone sentence-transformers目录
1
git clone https://hf-mirror.com/sentence-transformers/all-MiniLM-L12-v
b 再手动下载将网站中
pytorch_model.bin
和model.safetensors
,将两个文件放入all-MiniLM-L12-v文件夹中。安装正确版本的依赖:
用管理员模式进行安装:
1 | pip install openai==0.28 |
其他依赖直接安装最新版即可。(pip install + 需要的包 如langchain/langchain_openai)
如遇已安装pymilvus却无法import的报错,有可能是没有google模块
1
pip install --upgrade google-api-python-client
记得在校园网环境下运行,否则milvus会超时
终端运行结果示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27c:\Users\xiaoyu\Desktop\RAG-arVix\main.py:22: LangChainDeprecationWarning: The class `Milvus` was deprecated in LangChain 0.2.0 and will be removed in 1.0. An updated version of the class exists in the :class:`~langchain-milvus package and should be used instead. To use it run `pip install -U :class:`~langchain-milvus` and import as `from :class:`~langchain_milvus import MilvusVectorStore``.
db = Milvus(embedding_function=embedding, collection_name="arXiv_Back",
2024-12-27 22:32:33,121 - INFO - Answering question: 什么是大语言模型?
2024-12-27 22:32:41,158 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:32:44,626 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:32:44,631 - INFO - Answering question: 形式化软件工程是什么?
2024-12-27 22:32:52,830 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:32:56,517 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:32:56,519 - INFO - Answering question: 大语言模型的缩放定理是什么?
2024-12-27 22:33:04,939 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:11,058 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:11,060 - INFO - Answering question: 代码评审的目标是什么?
2024-12-27 22:33:15,563 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:18,328 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:18,330 - INFO - Answering question: 重复的数据会对In-content Learning产生什么影响?
2024-12-27 22:33:26,725 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:31,333 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:31,337 - INFO - Answering question: 软件工程领域如何适应不同领域?
2024-12-27 22:33:38,194 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:46,489 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:33:46,492 - INFO - Answering question: 区块链如何保证安全?
2024-12-27 22:33:55,499 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:34:01,950 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"
2024-12-27 22:34:01,953 - INFO - Answering question: 指令微调的目标是什么?
2024-12-27 22:34:09,939 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"2024-12-27 22:34:14,604 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"2024-12-27 22:34:14,607 - INFO - Answering question: 离子阱计算机的原理是什么?
2024-12-27 22:34:18,538 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"2024-12-27 22:34:21,816 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"2024-12-27 22:34:21,818 - INFO - Answering question: 人造原子是什么?
2024-12-27 22:34:29,293 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"2024-12-27 22:34:33,883 - INFO - HTTP Request: POST http://10.58.0.2:8000/v1/chat/completions "HTTP/1.1 200 OK"2024-12-27 22:34:33,887 - INFO - Answers successfully written to answers.json.
Agent实验
题目要求
实现一个只需要使用语言即可使用的选课系统,不包含任何GUI。被调用的函数可以使用copilot生成,不需要使用数据库,只需要能够模拟对应功能。
功能简介
查询:带有筛选的查询,可以筛选必修或选修。
选课:选择需要的课程,智能返回结果
成功返回选课结果
未成功返回错误
删除:删除选择的课程,智能返回结果
进阶要求
查询增强,根据描述返回用户最为感兴趣的课程
例如:用户喜欢体育,羽毛球等放在前面
选择增强:当用户在选课和删除时提供的课程不准确时,智能提供可能用户想提的课程
实验资源
1.python库:https://github.com/QwenLM/Qwen-Agent
2.调用模型的设置可以参考如下:
1 | 'model': 'Qwen2.5-14B', |
提交方法
将所有代码(不包含库文件)实现打包压缩上传。
运行结果
1 | Type "clear" to clear the content, and "exit" to close this session. |