LangChain Ollama实战文献检索助手(一)环境配置和输入输出解析

挑选合适的模型

调用API需要花钱,因此在搭建阶段最佳的方法是利用Ollama部署本地CPU推理的轻量化大模型。大模型选择可以参照hugging face的榜单open-llm-leaderboard。
这里对我来说,要选择的模型需要满足
1.ollama上有的模型。
2.推理速度快(3b左右大小)。
3.对中文支持好(最好是国产大模型,后面部署调用API也便宜、方便)。
综上,选择qwen2.5:3b。
安装好Ollama后,cmd运行该指令便可安装。

ollama run qwen2.5:3b

定义提示模版

提示模板的基本原则是:
1.给予模型清晰明确的指示
2.让模型慢慢地思考
我希望提示词能重点关注文献的领域和年份,因此撰写模板如下:

from langchain.prompts import PromptTemplate
# 创建原始模板
template = """您是一位专业的学者。\n
对于 {theme} 研究领域的{year}以来的进展 ,您能提供富有洞见的综述吗?
"""
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)

用Ollama部署本地模型

参考官方文档配置
封装得很好了。代码如下:

from langchain_ollama.llms import OllamaLLM
model = OllamaLLM(model='qwen2.5:3b')

到这里,就可以进行一个小测试了,可以查看运行结果。

# 测试本地大模型
from langchain.prompts import PromptTemplate
from langchain_ollama.llms import OllamaLLM# 创建原始模板
template = """您是一位专业的学者。\n
对于 {theme} 研究领域的{year}以来的进展 ,您能提供富有洞见的综述吗?
"""
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)model = OllamaLLM(model='qwen2.5:3b')chain = prompt | model# 文献检索列表
Theme = ["张量分解","大模型压缩","大模型推理加速"]
Year = ["2020","2021","2021"]for theme, year in zip(Theme, Year):# 使用提示模板生成输入input_prompt = prompt.format(theme=theme, year=year)# 得到模型的输出output = chain.invoke(input_prompt)# 打印输出内容print(output)

输出解析

输出解析可以实现对输出的结果进行有针对性的总结,选取出用户感兴趣的话题。
具体的实现方法是,在输入的提示里加入我感兴趣的话题,并加以定义。

# 定义我们想要接收的响应模式
response_schemas = [ResponseSchema(name="content", description="对于这个领域的{year}以来的现有科研进展和有潜力方向的综述"),ResponseSchema(name="salary", description="分析这个领域2029年毕业博士的月薪水平,以人民币计价")
]
# 创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)

然后加到提示词模版中

format_instructions = output_parser.get_format_instructions()
# 根据原始模板创建提示,同时在提示中加入输出解析器的说明
prompt = PromptTemplate.from_template(prompt_template,partial_variables={"format_instructions": format_instructions})

加完后的模版示例如下:

在这里插入图片描述
最后,模型的回答如下
在这里插入图片描述
从中取出我想要的关键词即可

    output = chain.invoke(input_prompt)# 解析模型的输出(这是一个字典结构)parsed_output = output_parser.parse(output)# 在解析后的输出中添加“theme”和“price”parsed_output['theme'] = themeparsed_output['year'] = year# 将解析后的输出添加到DataFrame中df.loc[len(df)] = parsed_output

整个代码如下:

# 测试本地大模型
from langchain.prompts import PromptTemplate
from langchain_ollama.llms import OllamaLLM
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
import pandas as pd## 创建原始模板
prompt_template = """您是一位专业的学者。
对于 {theme} 研究领域的{year}以来的进展 ,您能提供富有洞见的综述吗?
{format_instructions}"""
# 根据原始模板创建LangChain提示模板
# prompt = PromptTemplate.from_template(template)## 模型
model = OllamaLLM(model='qwen2.5:3b')## 输出格式解析
# 定义我们想要接收的响应模式
response_schemas = [ResponseSchema(name="content", description="对于这个领域的{year}以来的现有科研进展和有潜力方向的综述"),ResponseSchema(name="salary", description="分析这个领域2029年毕业博士的月薪水平,以人民币计价")
]
# 创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
# 获取格式指示
format_instructions = output_parser.get_format_instructions()
# 根据原始模板创建提示,同时在提示中加入输出解析器的说明
prompt = PromptTemplate.from_template(prompt_template,partial_variables={"format_instructions": format_instructions})chain = prompt | model# 文献检索列表
Theme = ["张量分解","大模型压缩","大模型推理加速"]
Year = ["2020","2021","2021"]# 创建一个空的DataFrame用于存储结果
# df = pd.DataFrame(columns=["theme", "year", "content", "application_value", "scientific_value"]) # 先声明列名
df = pd.DataFrame(columns=["theme", "year", "content","salary"]) # 先声for theme, year in zip(Theme, Year):# 使用提示模板生成输入input_prompt = {"theme": theme, "year": year}# 得到模型的输出output = chain.invoke(input_prompt)# 解析模型的输出(这是一个字典结构)parsed_output = output_parser.parse(output)# 在解析后的输出中添加“theme”和“price”parsed_output['theme'] = themeparsed_output['year'] = year# 将解析后的输出添加到DataFrame中df.loc[len(df)] = parsed_output# 打印字典
print(df.to_dict(orient='records'))# 保存DataFrame到CSV文件
df.to_csv("paper_review.csv", index=False)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4626.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

在docker中搭建redis哨兵环境

文章目录 一、引言二、环境准备前提条件目录结构 三、配置文件1. 主节点配置文件 sentinel-master.conf2. 从节点配置文件3. 哨兵配置文件 sentinel.conf4. Docker Compose 文件 四、启动 Docker Compose五、验证哨兵机制1. 检查主节点状态2. 检查从节点状态3. 检查哨兵状态4. …

上线不出网机器

不出网机器介绍 上线不出网机器是我们常见的问题,如何在内网中实现不出网机器的上线呢,我们分为了如下的形式,根据之前所学的内容我们开始进行实验,常见的网络拓扑如下 情况分类 上线不出网机器一般是指B区域的电脑上线到CS工具或…

Modbus解析流程全面升级:体验全新核心与终极优化!

01 前言 本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。 02 全面改进的解析流程 前面发布过的Modbus解析流程在经过多个设备测试后发现存…

Python邮差:如何用代码精确投递商品快递费用的密信

目录 一、准备工作 二、编写API请求脚本 三、解析与处理快递费用数据 四、案例应用:模拟电商平台的快递费用计算 五、自动化邮件通知 六、总结 在电子商务的广阔天地里,精确计算并快速传递商品快递费用是一项至关重要的任务。作为Python邮差&#…

修改sql server 数据库的排序规则Chinese_PRC_CI_AS(字符集+排序)

文章目录 引言I 解决方案案例II 知识扩展排序规则SQL SERVER支持的所有排序规则引言 新增sql server 数据库实例的默认排序规则不支持中文存储,导致乱码 解决方案: 修改排序规则为Chinese_PRC_CI_AS 或者 Chinese_PRC_Stroke_CI_AS_WS或者Chinese_PRC_CI_AI_KS_WS 仅对新增…

七十页PPT展示智驾时代来临,国产汽车零部件厂商准备几何?

u 智能汽车车身架构主要可分为感知、决策控制、执行及通信四大板块,目前国产汽车零部件供应商在感知系统已取得较强的话语权,在决策控制系统、执行系统领域亦取得一定竞争力。 u 感知系统主要硬件包括激光雷达、毫米波雷达、摄像头等;其中&a…

Springboot 整合 Java DL4J 打造自然语言处理之智能写作助手

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

moffee

https://github.com/BMPixel/moffee Moffee:一键将Markdown转换为专业PPT,支持多主题与实时预览 文章目录 1-安装1.1-环境1.2-编码 2-使用2.1-语法 moffee 演示让 Markdown 准备好演示为什么选择 moffee?展示用 Markdown 设置样式媒体布局 1-…

玩转「HF/魔搭/魔乐」平台

模型下载 Hugging Face 下载到 GitHub CodeSpace CodeSpace创建环境: # 安装transformers pip install transformers4.38 pip install sentencepiece0.1.99 pip install einops0.8.0 pip install protobuf5.27.2 pip install accelerate0.33.0下载internlm2_5-7b…

运维高可用架构设计

一、硬件 1、服务器 2、网络架构 二、软件 1、基础组件 组件名称 高可用方式 最少节点数 负载均衡(Tenginx) corsyncpacemaker互为主备 多组集群通过DNS轮循实现一个大集群 2DNS主从集群2RabbitMQ原生HA镜像集群3Zookeeper原生分布式集群3Kafka原生分布式集群3ES原生分布式集…

DICOM标准:MR图像模块属性详解——磁共振成像(MR)在DICOM中的应用

目录 引言 磁共振成像(MR) 一、MR图像模块 二、MR图像属性描述 1、图像类型 (Image Type) 2、抽样每个象素 (Sampling per Pixel) 3、光度插值 (Photometric Interpretation) 4、位分配 (Bits Allocated) 结论 引言 数字成像和通信在医学&#xff08…

SpringBoot在线教育系统:多语言支持

5系统详细实现 5.1 普通管理员管理 管理员可以对普通管理员账号信息进行添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 普通管理员管理界面 5.2 课程管理员管理 管理员可以对课程管理员进行添加修改删除操作。具体界面如图5.2所示。 图5.2 课程管理员管理界面 5.3 …

Cursor和GitHub Copilot之间的竞争

大家好,今天我们要聊聊一个在开发者圈子里引起热议的话题:GitHub Copilot和Cursor之间的竞争,以及Copilot最近宣布的新功能,这可能会改变我们对编程辅助工具的看法。 GitHub Copilot将支持来自Anthropic、Google和OpenAI的模型&am…

Python酷库之旅-第三方库Pandas(181)

目录 一、用法精讲 836、pandas.api.types.is_file_like函数 836-1、语法 836-2、参数 836-3、功能 836-4、返回值 836-5、说明 836-6、用法 836-6-1、数据准备 836-6-2、代码示例 836-6-3、结果输出 837、pandas.api.types.is_list_like函数 837-1、语法 837-2、…

软件测试必会:cookie、session和token的区别~

今天就来说说session、cookie、token这三者之间的关系!最近这仨玩意搞得头有点大🤣 01、为什么会有它们三个 我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意…

Vue3+vite 加载优化

公司项目,技术栈:vue3viteelementPLusecharts。首屏加载有点慢,针对这个做了一些优化措施,记录一下。之前写过关于vue2版本的优化,有兴趣的可以了解下 定位问题 f12打开控制台,然后Network看下那些包占比大…

Nvidia突袭AI江湖!悄悄发布新模型,完爆OpenAI和Anthropic?

你以为Nvidia只会造芯片?太天真了!这家GPU巨头刚刚在AI语言模型领域上演了一出惊天逆袭,让OpenAI和Anthropic都措手不及。 没有轰轰烈烈的发布会,没有铺天盖地的宣传,Nvidia就这么静悄悄地在Hugging Face平台上扔出了一…

【Unity Shader】Special Effects(十)Change 变换(UI)

源码:[点我获取源码] 索引 Change 变换思路分析变换进度噪声纹理闪烁闪烁时机闪烁颜色闪烁动画Change 变换 变换的效果为图像间的切换带来动感过程,使用动画播放器: 思路分析 首先,从原始图像变换到目标图像是一个从0到1的过程,这个过程我们命名为变换进度(0为完全显…

jQuery选择器

目录 一、基本选择器 1. 标签选择器(元素选择器) 2. ID 选择器 3. 类选择器 4. 通配符选择器 二、层次选择器 1. 后代选择器 2. 子选择器 3. 相邻兄弟选择器 4. 一般兄弟选择器 三、属性选择器 1. 简单属性选择器 2. 属性值等于选择器 3.属…

kafka如何获取 topic 主题的列表?

大家好,我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表?】面试题?希望对大家有帮助; kafka如何获取 topic 主题的列表? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中,可以…