在人工智能快速发展的今天,各种AI开发框架层出不穷。LangChain因其强大的功能而广受欢迎,dspy则以其简洁的API吸引了不少开发者。但是,这些框架真的能满足所有AI开发需求吗?让我们一起来看看为什么革命性的ell库可能是你一直在寻找的解决方案。
现有框架的局限性
LangChain的挑战
-
API过于复杂:需要大量样板代码,增加了学习成本。
-
灵活性不足:强制使用特定的工作流程,限制了开发者的创造力。
-
版本控制困难:难以跟踪和管理不同版本的提示。
-
性能开销大:复杂的架构可能带来额外的性能负担。
-
定位不清晰:功能过多,啥都往里面塞,用过的人都懂。
dspy的不足
虽然dspy提供了更简洁的API,但它仍然存在一些局限性:
-
功能相对有限:在处理复杂的多步骤任务时可能不够灵活。
-
不合理的框架:通过自动识别类信息的方式构建提示词,隐藏了过多细节,微调能力不够
-
生态系统较小:社区和生态系统还在发展中。
-
版本控制功能欠缺:没有内置的版本控制功能,这在大型项目中可能成为问题。
ell:融合优点,突破局限
ell的诞生,正是为了解决这些问题。它由前OpenAI研究科学家William H. Guss创造,融合了他在语言模型和提示工程方面的深厚经验。让我们通过一系列实例来深入了解ell的核心优势。
1. 提示即程序:超越简单字符串
ell将提示视为完整的程序,而不仅仅是字符串。这允许开发者利用Python的全部功能来构建复杂的提示逻辑。
写法1
import ell @ell.simple(model="gpt-4o-mini") def answer_question(question: str): """你是一个知识渊博的助手""" # 系统提示 return f"请回答以下问题:{question}" # 用户提示 result = answer_question("法国的首都是哪里?")
写法2
import ell import random @ell.simple(model="gpt-4o-mini") def creative_story_generator(theme: str, mood: str): adjectives = ["神奇的", "惊人的", "不可思议的", "震撼人心的"] def get_random_adjective(): return random.choice(adjectives) system_prompt = f"你是一个{get_random_adjective()}故事创作者。" user_prompt = f"请以'{theme}'为主题,创作一个'{mood}'基调的短篇故事。" return [ ell.system(system_prompt), ell.user(user_prompt) ] story = creative_story_generator("时空旅行", "神秘") print(story)
这个例子展示了如何在提示中使用Python函数和逻辑,生成动态的系统提示和用户提示。你可以轻松地融入复杂的逻辑,使你的提示更加灵活和强大。
2. 自动版本控制和序列化:轻松优化你的提示
ell提供了强大的自动版本控制功能,这是LangChain和dspy都不具备的:
ell.init(store='./my_prompts', autocommit=True) @ell.simple(model="gpt-4o-mini") def translate(text: str, target_language: str): """你是一个精通多国语言的翻译专家。""" return f"将以下文本翻译成{target_language}:\n{text}" # 第一个版本 result1 = translate("Hello, world!", "中文") print("版本1:", result1) # 修改函数,创建新版本 @ell.simple(model="gpt-4o-mini") def translate(text: str, target_language: str): """你是一个精通多国语言的翻译专家,专注于保留原文的语气和风格。""" return f"请将以下文本翻译成{target_language},注意保持原文的语气和风格:\n{text}" # 第二个版本 result2 = translate("Hello, world!", "中文") print("版本2:", result2)
每次修改和运行这个函数,ell都会自动保存一个新版本。你可以轻松地管理和比较不同版本的提示,这在优化过程中非常有用。
3. 监控、版控和可视化工具:科学化你的提示工程
ell提供了强大的工具来监控和分析你的提示工程过程:
ell.init(store='./my_prompts', autocommit=True, verbose=True) @ell.simple(model="gpt-4o-mini") def sentiment_analysis(text: str): """你是一个专业的情感分析专家。""" return f"分析以下文本的情感倾向(正面/负面/中性):\n{text}" result = sentiment_analysis("今天的天气真是太棒了!") print(result) # 运行这段代码后,你可以使用ell-studio来可视化和分析结果 # 在命令行中运行: ell-studio --storage ./my_prompts
ell-studio提供了一个直观的web界面,让你可以轻松查看提示版本、性能指标和使用统计。这使得提示工程变得更加科学和可控。
4. 支持多步骤的语言模型调用:轻松实现复杂任务
ell支持复杂的多步骤提示工程解决方案,让你能够轻松处理需要多个步骤的任务:
@ell.simple(model="gpt-4o-mini") def generate_outline(topic: str): """你是一个擅长创作大纲的作家。""" return f"为主题'{topic}'创建一个简要的文章大纲。" @ell.simple(model="gpt-4o") def expand_section(section: str): """你是一个专业的内容写作者。""" return f"详细展开以下段落,至少300字:\n{section}" @ell.complex(model="gpt-4o-2024-08-06") def write_article(topic: str): # 步骤1: 生成大纲 outline = generate_outline(topic) # 步骤2: 对每个大纲章节进行扩展 sections = outline.split("\n") expanded_sections = [expand_section(section) for section in sections if section.strip()] # 步骤3: 组合成完整文章 full_article = "\n\n".join(expanded_sections) return full_article article = write_article("人工智能的未来发展") print(article)
这个例子展示了如何将一个复杂的任务分解为多个步骤,每个步骤都由一个专门的ell函数处理。这种方法使得处理复杂任务变得简单和直观。
5. 结构化输出和多模态交互:应对各种复杂场景
ell支持结构化输出和多模态输入,使复杂任务变得简单:
from pydantic import BaseModel, Field from PIL import Image class ImageAnalysis(BaseModel): main_subject: str = Field(description="图片的主要主题") colors: list[str] = Field(description="图片中的主要颜色") mood: str = Field(description="图片传达的整体情绪") @ell.complex(model="gpt-4-vision-preview", response_format=ImageAnalysis) def analyze_image(image: Image.Image): return [ ell.system("你是一个精通图像分析的AI助手。请分析提供的图片,并以结构化格式返回结果。"), ell.user(["请分析这张图片:", image]) ] # 假设我们有一个名为 'sunset.jpg' 的图片文件 image = Image.open('sunset.jpg') analysis = analyze_image(image).parsed print(f"主题: {analysis.main_subject}") print(f"颜色: {', '.join(analysis.colors)}") print(f"情绪: {analysis.mood}")
这个例子展示了ell如何轻松处理图像输入和结构化输出。你可以轻松扩展这种方法来处理各种复杂的多模态任务。
6. 简洁设计,易于集成:无缝融入你的项目
ell的设计使其易于集成到现有的Python项目中:
import ell # 在你的项目中定义ell函数 @ell.simple(model="gpt-4o-mini") def summarize(text: str): """你是一个擅长总结的AI助手。""" return f"请简要总结以下文本,不超过50字:\n{text}" # 在项目的任何地方使用这个函数 def process_document(document): # 其他处理逻辑... summary = summarize(document.content) document.summary = summary # 更多处理... # 示例使用 doc = get_document() # 假设这是你项目中的一个函数 process_document(doc) print(doc.summary)
这个例子展示了如何将ell函数无缝集成到你的现有项目中。你可以像使用普通Python函数一样使用ell函数,使得AI功能的集成变得异常简单。
为什么选择ell?
-
简化开发:ell的设计理念是"使用语言模型就像调用普通函数一样简单"。这大大降低了开发复杂度。
-
灵活强大:从简单的文本生成到复杂的多步骤交互,ell都能轻松应对。
-
版本控制:内置的版本控制功能让你可以轻松管理和优化你的提示。
-
可视化和分析:强大的监控和分析工具帮助你优化AI性能。
-
多模态支持:轻松处理文本、图像、音频等多种数据类型。
-
结构化输出:精确控制输出格式,适合各种复杂应用场景。
-
易于集成:设计简洁,可以无缝融入现有Python项目。
结语
ell不仅仅是另一个AI开发工具,它是重新思考AI开发方式的革命性产品。它汲取了LangChain的强大功能和dspy的简洁设计,同时克服了它们的局限性。无论你是AI开发新手,还是经验丰富的专家,ell都能帮助你更快、更好地构建AI应用。
还在为选择合适的AI开发框架而烦恼吗?试试ell吧!让我们一起拥抱AI开发的新时代,用ell释放你的创造力,打造下一代智能应用!
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。