通义千问-langchain使用构建(一)
目录
- 序言
- 通义千问
- 1获取通义千问api_key
- 2Conda构建下本地环境
- 3 构建一下多轮对话
- LangChain
- 1使用Langchain调用通义千问接口实现翻译
- 结论
序言
25年5月,现在基本每个大厂都有涉及大模型(Large Language Model),然后在大模型基础上构建应用框架。
参考链接1:https://baijiahao.baidu.com/s?id=1823187505923920373
这个文章里提到24年全球已经有1300多个大模型,挺夸张的。
模型一多,自然有大模型开发应用框架的出现。每个厂商自身也会推出应用框架,但是有第三方整合使用,一个接口,总比好多个不同接口来的好。
25年LLM应用框架介绍:https://blog.csdn.net/m0_63171455/article/details/145929392
langchain知识库应用框架介绍:
https://blog.csdn.net/xiangxueerfei/article/details/141141146
所以,这个文章,用一下通义千问应用框架,基于通义千问接口构建一个langchain试用下。
通义千问
阿里的大模型名字。
1获取通义千问api_key
参考文档链接:https://help.aliyun.com/zh/model-studio/first-api-call-to-qwen?spm=a2c4g.11186623.0.i17
最终就是把这个界面的key值生成,后续复制出来使用。
2Conda构建下本地环境
如下图内容。创建虚拟环境,安装下包。dashscope是阿里自己的应用开发包,langchain是第三方的。
然后建个文件,保存下api_key,或者环境变量设置也行。
3 构建一下多轮对话
这个代码就是调用下【通义千问】接口,然后简单的多轮对话
代码:
import os
from dashscope import Generation
import dashscope
import key_config
def get_response(messages):response = Generation.call(# 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",api_key=key_config.tongyi_key,# 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/modelsmodel="qwen-plus",messages=messages,result_format="message",)return response# 初始化一个 messages 数组
messages = [{"role": "system","content": """你是一名阿里云百炼手机商店的店员,你负责给用户推荐手机。手机有两个参数:屏幕尺寸(包括6.1英寸、6.5英寸、6.7英寸)、分辨率(包括2K、4K)。你一次只能向用户提问一个参数。如果用户提供的信息不全,你需要反问他,让他提供没有提供的参数。如果参数收集完成,你要说:我已了解您的购买意向,请稍等。""",}
]assistant_output = "欢迎光临阿里云百炼手机商店,您需要购买什么尺寸的手机呢?"
print(f"模型输出:{assistant_output}\n")
while "我已了解您的购买意向" not in assistant_output:user_input = input("请输入:")# 将用户问题信息添加到messages列表中messages.append({"role": "user", "content": user_input})assistant_output = get_response(messages).output.choices[0].message.content# 将大模型的回复信息添加到messages列表中messages.append({"role": "assistant", "content": assistant_output})print(f"模型输出:{assistant_output}")print("\n")
参考链接:https://help.aliyun.com/zh/model-studio/multi-round-conversation?spm=a2c4g.11186623.0.0.5c55623cU9ivA4
成效:
LangChain
一个大模型开发框架,github星多,用的人多,25年尚且流行。
主要功能就是把本地模型或者外部模型链接,再做一下嵌套应用。主要的好处,就是定制化,比如说搞好了一个特定的翻译应用,或者说园林行业的专家模型,原本用的openai,然后用着用着,太贵了,替换成通义千问,这时候,就不用局限于openai的开发框架,少量迁移工作就可以换成其他厂商的。
#英文官方文档
https://python.langchain.com/docs/introduction/
#中文非官方文档
https://www.langchain.com.cn/docs/introduction/
1使用Langchain调用通义千问接口实现翻译
代码
from fastapi import FastAPI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_qianwen import ChatQwen_v1
from langserve import add_routes
from openai import OpenAI
from langchain_community.llms.tongyi import Tongyi
from langchain.prompts.prompt import PromptTemplate
# 设置 API Key(推荐使用环境变量或文件)
import os
import key_config
os.environ['DASHSCOPE_API_KEY'] = key_config.tongyi_key# 1创建临时对话提示词
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages([('system', system_template),('user','{text}')
])# 2. 创建模型
model = Tongyi(model_name='qwen-max',model_kwargs={'temperature': 0.01})# 3.字符串解析
parser = StrOutputParser()# 4. Create chain
chain = prompt_template | model | parser# 4. App definition
app = FastAPI(title="LangChain Server",version="1.0",description="A simple API server using LangChain's Runnable interfaces",
)# 5. Adding chain route
add_routes(app,chain,path="/chain",
)if __name__ == "__main__":import uvicornuvicorn.run(app, host="localhost", port=8910)
这个代码构建完,对应路径加playgroud,就可以做简单的界面交互测试。
成效:
如下图所示,这句话就翻译成了印度语。
这个是翻译成德语
结论
综上,做了一下最简单的应用