
别再说AI取代你!手搓o1版思维链智能体,你也能成为AI时代的弄潮儿! (附超详细教程)
那些看似“无所不能”的大模型,本质上只是强大的语言工具,缺少真正的“思考”能力。一个简单的对话,展示普通大模型和思维链智能体在解决复杂问题时的差异,前者直接给出错误答案,后者一步步推理,最终给出正确答案。让我们一起,手搓智能体,迎接AI时代的新挑战!接下来,我们将手把手教你如何编写代码,构建属于你自己的思维链智能体。我们将从零开始,用最简单易懂的方式,让你也能拥有一个属于自己的“思考型”智能体。你
【引言】
你是否焦虑过,未来AI会取代自己的工作?别慌,与其被动等待,不如主动出击!今天,我将带你踏入AI的神秘世界,手搓一个具备“思考能力”的智能体,让你从AI的“被使用者”华丽转身为“掌控者”! 这不是科幻电影,而是触手可及的现实。
1. AI时代,你真的了解AI吗?
你以为ChatGPT就是AI的全部? 那就大错特错了!那些看似“无所不能”的大模型,本质上只是强大的语言工具,缺少真正的“思考”能力。它们更像是鹦鹉学舌,而非真正的智能。 我们今天要做的,就是突破这个瓶颈,构建一个具备思维链(Chain of Thought)能力的智能体,让AI不再是“复读机”,而是真正的“思考者”。
2. 焦虑?恐惧?不如行动!手搓你的专属AI!
你可能觉得代码遥不可及,觉得AI是高不可攀的技术。但我要告诉你,这篇教程将颠覆你的认知! 我们将从零开始,用最简单易懂的方式,让你也能拥有一个属于自己的“思考型”智能体。
我们的目标是什么?
-
打破AI的神秘感: 不再仰望,而是掌握AI的核心技术。
-
提升职场竞争力: 在AI时代,懂得利用AI工具的人,才能脱颖而出。
-
满足好奇心: 亲手打造AI,体验科技带来的乐趣。
3. 从0开始,手搓你的思维链智能体:
核心代码全公开,无需高深编程基础!
接下来,我们将手把手教你如何编写代码,构建属于你自己的思维链智能体。 别担心,即使你是编程小白,也能轻松上手。
准备工作:
-
环境配置: 安装Python 和必要的库(openai, dotenv, llama-index 等)。
-
获取API Key: 你需要在智谱AI平台申请API Key(别怕,教程会教你)。
-
创建 .env 文件: 填写你的API Key,保护隐私。
核心代码(完整代码如下,请复制粘贴):
代码需要使用智谱ai的apikey,什么?你没有,快点下面的链接注册吧,限时赠送2000万tokens
链接:https://www.bigmodel.cn/invite?icode=SAztz%2BUqPqrsFdep498Qc%2F2gad6AKpjZefIo3dVEQyA%3D
import os
from dotenv import load_dotenv
import json
import re
# 加载环境变量
load_dotenv()
# 从环境变量中读取api_key
api_key = os.getenv('ZISHU_API_KEY1')
if not api_key:
raise ValueError("环境变量 ZISHU_API_KEY1 未设置或为空,请检查 .env 文件!")
base_url = "https://open.bigmodel.cn/api/paas/v4/"
chat_model = "glm-4-flash"
emb_model = "embedding-3"
from openai import OpenAI
from pydantic import Field # 导入Field,用于Pydantic模型中定义字段的元数据
from llama_index.core.llms import (
CustomLLM,
CompletionResponse,
LLMMetadata,
)
from llama_index.core.embeddings import BaseEmbedding
from llama_index.core.llms.callbacks import llm_completion_callback
from typing import List, Any, Generator
# 定义OurLLM类,继承自CustomLLM基类
class OurLLM(CustomLLM):
api_key: str = Field(default=api_key)
base_url: str = Field(default=base_url)
model_name: str = Field(default=chat_model)
client: OpenAI = Field(default=None, exclude=True) # 显式声明 client 字段
def __init__(self, api_key: str, base_url: str, model_name: str = chat_model, **data: Any):
super().__init__(**data)
self.api_key = api_key
self.base_url = base_url
self.model_name = model_name
self.client = OpenAI(api_key=self.api_key, base_url=self.base_url) # 使用传入的api_key和base_url初始化 client 实例
@property
def metadata(self) -> LLMMetadata:
"""Get LLM metadata."""
return LLMMetadata(
model_name=self.model_name,
)
@llm_completion_callback()
def complete(self, prompt: str, **kwargs: Any) -> CompletionResponse:
response = self.client.chat.completions.create(model=self.model_name, messages=[{"role": "user", "content": prompt}])
if hasattr(response, 'choices') and len(response.choices) > 0:
response_text = response.choices[0].message.content
return CompletionResponse(text=response_text)
else:
raise Exception(f"Unexpected response format: {response}")
@llm_completion_callback()
def stream_complete(
self, prompt: str, **kwargs: Any
) -> Generator[CompletionResponse, None, None]:
response = self.client.chat.completions.create(
model=self.model_name,
messages=[{"role": "user", "content": prompt}],
stream=True
)
try:
for chunk in response:
chunk_message = chunk.choices[0].delta
if not chunk_message.content:
continue
content = chunk_message.content
yield CompletionResponse(text=content, delta=content)
except Exception as e:
raise Exception(f"Unexpected response format: {e}")
llm = OurLLM(api_key=api_key, base_url=base_url, model_name=chat_model)
response = llm.stream_complete("你是谁?")
print('res:',response)
# for chunk in response:
# print(chunk, end="", flush=True)
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool
def multiply(a: float, b: float) -> float:
"""Multiply two numbers and returns the product"""
return a * b
def add(a: float, b: float) -> float:
"""Add two numbers and returns the sum"""
return a + b
def main():
multiply_tool = FunctionTool.from_defaults(fn=multiply)
add_tool = FunctionTool.from_defaults(fn=add)
# 创建ReActAgent实例
agent = ReActAgent.from_tools([multiply_tool, add_tool], llm=llm, verbose=True)
response = agent.chat("20+(2*4)等于多少?使用工具计算每一步")
print(response)
if __name__ == "__main__":
main()
代码详解:
-
引入库: 导入必要的库,如openai, dotenv, llama-index等。
-
加载环境变量: 从.env文件中读取API Key。
-
定义OurLLM类: 继承CustomLLM,对接智谱AI的API。
-
定义工具函数: 创建multiply和add函数,让AI具备计算能力。
-
创建ReActAgent: 使用工具和LLM,构建具备思维链能力的Agent。
-
测试Agent: 向Agent提问,验证其“思考能力”。
4. 为什么这个智能体能“思考”?
关键在于思维链(Chain of Thought) 的应用。这个智能体不再直接给出答案,而是会一步步分解问题,逐步推理:
-
观察: 理解用户的问题。
-
思考: 制定解决问题的步骤。
-
行动: 调用工具计算。
-
总结: 给出最终答案。
5. 这不仅仅是代码,更是通往未来的钥匙!
学会构建思维链智能体,你将:
-
掌握AI核心技术,不再是AI的“小白”。
-
拓展职业发展道路,成为AI领域的佼佼者。
-
拥有更强大的工作效率,轻松应对复杂任务。
-
体验科技带来的成就感,开启探索未知的旅程。
6. 现在就行动起来,打造属于你的专属AI吧!
【互动环节】
-
点赞! 如果你觉得这篇文章对你有帮助。
-
评论! 分享你对AI的看法,或者遇到的问题。
-
分享! 让更多人了解AI,拥抱AI。
【结尾】
AI不是洪水猛兽,而是我们强大的工具。与其被动接受,不如主动拥抱。 让我们一起,手搓智能体,迎接AI时代的新挑战!
【特别提示】
本教程仅为入门教程,更多高级应用,请持续关注本账号!
更多推荐
所有评论(0)