微信扫码
与创始人交个朋友
我要投稿
在人工智能快速发展的今天,各种AI开发框架层出不穷。LangChain因其强大的功能而广受欢迎,dspy则以其简洁的API吸引了不少开发者。但是,这些框架真的能满足所有AI开发需求吗?让我们一起来看看为什么革命性的ell库可能是你一直在寻找的解决方案。
1. API过于复杂:需要大量样板代码,增加了学习成本。
2. 灵活性不足:强制使用特定的工作流程,限制了开发者的创造力。
3. 版本控制困难:难以跟踪和管理不同版本的提示。
4. 性能开销大:复杂的架构可能带来额外的性能负担。
5. 定位不清晰:功能过多,啥都往里面塞,用过的人都懂。
虽然dspy提供了更简洁的API,但它仍然存在一些局限性:
1. 功能相对有限:在处理复杂的多步骤任务时可能不够灵活。
2. 不合理的框架:通过自动识别类信息的方式构建提示词,隐藏了过多细节,微调能力不够
3. 生态系统较小:社区和生态系统还在发展中。
4. 版本控制功能欠缺:没有内置的版本控制功能,这在大型项目中可能成为问题。
ell的诞生,正是为了解决这些问题。它由前OpenAI研究科学家William H. Guss创造,融合了他在语言模型和提示工程方面的深厚经验。让我们通过一系列实例来深入了解ell的核心优势。
ell将提示视为完整的程序,而不仅仅是字符串。这允许开发者利用Python的全部功能来构建复杂的提示逻辑。
import ell
@ell.simple(model="gpt-4o-mini")
def answer_question(question: str):
"""你是一个知识渊博的助手""" # 系统提示
return f"请回答以下问题:{question}" # 用户提示
result = answer_question("法国的首都是哪里?")
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函数和逻辑,生成动态的系统提示和用户提示。你可以轻松地融入复杂的逻辑,使你的提示更加灵活和强大。
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都会自动保存一个新版本。你可以轻松地管理和比较不同版本的提示,这在优化过程中非常有用。
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界面,让你可以轻松查看提示版本、性能指标和使用统计。这使得提示工程变得更加科学和可控。
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函数处理。这种方法使得处理复杂任务变得简单和直观。
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如何轻松处理图像输入和结构化输出。你可以轻松扩展这种方法来处理各种复杂的多模态任务。
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功能的集成变得异常简单。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-22
如何写出高质量的 prompt
2024-11-22
微软发现不同prompt模版会导致最大40%性能差距!
2024-11-22
原理解析:17岁高中生「神级 Prompt,把 Claude 强化成满血 o1」
2024-11-22
10000块的提示词被破解了
2024-11-22
叙事Prompt也能提升LLM推理能力?用叙事框架SoT解决复杂问题 |波恩大学最新
2024-11-21
致继刚,感谢你继承乔哈里视窗和提示词心法
2024-11-20
郭美青 | 从Demo到商用—构建企业级提示词工程,加速AI应用商用落地
2024-11-20
云中江树 | 重塑自然语言编程,Agent 训练的核心探索
2024-06-29
2023-06-08
2024-08-20
2024-06-27
2024-06-14
2024-07-09
2024-07-12
2024-09-17
2024-06-26
2024-06-29