当前位置: 首页 > news >正文

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.mrgr.cn/news/66900.html

相关文章:

  • 鸿蒙应用App测试-通用测试
  • HTML CSS H5C3样式语句汇总20241105
  • InsCode线上IDE推荐及使用指南
  • 二次封装 el-pagination 组件存在的问题
  • 第十七课 component组件解析
  • OpenAI 发布了新的事实性基准——SimpleQA
  • 【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)
  • 滑动窗口算法
  • sql专题 之 常用命令
  • Java学习路线:Maven(一)认识Maven
  • 程序员开发速查表
  • Swift 开发教程系列 - 第8章:协议与扩展
  • 使用python实现关键字排名追踪——跟踪你的网站在过去12个月搜索引擎排名和关键字表现
  • 代码随想录训练营Day18 | 77. 组合 - 216.组合总和III - 17.电话号码的字母组合
  • 【Homework】【1--3】Learning resources for DQ Robotics in MATLAB
  • MyBatis 返回 Map 或 List<Map>时,时间类型数据,默认为LocalDateTime,响应给前端默认含有‘T‘字符
  • 图片怎么用二维码存储展展示?扫码预览图片的制作方法
  • 利用SCF文件构建网络渗透
  • 主流OLAP对比
  • 舜宇光学科技入职测评:北森商业推理40分钟28题真题解析、网盘资料下载、答题技巧
  • 思维导图:释放大脑潜能的图形工具
  • 【综合算法学习】(第二十篇)
  • 春季全国糖酒会为什么一直选择成都作为举办地......
  • 揭秘自闭症症状的最新研究成果和应对策略
  • 计算机网络——IP协议
  • 中电金信:企业数据赋能效果差,科学试错体系了解一下?