游乐游手机版
首页/AI热点日报/热点详情

告别LangChain繁琐,拥抱提示工程新时代

类型:热点整理2026-05-30
ell是一款AI开发框架,将提示视为程序而非字符串,支持自动版本控制、可视化监控及多步骤调用,能处理图文结构化输出。相比LangChain和dspy,其接口更简洁,更贴近工程需求,提升提示工程效率。
人工智能领域发展得有多快,看看AI开发框架的迭代就知道。LangChain一度风光无限,dspy也吸引了一波忠实用户,但仔细琢磨下来,这些框架真的完美解决了所有问题吗?这恐怕得打一个问号。那么,有没有更对味的工具?ell的出现,或许给出了一个答案。 先来聊聊LangChain。用过的朋友应该都有体会:API接口堆得太高了,上来就是一大段样板代码,光是理顺这东西就要耗不少精力。灵活度方面也被卡得比较死——它强制你按照特定的工作流来走,想自由发挥?有点难。版本控制?几乎没有,提示改来改去,全靠人工记忆,效率低不说,还容易出错。再加上框架复杂的架构本身也带来额外的性能开销,而且功能越塞越多,给人感觉定位越来越模糊。 dspy确实是简洁,API设计更轻量,但短板也挺明显的。功能相对有限,碰到复杂的多步骤任务就容易力不从心。它的做法是通过自动识别类信息来构建提示词,这一层封装把很多细节都遮盖了,微调空间自然不够用。社区和生态还在成长,版本控制也基本空白,这些在大项目里就是要命的点。 ell:告别LangChain的繁琐,拥抱提示工程新时代! ### 为什么ell能够跳出这个圈? ell的诞生,根子上就是为了修正这些痛点。它的创造者是前OpenAI研究科学家William H. Guss,在语言模型和提示工程这块积累相当深厚。废话不多说,直接看它到底好在哪。 #### 1. 把提示当成程序,而不是字符串 ell的核心哲学很特别——它把提示看作一个程序,而不是一段字符串。这意味着,Python的全套能力你都能拿来构建提示逻辑。看看下面两个例子就明白了。 **写法1** ```python import ell @ell.simple(model="gpt-4o-mini") def answer_question(question: str): """你是一个知识渊博的助手""" # 系统提示 return f"请回答以下问题:{question}" # 用户提示 result = answer_question("法国的首都是哪里?") ``` **写法2** ```python 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) ``` 第二个例子尤其有意思——系统提示里嵌入了随机逻辑,提示本身就有了生命力和动态性。这在传统框架里得绕不少弯子才能实现。 #### 2. 自动版本控制,告别手工记日志 版本控制这个能力,LangChain和dspy都做不到,但ell把它做成了标配。 ```python 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都自动存档一个新的版本。管理和对比不同版本的提示,像操作Git一样清爽。这在不断调优提示的场景下,价值立竿见影。 #### 3. 监控与可视化,把工程变成科学 提示工程优化久了,最大的痛点就是:全靠感觉。哪个版本效果更好?哪里跑偏了?影响多大?过去只能赌。 ell用一套可视化工具(ell-studio)把这个问题解决了。 ```python 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. 多步骤语言模型调用,复杂的活儿拆开干 处理复杂任务是AI开发的老大难。ell的做法是把任务拆解成几个独立的步骤,每一步交给一个专门的函数。 ```python @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) ``` 分解之后的每一步,代码意图都一目了然,调试和替换哪个步骤都很方便。这种编排方式比在LangChain里画复杂的chain要直观得多。 #### 5. 结构化输出+多模态,复杂场景一把抓 图、文、结构化结果,ell一把抓。重点在于它支持Pydantic模型来定义输出格式,并且直接接收图片作为输入。 ```python 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}") ``` 这个例子清楚展现了如何在一次调用中同时处理文本、图像、结构化约束——这在实际项目里是很常见的需求。 #### 6. 简单到不像框架 ell的设计哲学是“和普通Python函数一样”。你在项目里引入它,不需要改变&现有的编码习惯,直接在需要的地方定义和使用即可。 ```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) ``` 没有复杂的链、没有繁杂的管道、没有隐藏的抽象层。你在写Python,同时就是在构造提示工程。 --- 综合来看,LangChain和dspy各有建树,但ell用更简洁的接口、更贴近实际工程需求的设计,找到了一个更舒服的平衡点。无论你是想快速搭建原型,还是需要精细控制提示的迭代演进,ell都值得放进工具箱里尝试一下。
来源:https://www.53ai.com/news/tishicijiqiao/2024101184612.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。