开源模型应用落地-CodeQwen模型小试-集成langchain(四)

一、前言

    通过学习代码专家模型,开发人员可以获得高效、准确和个性化的代码支持。这不仅可以提高工作效率,还可以在不同的技术环境中简化软件开发工作流程。代码专家模型的引入将为开发人员带来更多的机会去关注创造性的编程任务,从而推动软件开发的创新和进步。

    通过使用langchain,用户可以直接提出问题或发送指令,而无需担心具体的步骤或流程。langchain会自动将任务分解为多个子任务,并将它们传递给适合的语言模型进行处理。


二、术语

2.1.CodeQwen1.5

    基于 Qwen 语言模型初始化,拥有 7B 参数的模型,其拥有 GQA 架构,经过了 ~3T tokens 代码相关的数据进行预训练,共计支持 92 种编程语言、且最长支持 64K 的上下文输入。效果方面,CodeQwen1.5 展现出了非凡的代码生成、长序列建模、代码修改、SQL 能力等,该模型可以大大提高开发人员的工作效率,并在不同的技术环境中简化软件开发工作流程。

CodeQwen 是基础的 Coder

    代码生成是大语言模型的关键能力之一,期待模型将自然语言指令转换为具有精确的、可执行的代码。仅拥有 70 亿参数的 CodeQwen1.5 在基础代码生成能力上已经超过了更尺寸的模型,进一步缩小了开源 CodeLLM 和 GPT-4 之间编码能力的差距。

CodeQwen 是长序列 Coder

    长序列能力对于代码模型来说至关重要,是理解仓库级别代码、成为 Code Agent 的核心能力。而当前的代码模型对于长度的支持仍然非常有限,阻碍了其实际应用的潜力。CodeQwen1.5 希望进一步推进开源代码模型在长序列建模上的进展,我们收集并构造了仓库级别的长序列代码数据进行预训练,通过精细的数据配比和组织方式,使其最终可以最长支持 64K 的输入长度。

CodeQwen 是优秀的代码修改者

    一个好的代码助手不仅可以根据指令生成代码,还能够针对已有代码或者新的需求进行修改或错误修复。

CodeQwen 是出色的 SQL 专家

    CodeQwen1.5 可以作为一个智能的 SQL 专家,弥合了非编程专业人士与高效数据交互之间的差距。它通过自然语言使无编程专业知识的用户能够查询数据库,从而缓解了与SQL相关的陡峭学习曲线。

2.2.CodeQwen1.5-7B-Chat

CodeQwen1.5 is the Code-Specific version of Qwen1.5. It is a transformer-based decoder-only language model pretrained on a large amount of data of codes.

  • Strong code generation capabilities and competitve performance across a series of benchmarks;
  • Supporting long context understanding and generation with the context length of 64K tokens;
  • Supporting 92 coding languages
  • Excellent performance in text-to-SQL, bug fix, etc.

2.3.LangChain

    是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。

    LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。

   LangChain的主要特性:
        1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等
        2.允许语言模型与其环境交互
        3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件
        4.可以使用链的方式组装这些组件,以便最好地完成特定用例。
        5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。


三、前置条件

3.1.基础环境

操作系统:centos7

Tesla V100-SXM2-32GB  CUDA Version: 12.2

3.2.下载模型

huggingface:

https://huggingface.co/Qwen/CodeQwen1.5-7B-Chat/tree/main

ModelScope:

git clone https://www.modelscope.cn/qwen/CodeQwen1.5-7B-Chat.git

PS:

1. 根据实际情况选择不同规格的模型

3.3.安装虚拟环境

conda create --name langchain python=3.10
conda activate langchain
# -c 参数用于指定要使用的通道
conda install pytorch pytorch-cuda=11.8 -c pytorch -c nvidia
pip install langchain accelerate numpy transformers==4.38.1

ps: 注意在虚拟环境中安装


四、使用方式

4.1.生成代码能力

# -*-  coding = utf-8 -*-
import warnings

from langchain import LLMChain
from langchain.llms import HuggingFacePipeline
from langchain.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate

warnings.filterwarnings("ignore")

model_path = "/model/CodeQwen1.5-7B-Chat"

local_llm = HuggingFacePipeline.from_model_id(
    model_id=model_path,
    task="text-generation",
    device=0,
    pipeline_kwargs={"max_new_tokens": 8192},
)

system_template = "You are a helpful assistant."
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)

human_template = """Question: {question}
Answer: Let's think step by step."""
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

prompt_template = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
prompt = prompt_template.format_prompt(question="用Python写一个冒泡排序算法的例子").to_messages()
print(prompt)

llm_chain = LLMChain(prompt=prompt_template, llm=local_llm)
print(llm_chain.run(question="用Python写一个冒泡排序算法的例子"))

调用结果:

在IDEA中运行模型生成的代码

结论:

模型能根据需求生成可运行代码

4.2.修改代码的能力

示例说明:

把冒泡排序正确的代码故意修改为错误,异常为:UnboundLocalError: local variable 'j' referenced before assignment

# -*-  coding = utf-8 -*-
import warnings

from langchain import LLMChain
from langchain.llms import HuggingFacePipeline
from langchain.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate

warnings.filterwarnings("ignore")

model_path = "/model/CodeQwen1.5-7B-Chat"

local_llm = HuggingFacePipeline.from_model_id(
    model_id=model_path,
    task="text-generation",
    device=0,
    pipeline_kwargs={"max_new_tokens": 8192},
)

system_template = "You are a helpful assistant."
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)

human_template = '我用Python写了一个冒泡排序的算法例子,但是运行结果不符合预期,请修改,具体代码如下: {code}'

human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

code = '''
def bubble_sort(numbers):
    n = len(numbers)
    for i in range(n-1):
        for j in range(0, n-j-1):
            if numbers[j] > numbers[j+1]:
                numbers[j], numbers[j+1] = numbers[j+1], numbers[j]
    return numbers

if __name__ == "__main__":
    unsorted_list = [64, 34, 25, 12, 22, 11, 90]
    sorted_list = bubble_sort(unsorted_list)
    print("Sorted List:", sorted_list)         
'''


prompt_template = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
llm_chain = LLMChain(prompt=prompt_template, llm=local_llm)
print(llm_chain.run(code=code))

调用结果:

结论:

模型能发现问题,并把异常修正

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webpack并行构建示例:

由于js的单线程特性,文件和任务时 要等待一个任务执行完成后执行下一个任务,但在实际开发中,很多任务是可以并行执行的(如同时处理多个不同js文件或同事压缩多张图片),一些loader和插件(thread-…

交通地理信息系统实习教程(二)

这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置:【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置:【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…

png格式怎么压缩的更小?用这几个方法轻松搞定

png格式支持透明背景,因此在网页设计中经常使用,经常用于创建图标、按钮、徽标和其他元素,使其能够与不同背景颜色和图像融合,实现更好的视觉效果,所以有时候我们就会遇到需要把png图片压缩小一点的情况,这…

【计算机网络】Socket网络编程

💻文章目录 📄前言Socket编程基础概念工作原理 Socket API介绍socket函数绑定、监听函数accept、connect接受/发送函数 Socket API的应用Socket类与其派生类的设计服务器与客户端的设计使用 📓总结 📄前言 现今我们的日常生活当中…

【经典文献】光声立体成像的对极几何

文献标题:《Epipolar Geometry of Opti-Acoustic Stereo Imaging》作者列表:Shahriar Negahdaripour发表期刊:IEEE Transactions on Pattern Analysis and Machine Intelligence发表年份:2007DOI链接:10.1109/TPAMI.20…

EPS软件标注点坐标值

1、如下,点击右侧(尺寸标注)按钮: 2、弹出一个对话框,如下: 3、在上图对话框中设置好箭头样式和小数位数,然后点击图上一点,右击结束再鼠标指定位置,如下: 如…

Lists.partition用法详解

文章目录 一、引入依赖二、用法三、输出 一、引入依赖 依赖于谷歌的guava 包 <!-- guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.1-jre</version></dependency&…

LeetCode算法题:49. 字母异位词分组(Java)

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", …

【吃透Java手写】5-RPC-简易版

【吃透Java手写】RPC-简易版-源码解析 1 RPC1.1 RPC概念1.2 常用RPC技术或框架1.3 初始工程1.3.1 Productor-common&#xff1a;HelloService1.3.2 Productor&#xff1a;HelloServiceImpl1.3.3 Consumer 2 模拟RPC2.1 Productor2.2 模拟一个RPC框架2.2.1 HttpServer2.2.2 Http…

如何安全高效地进行4S店文件分发,保护核心资产?

4S店与总部之间的文件分发是确保双方沟通顺畅、信息共享和决策支持的重要环节。4S店文件分发涉及到以下文件类型&#xff1a; 销售报告&#xff1a;4S店需要定期向总部提交销售报告&#xff0c;包括销售数量、销售额、市场份额等关键指标。 库存管理文件&#xff1a;包括车辆库…

Linux-基础IO

&#x1f30e;Linux基础IO 文章目录&#xff1a; Linux基础IO C语言中IO交互       常用C接口         fopen         fputs         fwrite         fgets 当前路径       三个文件流 系统文件IO       open函数     …

windows 环境下安装《车辆动态监控系统》支持JT808、JT1078、苏标主动安全设备接入

《车辆动态监控系统》下载安装部署包 开放端口 80/443/8800&#xff0c;web后台端口&#xff0c;nginx代理服务&#xff0c;nginx默认为8800端口8808&#xff0c;JT808专用端口6802&#xff0c;视频播放推流端口6891-6898&#xff0c;FTP端口6821&#xff0c;苏标主动安全附件…

一. Ast - 反混淆(基础篇)

目录 ​编辑 1. 什么是Ast-了解 2. 什么是反混淆-了解 3. 了解Ast结构 4. 思考 5. 前置准备 6. 什么是babel 7. 安装babel 8. ast反混淆代码基本结构 9. babel中的组件 parser与generator 组件 traverse 组件 与visitor enter与exit visitor 其他写法 traverse …

Python API和微服务的测试库之httpretty使用详解

概要 在现代软件开发中,API和微服务的测试是确保应用稳定性和功能正确性的关键环节。Python的HTTPretty库提供了一个强大的工具,允许开发者在不实际发起网络请求的情况下模拟HTTP请求和响应。本文将全面介绍HTTPretty的安装、特性、基本与高级功能,并结合实际应用场景,展示…

FebHost:什么是汤加.TO域名?

什么是.TO域名&#xff1f; 汤加域名是指在顶级域.to下注册的域名&#xff0c;.to域名是汤加的国家代码顶级域&#xff08;ccTLD&#xff09;。它类似于其他特定国家的域名后缀&#xff0c;如美国的”.us “或英国的”.uk”。 汤加国家介绍 汤加正式名称为汤加王国&#xff…

Java入门基础学习笔记19——关系运算符、逻辑运算符

关系运算符&#xff1a; 判断数据是否满足条件&#xff0c;最终会返回一个判断的结果&#xff0c;这个结果是布尔类型的值&#xff1a;true或false。 注意&#xff1a;在java中判断是否相等一定是“”&#xff0c;不要把“”写成“”&#xff0c;“”是赋值表达式。 package c…

【kubeflow文档】kubeflow介绍与架构

1. kubeflow介绍 Kubeflow项目致力于使机器学习&#xff08;ML&#xff09;工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务&#xff0c;而是提供一种直接的方法&#xff0c;将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…

2.1 软件工程

第2章 信息技术知识 2.1 软件工程 现状&#xff1a; 开发软件的规模越来越大复杂度越来越高用户需求并不十分明确缺乏软件开发方法和工具方面的有效支持 软件成本日益增长、开发进度难以控制、软件质量无法保证、软件维护困难等问题日益突出。人们开始用工程的方法进行软件…

K8S -----二进制搭建 Kubernetes v1.20

目录 一、准备环境 1.1 修改主机名 1.2 关闭防火墙&#xff08;三台一起&#xff0c;这里只展示master01&#xff09; 1.3 在master添加hosts&#xff08;依旧是三台一起&#xff09; 1.4 调整内核参数并开启网桥模式 二、部署docker引擎 三、部署 etcd 集群 1.在mast…

水电站机组油压自动化控制系统概述及优势介绍

一、系统背景 我国河流、湖泊分布广泛&#xff0c;落差巨大&#xff0c;蕴藏着丰富的资源优势&#xff0c;我国作为世界第二大能源消耗国&#xff0c;对于电力的需求是巨大的&#xff0c;水力发电具有高效、清洁、能量供给稳定充足的特点&#xff0c;因此&#xff0c;水电工程…