大模型的基础知识--使用langgrap工作流自定义function calling

 1.使用agently 实现不依赖模型接口进行Function Calling

背景:因function calling是依赖大模型接口提供支持tool的能力,并不是所有的模型都支持,如千帆模型:https://cloud.baidu.com/doc/qianfan-api/s/3m7of64lb#%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0,可查看具体支持的模型

image

 

使用agently实现不依赖模型接口的Function Calling能力

### 1. 脱离对模型接口的依赖进行Function Calling
from agently    import Agently

Agently.set_settings(
    "OpenAICompatible" ,
    {
        "model" :    "qwen3:4b" ,
        "base_url" :    "http://127.0.0.1:11434/v1/" ,
        "api_key" :    "nothing" ,
    },
)

# 创建一个模型请求对象
llm = Agently.create_agent()

# 使用装饰器快速注册工具
@llm .tool_func
def get_weather(   * , latitude:    float , longitude:    float ):
    """Get current temperature for provided coordinates in celsius."""
    # 上面的Docstring是Python的一种标准注释,可以被自动解析为工具的注释
    return {
        "temperature" :    23 ,
        "weather" :    "Sunny" ,
        "wind_direction" :    "South" ,
        "windy" :    2 ,
    }

@llm .tool_func
def add(   * , a: int , b: int ):
    """返回两个整数加总之和"""
    return a   + b


# 使用.use_tool("<工具名>")明确启用工具
result    = llm.use_tool([   "get_weather" ,"add" ]).   input (   "北京的天气怎么样?" ).start()
print (result)

 在Agently框架内部,自行实现了一套工具调用逻辑,具体流程如下图所示:

image

 因避开了对云端模型服务的依赖,可以在任意模型上使用,但是也有局限:

  • 我只想让模型做工具判断和请求指令的生成,但不想让模型真的去执行指令,怎么办?
  • 我先让模型在信息不足的情况下,反过来先向用户提问,怎么办

这个时候,需要我们把function calling的逻辑展开,做一个自己的function calling

2.关键工具:工作流

2.1 为什么工作流是最适合大模型应用的编排方案?

  • 工作流与测试工作常接触的pipeline相似度很高,都有执行编排,触发,条件,变量等设计
  • 任务复杂,依赖关系:大模型应用往往不只是给模型一个prompt得到答案,而是一个流程:数据检索 → 预处理 →模型调用 →后处理 →可能再调用另一个模型 →最终输出。工作流通过管理任务、服务和数据流以实现解决方案目标。当一个请求可能触发文档检索、多个 LLM 推理、外部 API 调用、结果合成和评估,就需要一个能够管理任务执行、状态管理、依赖、资源优化的系统。这恰恰是一个典型工作流编排的场景。
  • 重用性,标准化,可演化:工作流模型可以让你把常见流程结构抽象出来(如“用户提问→检索上下文→模型生成→后处理”),并在不同应用中复用/调整。对 LLM 项目而言,这意味着在不同业务场景之间可以复用流程模板。相比“每次写 API 调用脚本”,编排工具能提升复用性、可维护性。

 

posted @ 2026-04-14 18:26  sunshine_coast  阅读(8)  评论(0)    收藏  举报