100行代码搞定LLM Agent?!揭秘AI智能体背后的秘密(附代码)

最近啊,这“LLM Agent”(大语言模型智能体)火得不行,到处都能听到。但好多人一说起这玩意儿,就整一堆专业术语,听得人云里雾里的。

我就纳闷了,这 Agent 真有那么玄乎?不就是个能干活的 AI 助手嘛!今天,我就来扒一扒它的底裤,用大白话给大家讲讲,这 Agent 到底是怎么回事儿。保证大家看完都能明白,甚至还能自己动手写一个!

Agent 到底是个啥?

先别管那些复杂的定义,咱们就用人话来说。LLM Agent,说白了,就是一个更聪明的 ChatGPT。它不仅能跟你聊天,还能帮你干活!

null

想象一下,你有这么一个私人助理:

  1. \1. 它能看懂你的需求:你告诉它“帮我查查下周天气”,它就知道你要干啥。
  2. \2. 它能自己做决定:它会想,“要查天气,得先知道你在哪个城市,然后去查天气预报网站”。
  3. \3. 它能采取行动:它真的会去查天气预报网站,把结果告诉你。
  4. \4. 它能总结经验:如果查不到结果,它会告诉你“没查到”,或者问你“你想查哪个城市的天气?”

这,就是 Agent!它能思考、能决策、能行动,还能从结果中学习,是不是很神奇?

别被忽悠了!Agent 其实很简单!

有些公司啊,为了显得自己牛,故意把 Agent 搞得很复杂。但其实呢,Agent 的核心原理,简单到爆!

Agent = 图(Graph)

没错,就这么简单!任何一个 Agent,都可以用一张图来表示。这张图里有啥呢?

  • 节点(Node):就是一个个的小任务。
  • 边(Edge):就是连接这些小任务的箭头,告诉程序下一步该干啥。
  • 循环(Loop):就是让程序能重复执行某些任务。

就这?没了!

不信?我给你看看几个主流 Agent 框架的代码:

  • OpenAI Agents: run.py#L119,这里用图来表示工作流程。
  • Pydantic Agents: _agent_graph.py#L779,这里用图来组织各个步骤。
  • Langchain: agent_iterator.py#L174,这里展示了循环结构。
  • LangGraph: agent.py#L56,这里用了基于图的方法。

你看,这些框架虽然代码很多,但核心思想都是一样的:用图来表示 Agent 的工作流程。

动手写一个 Agent!

说了这么多,咱们来点实际的。我用一个叫 PocketFlow 的小框架,带着大家一步步写一个简单的 Agent。

这 PocketFlow 有啥好呢?它只有 100 行代码!麻雀虽小,五脏俱全。用它来学习 Agent,能让你一眼看穿本质,不会被那些复杂的框架绕晕。

目标:做一个研究助手

咱们要做的这个 Agent,能帮你搜索信息、回答问题。它大概长这样:

  • DecideAction:这是“大脑”,负责决定下一步干啥。
  • SearchWeb:这是“研究员”,负责搜索网页。
  • AnswerQuestion:这是“发言人”,负责把答案告诉你。
第一步:打造“大脑” DecideAction
class DecideAction(Node):
    defprep(self, shared):
        # 从“共享白板”上获取问题和上下文
        context = shared.get("context", "No previous search")
        question = shared["question"]
        return question, context

    defexec(self, inputs):
        question, context = inputs
        # 让 LLM 来决定下一步行动
        prompt = f"""
### CONTEXT
...(省略提示词)...
"""
        response = call_llm(prompt)
        yaml_str = response.split("```yaml")[1].split("```")[0].strip()
        decision = yaml.safe_load(yaml_str)
        return decision

    defpost(self, shared, prep_res, exec_res):
        # 如果决定搜索,就把搜索词记在“共享白板”上
        if exec_res["action"] == "search":
            shared["search_query"] = exec_res["search_query"]
        # 告诉程序下一步该执行哪个节点
        return exec_res["action"]shared["search_query"] = exec_res["search_query"]        # 告诉程序下一步该执行哪个节点        return exec_res["action"]
  • prep:准备阶段,看看之前有没有搜索过,把问题和上下文都准备好。
  • exec:执行阶段,让 LLM 来决定是搜索还是回答。这里用了一个提示词(prompt),告诉 LLM 现在的任务和可选的行动。
  • post:收尾阶段,如果 LLM 决定搜索,就把搜索词记下来,然后告诉程序下一步该干啥。
第二步:打造“研究员” SearchWeb
class SearchWeb(Node):
    defprep(self, shared):
        # 获取搜索词
        return shared["search_query"]

    defexec(self, search_query):
        # 调用 Google 搜索 API (这里需要你自己去申请 API key)
        search_client = GoogleSearchAPI(api_key="GOOGLE_API_KEY")
        search_params = {
            "query": search_query,
            "num_results": 3,
        }
        results = search_client.search(search_params)
        # 格式化搜索结果
        formatted_results = f"Results for: {search_query}\n"
        for result in results:
            formatted_results += f"- {result.title}: {result.snippet}\n"
        return formatted_results

    defpost(self, shared, prep_res, exec_res):
        # 把搜索结果存到“共享白板”上
        previous = shared.get("context", "")
        shared["context"] = previous + "\n\nSEARCH: " + shared["search_query"] + "\nRESULTS: " + exec_res
        # 搜索完,回到“大脑”
        return "decide"
  • prep:准备阶段,拿到搜索词。
  • exec:执行阶段,调用 Google 搜索 API,把结果整理好。
  • post:收尾阶段,把搜索结果存起来,然后告诉程序下一步该执行 DecideAction。

注意: 这里的 GoogleSearchAPI 需要你自己实现,或者用现成的库。你得去 Google Cloud 申请 API key 才能用。

第三步:打造“发言人” AnswerQuestion
class AnswerQuestion(Node):
    defprep(self, shared):
        # 获取问题和所有搜索结果
        return shared["question"], shared.get("context", "")

    defexec(self, inputs):
        question, context = inputs
        # 让 LLM 根据搜索结果回答问题
        prompt = f"""
### CONTEXT
...(省略提示词)...
"""
        return call_llm(prompt)

    defpost(self, shared, prep_res, exec_res):
        # 把答案存到“共享白板”上
        shared["answer"] = exec_res
        # 任务完成!
        return "done"
  • prep:准备阶段,拿到问题和所有搜索结果。
  • exec:执行阶段,让 LLM 用一个提示词来生成答案。
  • post:收尾阶段,把答案存起来,然后告诉程序任务结束。
第四步:把它们串起来!
# 创建节点实例
decide = DecideAction()
search = SearchWeb()
answer = AnswerQuestion()

# 连接节点
decide - "search" >> search
decide - "answer" >> answer
search - "decide" >> decide

# 创建流程
flow = Flow(start=decide)

这段代码,就是把我们刚才写的三个节点,按照预定的流程连接起来。

跑起来看看!
# 提个问题
shared = {"question": "法国的首都是哪里?"}

# 启动流程!
flow.run(shared)

# 看看答案
print(shared["answer"])运行结果:

运行结果:

The capital of France is Paris, which is also known as the City of 
Light.

整个流程走一遍

  1. \1. 用户提问:“法国的首都是哪里?”
  2. \2. DecideAction:“我不知道啊,得查一下。” (决定搜索“法国首都”)
  3. \3. SearchWeb:“我查到了!法国首都是巴黎。” (把搜索结果存起来)
  4. \4. DecideAction:“嗯,现在我知道了,可以回答了。”
  5. \5. AnswerQuestion:“法国的首都是巴黎,它也被称为光之城。”

回顾下

你看,Agent 其实没那么复杂吧?它就是几个节点连起来,按照一定的流程执行任务。

下次你再看到那些复杂的 Agent 框架,别慌!想想老码小张今天讲的,找找里面的节点和连接,看看它们是怎么串起来的。

掌握了这个核心原理,你就能看懂任何 Agent 系统,甚至能自己动手写一个!

课后思考

  1. \1. PocketFlow 只有 100 行代码,功能比较简单。如果你想做一个更强大的 Agent,你觉得可以怎么改进它?
  2. \2. 除了搜索,Agent 还能干很多别的事情。你能想出一些其他的应用场景吗?
  3. \3. 对比一下 LangChain、LangGraph 和 OpenAI Function Calling,它们各自有什么优缺点?
特性LangChainLangGraphOpenAI Function CallingPocketFlow
定位功能全面的 LLM 应用框架专注于构建具有循环和状态的 Agent允许 LLM 模型调用开发者定义的函数极简的 LLM Agent 框架,用于学习和原型验证
核心概念Chains, Agents, Tools, MemoryNodes, Edges, StateGraphFunctions, Parameters, ResponsesNodes, Flow, Shared Store
优点功能丰富,社区活跃,支持多种 LLM 和工具易于理解和调试,适合构建复杂的 Agent 工作流与 OpenAI 模型紧密集成,简化函数调用流程简单易学,代码量少,易于理解 Agent 原理
缺点学习曲线陡峭,抽象层级较高,可能难以调试相对较新,生态系统不如 LangChain 完善仅限于 OpenAI 模型,不够灵活功能有限,不适合生产环境
适用场景需要快速构建各种 LLM 应用的场景需要构建具有复杂状态和循环逻辑的 Agent需要让 OpenAI 模型与外部 API 交互的场景学习 Agent 原理,快速验证想法
代码示例from langchain import ...from langgraph import ...response = openai.ChatCompletion.create(..., functions=...)from pocketflow import ...

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

### 大模型代理(Agent代码实现示例 #### 创建多代理对话应用程序实例 为了创建一个多代理对话应用程序,首先需要安装并配置所需的库。这可以通过Python包管理器pip完成: ```bash pip install autogen ``` 接着,在编写具体的应用程序之前,确保已经设置了必要的环境变量和依赖项[^1]。 #### 初始化代理对象 定义不同类型的代理对于构建复杂的交互场景至关重要。下面是一个简单的例子,展示了如何初始化两个不同的代理:一个是人类用户模拟器;另一个是由大语言模型驱动的服务端代理。 ```python from autogen import AssistantAgent, UserProxyAgent config_list = [ { 'model': "gpt-4", 'api_key': "<your_api_key_here>" } ] # 创建服务端代理 assistant_agent = AssistantAgent( name="assistant", system_message="You are a helpful assistant.", llm_config={"config_list": config_list} ) # 创建用户代理作为客户端角色 user_proxy_agent = UserProxyAgent(name="human_user") ``` 这段代码片段说明了怎样利用`AssistantAgent`类来代表由大型预训练模型支持的智能实体,并通过指定系统消息为其赋予特定为模式。同时,也介绍了`UserProxyAgent`用于模仿真实用户的输入输出过程。 #### 实现任务流程控制逻辑 为了让这些代理之间能够有效地协作解决问题,还需要设计一套合理的通信协议与决策机制。例如,在此案例中实现了从代码请求到最终结果返回的一系列动作序列。 ```python def run_code_generation_task(prompt): """启动一次完整的代码生成功能测试""" # 用户发送编程需求给助手 user_proxy_agent.initiate_chat(assistant_agent, message=prompt) while not user_proxy_agent.done(): response = input("等待下一步指令...\n") # 模拟接收来自用户的进一步指示 if "execute" in response.lower(): # 当收到执命令时尝试运生成的代码 code_to_run = user_proxy_agent.get_last_response() try: exec(code_to_run) # 执接收到的 Python 代码字符串 print(f"\n>>> 成功执:\n{code_to_run}") except Exception as e: error_msg = f"发生错误: {str(e)}" print(error_msg) break elif "stop" in response.lower() or "exit" in response.lower(): print("\n终止当前会话.") break else: continue if __name__ == "__main__": prompt = """ 设计一段函数用来计算斐波那契数列第 n 项 (0 ≤ n ≤ 50),请给出完整可工作的 python 函数定义。 """ run_code_generation_task(prompt) ``` 上述脚本描述了一个典型的工作流,其中包含了向助理询问有关编码帮助的信息、根据反馈调整方案直至满意为止的过程。此外还加入了基本异常处理功能以应对可能出现的问题情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值