【大模型应用开发-实战】(七)手把手入门智普清言官方API调用-使用langchain agent方式调用(四)

目录

 一、准备工作

 二、完整代码

1、依赖安装

2、新建.env文件

3、核心调用代码

三、测试运行

1、运行结果


 一、准备工作

准备工作参考:

【大模型应用开发-实战】(四)手把手入门智普清言官方API调用-准备工作(一)-优快云博客

使用curl、openAI、zhipuai依赖库调用,参考

【大模型应用开发-实战】(五)手把手入门智普清言官方API调用-使用openai、zhipu sdk和requests调用(二)-优快云博客

使用langchain方式调用,参考

https://forestlong.blog.youkuaiyun.com/article/details/148980146?spm=1011.2415.3001.5331

 二、完整代码

1、依赖安装

requirements.txt 

langchain==0.3.26
langchain-community==0.3.26
langchain_openai==0.3.27
langchainhub==0.1.21
httpx_sse==0.4.1
requests==2.32.4
python-dotenv==1.1.1

pip install -r requirements.txt 

2、新建.env文件

ZHIPUAI_API_KEY = "zhipuai_api_key"
LANGCHAIN_API_KEY = "zhipuai_api_key"

3、核心调用代码

chagtlm_langchain_with_agent.py
# 完整解决方案:LangChain Agent + 智谱清言童话创作系统
from dotenv import load_dotenv
import os
from langchain.agents import AgentExecutor, Tool, create_react_agent
from langchain_community.chat_models import ChatZhipuAI
from langchain import hub

# 1. 环境配置(API密钥存储在.env文件)
load_dotenv()
ZHIPU_API_KEY = os.getenv("ZHIPUAI_API_KEY")

# 2. 初始化智谱GLM-4模型(创造性参数优化)
zhipu_llm = ChatZhipuAI(
    model_name="glm-4",
    temperature=0.9,  # 提高创造性
    max_tokens=2500,  # 保证长故事完整
    api_key=ZHIPU_API_KEY
)


# 3. 定义故事评估工具(确保教育价值)
def story_evaluator(story: str) -> str:
    """评估故事的教育元素和趣味性"""
    kindness_count = story.count("善良") + story.count("爱心")
    magic_elements = sum(1 for word in ["魔法", "精灵", "会说话的"] if word in story)
    return f"""评估通过!故事包含:
- 善良主题出现次数:{kindness_count}
- 奇幻元素数量:{magic_elements}
- 互动句式:{"有" if "你猜怎么着" in story else "需增加"}"""

def langchain_call_with_agent():
    # 4. 构建工具集(可扩展添加更多工具)
    tools = [
        Tool(
            name="StoryEvaluator",
            func=story_evaluator,
            description="用于检测故事的教育价值和儿童吸引力"
        )
    ]

    # 5. 创建防错提示模板(自动处理变量依赖)
    prompt = hub.pull("hwchase17/react-chat")  # 使用LangChain官方预置模板
    prompt = prompt.partial(
        tools="\n".join([f"{tool.name}: {tool.description}" for tool in tools]),
        tool_names=", ".join([tool.name for tool in tools]),
        chat_history=""  # 显式提供空聊天历史避免缺失变量[2,4](@ref)
    )

    # 6. 构建童话创作Agent
    story_agent = create_react_agent(
        llm=zhipu_llm,
        tools=tools,
        prompt=prompt
    )

    # 7. 配置执行器(带错误处理)
    agent_executor = AgentExecutor(
        agent=story_agent,
        tools=tools,
        verbose=True,
        max_iterations=3,
        handle_parsing_errors=True  # 防止解析错误中断[3](@ref)
    )

    # 8. 执行故事生成(提供完整输入变量)
    try:
        print("🧙 童话魔法师开始创作...")
        result = agent_executor.invoke({
            "input": """作为童话大王,请创作800字左右的奇幻故事,要求:
    1. 主角:拥有魔法画笔的小女孩
    2. 反派:偷走颜色的灰影怪
    3. 核心寓意:善良能创造奇迹
    4. 必须包含3次互动问题如'你猜怎么着?'
    5. 分5个章节:相遇-危机-选择-奇迹-领悟
    6. 故事长度约200字""",
            "chat_history": []  # 确保提供所有必需变量[2](@ref)
        })

        print("\n✨ 原创童话故事 ✨")
        print(result["output"])

    except Exception as e:
        print(f"魔法失效了!错误信息: {str(e)}")

if __name__ == '__main__':
    langchain_call_with_agent()

三、测试运行

1、运行结果

### 如何调用智普清 API #### 调用概述 智普清 API 提供了一种通过 HTTP 请求的方式与模型交互的方法。开发者可以通过发送 POST 请求来实现对话功能,请求体中需包含 `api_key` 和其他必要参数[^1]。 #### 参数说明 以下是调用过程中可能涉及的关键参数及其作用: - **api_key**: 用户的身份验证密钥,用于确认访问权限。 - **timestamp**: 时间戳,通常表示当前时间的毫秒数,防止重放攻击。 - **exp**: 过期时间,定义该请求的有效期限(单位为毫秒),超过此时间则请求失效[^4]。 #### Python 实现示例 以下是一个基于 Python 的简单调用示例: ```python import requests import json from datetime import datetime if __name__ == "__main__": url = "https://open.bigmodel.cn/api/v1/chat" api_key = "your_api_key_here" # 替换为实际的API Key headers = { 'Content-Type': 'application/json' } timestamp = int(datetime.now().timestamp() * 1000) # 当前时间的时间戳 exp = timestamp + (5 * 60 * 1000) # 设置过期时间为5分钟后 data = { "api_key": api_key, "timestamp": timestamp, "exp": exp, "query": "你好,介绍一下你自己吧", "persona": "你是Python编程工作者。", } response = requests.post(url, headers=headers, data=json.dumps(data)) result = response.json() print(result["answer"]) ``` 上述代码展示了如何构建并发送一个标准的 POST 请求到智普清 API 接口,并获取返回的结果[^2]。 #### Java 实现示例 对于使用 Java 开发的应用程序,可以参考如下代码片段完成 API 调用操作: ```java import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class ZhiPuAPICaller { public static void main(String[] args) throws Exception { String apiUrl = "https://open.bigmodel.cn/api/v1/chat"; URL url = new URL(apiUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); long timestamp = System.currentTimeMillis(); // 获取当前时间戳 long expirationTime = timestamp + (5L * 60L * 1000L); // 设定有效时长 String apiKey = "your_api_key"; // 替换为您的真实API Key String inputJson = "{ \"api_key\": \"" + apiKey + "\",\"timestamp\":" + timestamp + ",\"exp\":" + expirationTime + ",\"query\":\"你好\",\"persona\":\"你是Java开发工程师.\"}"; try(OutputStream os = conn.getOutputStream()) { byte[] input = inputJson.getBytes("utf-8"); os.write(input, 0, input.length); } int code = conn.getResponseCode(); if(code == 200){ System.out.println("成功接收服务器响应!"); }else{ System.err.println("错误:" + code); } } } ``` 以上代码实现了向智普清 API 发送数据包的功能,并处理了基本的成功与否判断逻辑[^3]。 #### 注意事项 在正式环境中部署之前,请务必确保已妥善保管好自己的 `api_key` 并遵循官方的安全建议以保护账户安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

forest_long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值