首页
/ MadcowD/ell项目中的工具使用机制详解

MadcowD/ell项目中的工具使用机制详解

2025-07-07 08:21:25作者:邵娇湘

概述

MadcowD/ell项目中的工具使用功能是一个强大的特性,它允许语言模型与外部函数和服务进行交互。这个功能使得开发者能够创建更加动态和交互式的语言模型程序(LMPs),这些程序可以执行操作、检索信息并根据实时数据做出决策。

当前状态说明

需要注意的是,当前工具使用功能仍处于beta测试阶段,API可能会在未来版本中发生重大变化。在生产环境中使用时应格外谨慎。

工具定义基础

在ell中,工具是通过@ell.tool()装饰器定义的Python函数。这个装饰器会将普通函数转换为语言模型可使用的工具。

基本示例

@ell.tool()
def create_claim_draft(claim_details: str,
                       claim_type: str,
                       claim_amount: float,
                       claim_date: str = Field(description="The date of the claim in the format YYYY-MM-DD.")):
    """Create a claim draft. Returns the claim id created."""
    print("Create claim draft", claim_details, claim_type, claim_amount, claim_date)
    return "claim_id-123234"

模式生成机制

ell使用函数检查和Pydantic模型的组合来生成工具模式:

  1. 从函数签名中提取参数信息
  2. 使用类型注解确定参数类型
  3. 利用Pydantic的Field添加参数元数据
  4. 创建Pydantic模型来表示工具参数

生成的模式会被转换为与OpenAI API兼容的格式。

在LMP中使用工具

要在语言模型程序中使用工具,需要在@ell.complex装饰器中指定它们:

@ell.complex(model="gpt-4o", tools=[create_claim_draft], temperature=0.1)
def insurance_claim_chatbot(message_history: List[Message]) -> List[Message]:
    return [
        ell.system("""You are an insurance adjuster AI..."""),
    ] + message_history

单步工具使用

单步工具使用是指语言模型在执行过程中决定使用一次工具。典型流程包括:

  1. LMP接收输入
  2. 生成带有工具调用的响应
  3. 执行工具调用
  4. 返回结果

示例:获取网站内容

@ell.tool()
def get_html_content(url: str = Field(description="The URL to get the HTML content of...")):
    """Get the HTML content of a URL."""
    response = requests.get("https://" + url)
    soup = BeautifulSoup(response.text, 'html.parser')
    return soup.get_text()[:100]

@ell.complex(model="gpt-4o", tools=[get_html_content])
def get_website_content(website: str) -> str:
    """You are an agent that can summarize the contents of a website."""
    return f"Tell me what's on {website}"

多步工具使用

多步工具使用涉及更复杂的交互,语言模型可能会在对话或处理流程中多次使用工具。ell提供了call_tools_and_collect_as_message()辅助函数来简化这个过程。

并行工具执行

ell支持多个工具调用的并行执行:

if response.tool_calls:
    tool_results = response.call_tools_and_collect_as_message(parallel=True, max_workers=3)

未来特性展望

急切模式(Eager Mode)

未来可能引入的"急切模式"将自动执行语言模型生成的工具调用,在后台创建多步交互,从而简化开发过程。

工具规范自动生成

理想情况下,工具规范应该能够直接从工具源代码推断出来。ell可以提取任何Python函数的词法闭包源,实现由另一个语言模型自动生成规范的功能。

自动生成示例

@ell.tool(autogenerate=True)
def search_twitter(query, n=7):
    ...

这将生成相应的工具规范,无需用户手动指定每个参数和工具描述。

挑战与解决方案

  1. 意见性问题:可以通过要求用户实现自己的工具规范生成器来解决
  2. 可重复性问题:可以通过序列化生成的工具规范及其版本来解决

通过要求规范生成器使用temperature=0.0并保持接近确定性的输出,可以确保生成的工具规范在不同运行中保持一致。

总结

MadcowD/ell项目中的工具使用功能为语言模型程序提供了强大的扩展能力,使它们能够与现实世界进行交互。虽然当前功能仍在开发中,但其设计理念和未来发展方向展示了巨大的潜力。开发者可以利用这些功能创建更加智能和交互式的应用,同时需要注意当前版本的实验性质。