1 注册配置豆包API
1.1 注册火山账号
使用自己的手机号即可
1.2 创建api key
API密钥(API Key)是一种用于身份验证和访问控制的重要工具。在使用各种服务时,例如阿里云的短信服务、人机验证等,API密钥起着确保请求来源可靠的作用。具体来说,API密钥的作用包括但不限于以下几点:
身份验证:API密钥用于验证请求的来源,确保只有获得授权的用户或应用程序才能访问特定的API。
安全性:通过要求提供密钥,可以防止未授权访问,减少恶意请求的风险。密钥通常是唯一的,可以有效识别和追踪不同的用户。
调用限制:许多API会对每个API密钥设置调用次数限制或速率限制,以防止滥用和保护服务器资源。
权限管理:不同的API密钥可以绑定不同的权限,允许用户根据需要进行精细化的访问控制。
在实际使用中,确保API密钥的安全性非常重要。避免将密钥硬编码在公共的代码库中,也应尽量定期更换密钥,以增强系统的安全性。使用环境变量或安全配置管理工具来存储和管理密钥,是一种有效的安全做法。总之,API密钥是现代应用程序中不可或缺的部分,它在确保数据安全和访问控制方面发挥着关键作用。
1.3 选择模型和设置API调用
创建推理节点(其实和大模型的对话就是推理)
选择模型和版本
成功如下
设置API调用
得到base_url 和 model,
至此 我们已经得到了 base_url, model, api key三个调用的关键了
2 开篇词_奇点时刻
2.1 设置环境变量
打开 /home/cloudide/.cloudiderc
令文件生效
echo $OPENAI_API_KEY
echo $OPENAI_BASE_URL
echo $LLM_MODELEND
2.2 SimpleTextGeneration
代码如下:根据火山方舟第三方调用案例修改所得
import os
from langchain_openai import ChatOpenAI
from openai import OpenAI
api_key = os.environ["OPENAI_API_KEY"]
model_name = os.environ["LLM_MODELEND"]
base_url = os.environ["OPENAI_BASE_URL"]
# print("api_key:", api_key)
# print("model_name:", model_name)
# print("base_url:", base_url)
client = OpenAI(
api_key = api_key,
base_url = base_url,
)
completion = client.chat.completions.create(
model = model_name, # your model endpoint ID
messages = [
{"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"},
{"role": "user", "content": "请给我写一句情人节红玫瑰的中文宣传语"},
],
)
print(completion.choices[0].message.content)
运行结果如下:
我们已经成功调用了大模型
2.3 PictureDescription
# ---- Part 0 导入所需要的类
import os
import requests
from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
# ---- Part I 初始化图像字幕生成模型
# 指定要使用的工具模型(HuggingFace中的image-caption模型)
hf_model = "Salesforce/blip-image-captioning-large"
print("正在初始化图像字幕生成模型...")
# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model)
print("初始化图像字幕生成模型成功")
# ---- Part II 定义图像字幕生成工具类
class ImageCapTool(BaseTool):
name: str= "ImageCaptioning"
description: str = "使用该工具可以生成图片的文字描述,需要传入图片的URL."
def _run(self, url: str):
# 下载图像并将其转换为PIL对象
image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
# 预处理图像
inputs = processor(image, return_tensors="pt")
# 生成字幕
out = model.generate(**inputs, max_new_tokens=20)
# 获取字幕
caption = processor.decode(out[0], skip_special_tokens=True)
return caption
def _arun(self, query: str):
raise NotImplementedError("This tool does not support async")
# ---- PartIII 初始化并运行LangChain智能体
llm = ChatOpenAI(
openai_api_key=os.environ.get("OPENAI_API_KEY"),
openai_api_base=os.environ.get("OPENAI_BASE_URL"),
model=os.environ.get("LLM_MODELEND"),
temperature=0.2
)
print("初始化大语言模型成功")
# 使用工具初始化智能体并运行
tools = [ImageCapTool()]
agent = initialize_agent(
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
tools=tools,
llm=llm,
verbose=True,
handle_parsing_errors=True,
)
img_url = "https://lf3-static.bytednsdoc.com/obj/eden-cn/lkpkbvsj/ljhwZthlaukjlkulzlp/eec79e20058499.563190744f903.jpg"
agent.invoke(input=f"图片链接如下:{img_url}\n 请为这张图创作合适的中文推广文案")
运行结果:
3 LangChain快速入门
3.1 创建文本模型推理接入点
因为咱们没有OpenAI,所以就在方舟上找一个文本模型
3.2 TextModel
查看新模型的第三方调用,写出如下代码
不过有一个疑惑,这虽然是个文本模型但是还是使用了client.chat.completions.create,我感觉和chat模型的调用并没有很大差别
import os
from openai import OpenAI
api_key = os.environ["OPENAI_API_KEY"]
model_name = os.environ["LLM_MODELEND"]
base_url = os.environ["OPENAI_BASE_URL"]
client = OpenAI(
api_key = api_key,
base_url = base_url,
)
# Non-streaming:
print("----- standard request -----")
completion = client.chat.completions.create(
model = "ep-20241107134821-gx9mc", # your model endpoint ID
messages = [
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "请给我的花店起个名"},
],
)
print(completion.choices[0].message.content)
返回结果:
因为Llama是国外的模型好像,所以回答是英语,可以通过中文数据集微调,让他说中文的
可是看出Text模型返回的并不是对话形式的
翻译:
3.3 ChatModel
代码如下:
import os
from openai import OpenAI
# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'
client = OpenAI(
api_key=os.environ.get("OPENAI_API_KEY"),
base_url=os.environ.get("OPENAI_BASE_URL"),
)
# text = client.invoke("请给我写一句情人节红玫瑰的中文宣传语")
response = client.chat.completions.create(
model=os.environ.get("LLM_MODELEND"),
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "请给我的花店起个名"},
],
temperature=0.8,
max_tokens=60,
)
print(response.choices[0].message.content)
结果如下:
我们可以发现 这个和text文本其实差距不是很大,甚至类似,很难区分是text模型还是chat模型,所以我决定换一个问法,内容改为:你的创造者是谁?
import os
from openai import OpenAI
# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'
client = OpenAI(
api_key=os.environ.get("OPENAI_API_KEY"),
base_url=os.environ.get("OPENAI_BASE_URL"),
)
# text = client.invoke("请给我写一句情人节红玫瑰的中文宣传语")
response = client.chat.completions.create(
model=os.environ.get("LLM_MODELEND"),
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "你的创造者是谁?"},
],
temperature=0.8,
max_tokens=60,
)
print(response.choices[0].message.content)
结果如下:可以看出他就像对话一样回答了你的问题,是调用了chat模型
3.4 TextLangChain
因为设置好环境变量的缘故,不用设置api key等,当然也可以在这里重置新的api key,model等
代码如下:和直接调用差距不大
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="ep-20241107134821-gx9mc",
temperature=0.8,
max_tokens=600,
)
response = llm.invoke("请给我的花店起个名").content
print(response)
结果如下:
3.5 ChatLongChain
代码如下:和直接 调用差距不大
import os
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'
chat = ChatOpenAI(model=os.environ.get("LLM_MODELEND"), temperature=0.8, max_tokens=600)
messages = [ SystemMessage(content="你是一个很棒的智能助手"), HumanMessage(content="请给我的花店起个名"),]
response = chat(messages).content
print(response)
结果如下:
4 总结
在学习过程中,我深入掌握了在火山方舟中选择合适模型及设置API调用的技巧,并对文本模型与聊天模型的基本概念进行了全面了解。特别是通过直接调用OpenAI的接口以及利用LangChain库,我成功实现了这两类模型的实际应用。此外,我认识到LangChain的版本更新速度可能无法完全跟上OpenAI及其他AI技术的迅速发展,这使我意识到多样化的API调用方式变得愈发重要。
为了应对AI领域的快速演进,我们必须不断拓宽自己的知识面,学习不同的API调用方法,以便能够灵活应对各种需求。例如,可以探寻其他库或平台的调用方式,或是深入研究不同模型的特性,以充分发挥其优势。通过这些学习和探索,不仅能够提高我们的开发能力,也能帮助我们在不断变化的技术环境中保持竞争力。
总之,通过本次学习,我不仅收获了实用的技能,还提升了对AI领域的整体理解,这为未来可能的技术挑战打下了坚实的基础。继续保持学习的热情,将使我在这一领域中游刃有余。