返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

ell:告别LangChain的繁琐,拥抱提示工程新时代!

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 11:37 |阅读模式 打印 上一主题 下一主题

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.5em 1em;color: rgb(63, 63, 63);text-shadow: rgba(0, 0, 0, 0.1) 2px 2px 4px;">ell:告别LangChain的繁琐,拥抱提示工程新时代!

在人工智能快速发展的今天,各种AI开发框架层出不穷。LangChain因其强大的功能而广受欢迎,dspy则以其简洁的API吸引了不少开发者。但是,这些框架真的能满足所有AI开发需求吗?让我们一起来看看为什么革命性的ell库可能是你一直在寻找的解决方案。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(15, 76, 129);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">现有框架的局限性

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 12px;color: rgb(63, 63, 63);">LangChain的挑战

    ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(63, 63, 63);" class="list-paddingleft-1">
  1. 1.API过于复杂:需要大量样板代码,增加了学习成本。

  2. 2.灵活性不足:强制使用特定的工作流程,限制了开发者的创造力。

  3. 3.版本控制困难:难以跟踪和管理不同版本的提示。

  4. 4.性能开销大:复杂的架构可能带来额外的性能负担。

  5. 5.定位不清晰:功能过多,啥都往里面塞,用过的人都懂。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 12px;color: rgb(63, 63, 63);">dspy的不足

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.1em;color: rgb(63, 63, 63);">虽然dspy提供了更简洁的API,但它仍然存在一些局限性:

    ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(63, 63, 63);" class="list-paddingleft-1">
  1. 1.功能相对有限:在处理复杂的多步骤任务时可能不够灵活。

  2. 2.不合理的框架:通过自动识别类信息的方式构建提示词,隐藏了过多细节,微调能力不够

  3. 3.生态系统较小:社区和生态系统还在发展中。

  4. 4.版本控制功能欠缺:没有内置的版本控制功能,这在大型项目中可能成为问题。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(15, 76, 129);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">ell:融合优点,突破局限

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.1em;color: rgb(63, 63, 63);">ell的诞生,正是为了解决这些问题。它由前OpenAI研究科学家William H. Guss创造,融合了他在语言模型和提示工程方面的深厚经验。让我们通过一系列实例来深入了解ell的核心优势。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 12px;color: rgb(63, 63, 63);">1. 提示即程序:超越简单字符串

ell将提示视为完整的程序,而不仅仅是字符串。这允许开发者利用Python的全部功能来构建复杂的提示逻辑。

写法1

importell

@ell.simple(model="gpt-4o-mini")
defanswer_question(question:str):
"""你是一个知识渊博的助手"""#系统提示
returnf"请回答以下问题:{question}"#用户提示

result=answer_question("法国的首都是哪里?")

写法2

importell
importrandom

@ell.simple(model="gpt-4o-mini")
defcreative_story_generator(theme:str,mood:str):
adjectives=["神奇的","惊人的","不可思议的","震撼人心的"]

defget_random_adjective():
returnrandom.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")
deftranslate(text:str,target_language:str):
"""你是一个精通多国语言的翻译专家。"""
returnf"将以下文本翻译成{target_language}:\n{text}"

#第一个版本
result1=translate("Hello,world!","中文")
print("版本1:",result1)

#修改函数,创建新版本
@ell.simple(model="gpt-4o-mini")
deftranslate(text:str,target_language:str):
"""你是一个精通多国语言的翻译专家,专注于保留原文的语气和风格。"""
returnf"请将以下文本翻译成{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")
defsentiment_analysis(text:str):
"""你是一个专业的情感分析专家。"""
returnf"分析以下文本的情感倾向(正面/负面/中性):\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")
defgenerate_outline(topic:str):
"""你是一个擅长创作大纲的作家。"""
returnf"为主题'{topic}'创建一个简要的文章大纲。"

@ell.simple(model="gpt-4o")
defexpand_section(section:str):
"""你是一个专业的内容写作者。"""
returnf"详细展开以下段落,至少300字:\n{section}"

@ell.complex(model="gpt-4o-2024-08-06")
defwrite_article(topic:str):
#步骤1:生成大纲
outline=generate_outline(topic)

#步骤2:对每个大纲章节进行扩展
sections=outline.split("\n")
expanded_sections=[expand_section(section)forsectioninsectionsifsection.strip()]

#步骤3:组合成完整文章
full_article="\n\n".join(expanded_sections)

returnfull_article

article=write_article("人工智能的未来发展")
print(article)

这个例子展示了如何将一个复杂的任务分解为多个步骤,每个步骤都由一个专门的ell函数处理。这种方法使得处理复杂任务变得简单和直观。

5. 结构化输出和多模态交互:应对各种复杂场景

ell支持结构化输出和多模态输入,使复杂任务变得简单:

frompydanticimportBaseModel,Field
fromPILimportImage

classImageAnalysis(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)
defanalyze_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项目中:

importell

#在你的项目中定义ell函数
@ell.simple(model="gpt-4o-mini")
defsummarize(text:str):
"""你是一个擅长总结的AI助手。"""
returnf"请简要总结以下文本,不超过50字:\n{text}"

#在项目的任何地方使用这个函数
defprocess_document(document):
#其他处理逻辑...
summary=summarize(document.content)
document.summary=summary
#更多处理...

#示例使用
doc=get_document()#假设这是你项目中的一个函数
process_document(doc)
print(doc.summary)

这个例子展示了如何将ell函数无缝集成到你的现有项目中。你可以像使用普通Python函数一样使用ell函数,使得AI功能的集成变得异常简单。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ