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

langchian 批次调用 prompt

目录

基础不使用批次

batch

批次调用


关于 langchian 额一些应用,可以查看案例:

GitHub - 5zjk5/prompt-engineering: prompt 工程项目案例

基础不使用批次

from dotenv import load_dotenv
import time
import os
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChainload_dotenv('key.env')from langchain_community.llms import Tongyi
def tongyi_qwen_plus(temperature=1):# 通义 qwen_plusmodel = Tongyi(temperature=temperature, model_name='qwen-plus', dashscope_api_key=os.getenv('DASHSCOPE_API_KEY'))return model
llm = tongyi_qwen_plus()prompt = ['说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
]
start = time.time()def base_llm_chain(model, prompt, **kwargs):"""https://python.langchain.com/docs/modules/model_io/prompts/composition/#string-prompt-composition基础链,带有变量的 prompt ,model 两个组成链:param model: llm:param prompt: prompt 其中的变量是用 {} 括起来的:param kwargs: prompt 中的变量:return:"""prompt = PromptTemplate.from_template(prompt)chain = LLMChain(llm=model, prompt=prompt)res = chain.run(kwargs)return res
res = []
for p in prompt:_ = base_llm_chain(llm, p)res.append(_)
end = time.time()
t = end - start
print(t)

batch

Quickstart | 🦜️🔗 LangChain

from dotenv import load_dotenv
import time
import os
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChainload_dotenv('key.env')from langchain_community.llms import Tongyi
def tongyi_qwen_plus(temperature=1):# 通义 qwen_plusmodel = Tongyi(temperature=temperature, model_name='qwen-plus', dashscope_api_key=os.getenv('DASHSCOPE_API_KEY'))return model
llm = tongyi_qwen_plus()prompt = ['说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
]
start = time.time()
def batch_base_llm_chain_no_var(model, prompt):"""基础链,批次调用不带变量的,传入的 prompt 是一个列表这种方式经过测试,没有用,测试了通义,智谱,这应该是专门为 openai 设计的接口需要真正批次调用使用 batch_base_llm_chain 方法,经测试有用"""res = model.batch(prompt)return res
# res = Chain.batch_base_llm_chain(llm, '{prompt_string}', max_concurrency=16, prompt_string=prompt)
res = batch_base_llm_chain_no_var(llm, prompt)
end = time.time()
t = end - start
print(t)

跑几次都是 22s 左右,跟一条一条调用没有区别,测试了通义,智谱都一样,这应该是专门为 openai 设计的接口。

批次调用

下面这个方法才有用

from dotenv import load_dotenv
import time
import os
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChainload_dotenv('key.env')from langchain_community.llms import Tongyi
def tongyi_qwen_plus(temperature=1):# 通义 qwen_plusmodel = Tongyi(temperature=temperature, model_name='qwen-plus', dashscope_api_key=os.getenv('DASHSCOPE_API_KEY'))return model
llm = tongyi_qwen_plus()prompt = ['说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
'说出"你好",不需要输出其他字','说出“中国在哪里?”,不需要输出其他字','说出“你能做什么?”,不需要输出其他字','说出“讲一个小白兔故事”,不需要输出其他字',
]
start = time.time()def batch_base_llm_chain(model, prompt, max_concurrency=5, **kwargs):"""https://python.langchain.com/docs/modules/model_io/prompts/composition/#string-prompt-composition基础链,带有变量的 prompt ,与不带变量的都可以用,model 两个组成链,批次调用:param model: llm:param prompt: prompt 其中的变量是用 {} 括起来的:param kwargs: prompt 中的变量:param max_concurrency: 并发请求数e.g: 带变量的调用prompt = 'tell me a joke about {other} and {topic2}'other = ['bear', 'dog']topic2 = ['cat', 'monkey']Chain.batch_base_llm_chain(llm, prompt, other=other, topic2=topic2)传进来后的 kwargs: kwargs = {'topic1': ['bear', 'dog'], 'topic2': ['cat', 'monkey']}处理后 batch_list: batch_list = [{"topic1": "bears", "topic2": "cat"}, {"topic1": "dog", "topic2": "monkey"}]e.g: 不带变量的调用prompt = '{prompt_string}'prompt_lst = ['xxx', 'xxx'...]Chain.batch_base_llm_chain(llm, '{prompt_string}', max_concurrency=16, prompt_string=prompt_lst):return:"""prompt = PromptTemplate.from_template(prompt)chain = LLMChain(llm=model, prompt=prompt)# 确保所有列表长度相同,构造批次列表keys = list(kwargs.keys())first_list_length = len(kwargs[keys[0]])if all(len(kwargs[key]) == first_list_length for key in keys):# 使用zip函数将所有值配对paired_values = zip(*[kwargs[key] for key in keys])# 遍历配对后的值,构造新的字典列表batch_list = [dict(zip(keys, values)) for values in paired_values]else:print("批次对应列表长度不一致,无法转换。")return Noneres = chain.batch(batch_list, config={"max_concurrency": max_concurrency})return res
res = batch_base_llm_chain(llm, '{prompt_string}', max_concurrency=16, prompt_string=prompt)
end = time.time()
t = end - start
print(t)

快了 2-3 倍


http://www.mrgr.cn/news/5491.html

相关文章:

  • python 面试指南
  • 何为数据专线和互联网专线?两者有什么区别?
  • 【算法基础实验】图论-最小生成树Kruskal实现
  • QT中通过TCP协议多线程的文件传输(客户端)
  • 【架构设计】-- aarch(ARM) and X86
  • [Meachines] [Easy] Active SMB未授权访问+GPP凭证泄露破解+Kerberos-管理员TGS票据破解
  • Django 后端架构开发:高效日志规范与实践
  • 20 Tkinter Spinbox 组件
  • ansible:
  • 解决执行npm run dev报错node: --openssl-legacy-provider is not allowed in NODE_OPTIONS
  • 【Datawhale AI夏令营第五期】 CV方向 Task01学习笔记 YOLO方案baseline
  • xcode如何编译python
  • 利用TeamCity实现maven项目的CI/CD
  • React Native
  • 学生党蓝牙耳机哪个牌子性价比高?推荐四款内行精选百元耳机!
  • MSSQLILABS靶场手工注入
  • react面试题一
  • 机器学习:逻辑回归算法实现鸢尾花预测和银行数据处理
  • stm32—SPI
  • GitHub开源的轻量级文件服务器,可docker一键部署