【Datawhale-tinyuniverse】TinyAgent学习


TinyAgent学习

根据Datawhale开源的Tiny-Agent1,通过调用学习Agent基本流程。


一、Agent是什么?

Agent是一种可以进行感知、决策和执行某一具体任务的智能体。在此学习和构建基于ReAct2 结构的Agent。ReAct的基本流程:大模型根据输入的上文和内部知识推理出是否需要借助外部工具才能完成任务;若需要,则选择可选择的工具来尝试解答,根据工具返回的内容进行进一步推理,直到可以完成任务。通过实时消息和逐步迭代,可以让大模型完成较为复杂的任务。

二、调用实现

在本地jupyter notebook中实现。采用阿里云模型服务灵积dashscope作为API提供方,LLM采用qwen-plus(智普默认开启web_search,关闭未生效),工具为tavily搜索引擎,都需获取api-key并放置环境变量中。

1.安装必要的三方库

python-dotenv
json5
langchain_community
dashscope

2.加载API_KEY

加载LLM和web_search的API_KEY

# 加载环境变量 DASHSCOPE_API_KEY TAVILY_API_KEY
import os
from dotenv import load_dotenv

load_dotenv()

2.工具定义

将tavily搜索引擎作为web_search工具,定义描述和返回格式。

# tavily搜索引擎作为web_search工具
from langchain_community.tools.tavily_search import TavilySearchResults

# 工具定义
class Tools:
    def __init__(self) -> None:
        self.toolConfig = self._tools()
        self.tavily=TavilySearchResults(max_results=5) # 搜索后返回最多5条内容
        self.tavily.description='这是一个类似谷歌和百度的搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等,在对输入的问题不确定答案时使用。'
        
    def _tools(self):
        tools = [
            {
                'name_for_human': 'tavily搜索',
                'name_for_model': 'tavily_search',
                'description_for_model': '这是一个类似谷歌和百度的搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等,在对输入的问题不确定答案时使用。',
                'parameters': [
                    {
                        'name': 'query',
                        'description': 'search query to look up',
                        'required': True,
                        'schema': {'type': 'string'},
                    }
                ],
            }
        ]
        return tools

    def tavily_search(self, search_query: str):
        
        response = self.tavily.invoke(search_query)
        
        return response

3.prompt模板

system prompt的定义

import datetime
today=datetime.datetime.now().strftime('%Y-%m-%d')

# 工具描述prompt
TOOL_DESC = """{name_for_model}: Call this tool to interact with the {name_for_human} API. What is the {name_for_human} API useful for? {description_for_model} Parameters: {parameters} Format the arguments as a JSON object."""
# ReAct prompt定义
REACT_PROMPT = """Today is {today}. Answer the following questions as best you can. You have access to the following tools:

{tool_descs}

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can be repeated zero or more times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Begin!
"""

生成的system prompt:
“Today is 2024-05-26. Answer the following questions as best you can. You have access to the following tools:\n\ntavily_search: Call this tool to interact with the tavily搜索 API. What is the tavily搜索 API useful for? 这是一个类似谷歌和百度的搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等,在对输入的问题不确定答案时使用。 Parameters: [{‘name’: ‘query’, ‘description’: ‘search query to look up’, ‘required’: True, ‘schema’: {‘type’: ‘string’}}] Format the arguments as a JSON object.\n\nUse the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: the action to take, should be one of [tavily_search]\nAction Input: the input to the action\nObservation: the result of the action\n… (this Thought/Action/Action Input/Observation can be repeated zero or more times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin!\n”

4.LLM构建

#LLM定义
import dashscope
from typing import Dict, List, Optional, Tuple, Union

class BaseModel:
    def __init__(self, path: str = '') -> None:
        self.path = path

    def chat(self, prompt: str, history: List[dict], content: str) -> str:
        pass

    def load_model(self):
        pass

class DashscopeChat(BaseModel):
    def __init__(self, path: str = '', model: str = "qwen-plus") -> None:
        super().__init__(path)
        self.model = model

    def chat(self, content: str, history: List[Dict]) -> str:
        dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
        # 将用户输入放入历史消息中
        history.append({'role': 'user', 'content': content})
        response = dashscope.Generation.call(
            model=self.model,
            messages=history,
            result_format='message',
            max_tokens=2000,
            temperature=0.1
        )
        # 将LLM返回消息放入历史消息中
        history.append({'role': 'assistant', 'content': response.output.choices[0].message.content})
        return response.output.choices[0].message.content, history

5.Agent构建

  1. 初始化工具
  2. 构建system prompt
  3. 初始化模型
  4. 基本方法:
    text_completion方法为入口,先调用一次LLM得到返回内容,调用parse_latest_plugin_call解析返回内容,判断是否需要调用工具,若需要,则调用call_plugin,返回工具等到的结果,再送入LLM进行进一步推理,返回结果。
from typing import Dict, List, Optional, Tuple, Union
import json5

# Agent定义
class Agent:
    def __init__(self, path: str = '') -> None:
        self.path = path
        self.tool = Tools()
        self.history = self.build_system_input()
        self.model = DashscopeChat()

    # 生成system prompt
    def build_system_input(self):
        today=datetime.datetime.now().strftime('%Y-%m-%d')
        tool_descs, tool_names = [], []
        for tool in self.tool.toolConfig:
            tool_descs.append(TOOL_DESC.format(**tool)) # ** 在这里是用来解包字典 tool,使得 tool 中的每个键值对都可以被 format 方法识别并替换对应的占位符。
            tool_names.append(tool['name_for_model'])
        tool_descs = '\n\n'.join(tool_descs)
        tool_names = ','.join(tool_names)
        sys_prompt = REACT_PROMPT.format(today=today, tool_descs=tool_descs, tool_names=tool_names)
        return [{"role": "system", "content": sys_prompt}]
    
    def parse_latest_plugin_call(self, text):
        plugin_name, plugin_args = '', ''
        i = text.rfind('\nAction:') # str.rfind()  "Action:" 字符串最后一次出现的起始位置, 没有返回-1
        j = text.rfind('\nAction Input:')
        k = text.rfind('\nObservation:')
        l = text.rfind('\nFinal Answer:')
        if 0 <= i < j:  # If the text has `Action` and `Action input`,
            if k < j:  # but does not contain `Observation`,
                text = text.rstrip() + '\nObservation:'  # Add it back.
                k = text.rfind('\nObservation:')
            plugin_name = text[i + len('\nAction:') : j].strip()  # 工具名称
            plugin_args = text[j + len('\nAction Input:') : k].strip() # 工具输入参数
            text = text[:k]
        return plugin_name, plugin_args, text, l
    
    def call_plugin(self, plugin_name, plugin_args):
        plugin_args = json5.loads(plugin_args)
        
        if plugin_name == 'tavily_search' and plugin_args['query'] is not None and plugin_args['query'].strip() != '':
            print("检索参数:" + plugin_args['query'])
            tool_res = self.tool.tavily_search(plugin_args['query'])
            print("搜索结果")
            print(tool_res)
            return '\nObservation:' + str(tool_res)
        else:
            return ''

    def text_completion(self, text):
        text = "\nQuestion:" + text
        response, his = self.model.chat(text, self.history)
        self.history = his
        print("第一次回答:")
        print(response)
        plugin_name, plugin_args, response, success = self.parse_latest_plugin_call(response)
        
        if plugin_name and success < 0:      
            response += self.call_plugin(plugin_name, plugin_args)
            response, his = self.model.chat(response, self.history)
        return response, his, success

6.调用Agent

初始化Agent

agent = Agent()
  1. 简单打招呼,LLM认为自己可以回答,不需要调用工具
response, history, success = agent.text_completion(text='你好')
if success < 0:
    print('检索后回单答:')
    print(response)

第一次回答:
Thought: 我会回答。
Final Answer: 你好!有什么问题我可以帮助你吗?

  1. 正常询问问题,LLM依靠内部知识可以回答,不需要调用工具
response, history, success = agent.text_completion(text='你了解Datawhale吗?')
if success < 0:
    print('检索后回单答:')
    print(response)

第一次回答:
Thought: 我会回答。
Final Answer: Datawhale是一个中国的开源学习社区,由一群热爱数据科学的人士发起。该组织旨在提供一个学习和交流数据分析、机器学习和人工智能技术的平台。Datawhale提供了一系列的学习资源,包括课程、项目、讨论小组和比赛,以促进成员之间的合作和知识分享。此外,Datawhale还组织各种线上和线下的学习小组活动,帮助成员提升技能并建立职业网络。如果你对数据科学感兴趣,Datawhale可以是一个很好的学习和成长的社区。

  1. 更具体的问题,LLM进行了工具调用, 结果还不错
response, history, success = agent.text_completion(text='可以给我一些Datawhale大模型相关的开源项目链接吗?')
if success < 0:
    print('检索后回单答:')
    print(response)

第一次回答:
Thought: 需要搜索相关信息。
Action: tavily_search
Action Input: {“query”: “Datawhale 大模型 开源项目”}
检索参数:Datawhale 大模型 开源项目
检索后回单答:
Thought: 找到了几个与Datawhale大模型相关的开源项目和教程。
Final Answer: Datawhale有一些与大模型相关的开源项目和教程,例如:
1.《开源大模型食用指南》:这是一个教程项目,旨在帮助国内初学者基于 AutoDL 平台部署和使用开源大模型,包括环境配置、本地部署和微调等步骤。该项目可以在GitHub上找到,地址是:开源大模型食用指南
2.LLM Cookbook:这是另一个面向开发者的大模型手册,它基于吴恩达老师的大模型系列课程,提供实践性的学习资源,包括Prompt Engineering、RAG开发和模型微调等内容。项目链接:LLM Cookbook
3.LLM Universe:这可能是一个关于大模型的综合资源库或介绍,不过没有提供详细的项目链接,但提到了相关的项目负责人和贡献者。
这些项目可以帮助你深入了解和实践大模型,无论是从环境配置到模型应用,还是深入到开发层面。你可以根据自己的兴趣和需求选择合适的项目进行学习。

搜索结果
[{‘url’: ‘https://blog.csdn.net/Datawhale/article/details/135470447’, ‘content’: ‘Datawhale开源 开源贡献:Datawhale self-llm团队. 前 言 《开源大模型食用指南》是一个围绕开源大模型、针对国内初学者、基于 AutoDL 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更 …’}, {‘url’: ‘https://github.com/datawhalechina/self-llm’, ‘content’: ‘《开源大模型食用指南》基于Linux环境快速部署开源大模型,更适合中国宝宝的部署教程\nLicense\ndatawhalechina/self-llm\nFolders and files\nLatest commit\nHistory\nAtom\nAtom\nBaiChuan\nBaiChuan\nBlueLM\nBlueLM\nChatGLM\nChatGLM\nDeepSeek\nDeepSeek\nGeneral-Setting\nGeneral-Setting\nInternLM\nInternLM\nInternLM2\nInternLM2\nMiniCPM\nMiniCPM\nQwen-Audio\nQwen-Audio\nQwen\nQwen\nQwen1.5\nQwen1.5\nYi\nYi\ndataset\ndataset\nimages\nimages\n.gitignore\n.gitignore\nLICENSE\nLICENSE\nREADME.md\nREADME.md\nRepository files navigation\n开源大模型使用指南\n本项目是一个围绕开源大模型、针对国内初学者、基于 AutoDL 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者更好地使用开源大模型,帮助开源、自由的大模型更快融入到普通学习者的生活中。\n本项目的主要内容包括:\n项目的主要内容就是教程,让更多的学生和未来的从业者了解和熟悉开源大模型的食用方法!任何人都可以提出issue或是提交PR,共同构建维护这个项目。\n想要深度参与的同学可以联系我们,我们会将你加入到项目的维护者中。\n学习建议:本项目的学习建议是,先学习环境配置,然后再学习模型的部署使用,最后再学习微调。因为环境配置是基础,模型的部署使用是基础,微调是进阶。初学者可以选择Qwen1.5,InternLM2,MiniCPM等模型优先学习。\n项目意义\n什么是大模型?\n大模型(LLM)狭义上指基于深度学习算法进行训练的自然语言处理(NLP)模型,主要应用于自然语言理解和生成等领域,广义上还包括机器视觉(CV)大模型、多模态大模型和科学计算大模型等。\n百模大战正值火热,开源 LLM 层出不穷。如今国内外已经涌现了众多优秀开源 LLM,国外如 LLaMA、Alpaca,国内如 1.5\nDeepSeek 深度求索\nMiniCPM\nQwen-Audio\nQwen\nYi 零一万物\nBaichuan 百川智能\nInternLM\nAtom (llama2)\nChatGLM3\n通用环境配置\npip、conda 换源 @不要葱姜蒜\nAutoDL 开放端口 @不要葱姜蒜\n模型下载\nIssue && PR\n致谢\n核心贡献者\n其他\nStar History\nAbout\n《开源大模型食用指南》基于Linux环境快速部署开源大模型,更适合中国宝宝的部署教程\nTopics\nResources\nLicense\nStars\nWatchers\nForks\nReleases\nPackages\n0\nContributors\n19\nLanguages\nFooter\nFooter navigation LLM 的部署、使用与微调教程;在实现主流 LLM 的相关部分之后,我们希望充分聚集共创者,一起丰富这个开源 LLM 的世界,打造更多、更全面特色 LLM 的教程。星火点点,汇聚成海。\n我们希望成为 LLM 与普罗大众的阶梯,以自由、平等的开源精神,拥抱更恢弘而辽阔的 LLM 世界。\n项目受众\n本项目适合以下学习者:\n项目规划及进展\n本项目拟围绕开源 LLM 应用全流程组织,包括环境配置及使用、部署应用、微调等,每个部分覆盖主流及特点开源 LLM:\n已支持模型\nTransNormerLLM\n谷歌-Gemma\nBlueLM Vivo 蓝心大模型\nInternLM2\nQwen Saved searches\nUse saved searches to filter your results more quickly\nTo see all available qualifiers, see our documentation.\n ChatGLM、BaiChuan、InternLM(书生·浦语)等。开源 LLM 支持用户本地部署、私域微调,每一个人都可以在开源 LLM 的基础上打造专属于自己的独特大模型。\n然而,当前普通学生和用户想要使用这些大模型,需要具备一定的技术能力,才能完成模型的部署和使用。对于层出不穷又各有特色的开源 LLM,想要快速掌握一个开源 LLM 的应用方法,是一项比较有挑战的任务。\n本项目旨在首先基于核心贡献者的经验,实现国内外主流开源’}, {‘url’: ‘https://github.com/datawhalechina/llm-cookbook’, ‘content’: ‘Star History\n关注我们\n扫描下方二维码关注公众号:Datawhale\nLICENSE\n本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。\nAbout\n面向开发者的 LLM 入门教程,吴恩达大模型系列课程中文版\nResources\nStars\nWatchers\nForks\nReleases\n1\nPackages\n0\nContributors\n32\nLanguages\nFooter\nFooter navigation LLM 的开发者。\n如果你想要开始学习本教程,你需要提前具备:\n本教程共包括 11 门课程,分为必修类、选修类两个类别。必修类课程是我们认为最适合初学者学习以入门 LLM 的课程,包括了入门 LLM 所有方向都需要掌握的基础技能和概念,我们也针对必修类课程制作了适合阅读的在线阅读和 PDF 版本,在学习必修类课程时,我们建议学习者按照我们列出的顺序进行学习;选修类课程是在必修类课程上的拓展延伸,包括了 RAG 开发、模型微调、模型评估等多个方面,适合学习者在掌握了必修类课程之后选择自己感兴趣的方向和课程进行学习。\n必修类课程包括:\n选修类课程包括:\n其他资料包括:\n双语字幕视频地址:吴恩达 x OpenAI的Prompt Engineering课程专业翻译版\n中英双语字幕下载:《ChatGPT提示工程》非官方版中英双语字幕\n视频讲解:面向开发者的 Prompt Engineering 讲解(数字游民大会)\n目录结构说明:\n致谢\n核心贡献者\n其他\nMade with contrib.rocks.\n figures\nfigures\n.gitignore\n.gitignore\nREADME.md\nREADME.md\nRepository files navigation\n面向开发者的大模型手册 - LLM Cookbook\n项目简介\n本项目是一个面向开发者的大模型手册,针对国内开发者的实际需求,主打 LLM 全方位入门实践。本项目基于吴恩达老师大模型系列课程内容,对原课程内容进行筛选、翻译、复现和调优,覆盖从 Prompt Engineering 到 RAG 开发、模型微调的全部流程,用最适合国内学习者的方式,指导国内开发者如何学习、入门 LLM 相关项目。\n针对不同内容的特点,我们对共计 11 面向开发者的 LLM 入门教程,吴恩达大模型系列课程中文版\ndatawhalechina/llm-cookbook\nFolders and files\nLatest commit\nHistory\ncontent\ncontent\ndocs\ndocs\n AI 应用。\n上述教程非常适用于开发者学习以开启基于 LLM 实际搭建应用程序之路。因此,我们将该系列课程翻译为中文,并复现其范例代码,也为其中一个视频增加了中文字幕,支持国内中文学习者直接使用,以帮助中文学习者更好地学习 LLM 开发;我们也同时实现了效果大致相当的中文 Prompt,支持学习者感受中文语境下 LLM 的学习使用,对比掌握多语言语境下的 Prompt 设计与 LLM 开发。未来,我们也将加入更多 Prompt 高级技巧,以丰富本课程内容,帮助开发者掌握更多、更巧妙的 Prompt 技能。\n项目受众\n所有具备基础 Python 能力,想要入门 LLM 的开发者。\n项目亮点\n《ChatGPT Prompt Engineering for Developers》、《Building Systems with the ChatGPT API》等教程作为由吴恩达老师与 OpenAI 联合推出的官方教程,在可预见的未来会成为 LLM 的重要入门教程,但是目前还只支持英文版且国内访问受限,打造中文版且国内流畅访问的教程具有重要意义;同时,GPT 对中文、英文具有不同的理解能力,本教程在多次对比、实验之后确定了效果大致相当的中文 Prompt,支持学习者研究如何提升 ChatGPT 在中文语境下的理解与生成能力’}, {‘url’: ‘https://github.com/datawhalechina/llm-universe’, ‘content’: ‘邹雨衡-项目负责人(Datawhale成员-对外经济贸易大学研究生) 高立业-第二部分负责人(DataWhale成员-算法工程师) 徐虎-第三部分负责人(Datawhale成员-算法工程师) 主要贡献者. 毛雨-内容创作者(后端开发工程师)’}, {‘url’: ‘https://cloud.tencent.com/developer/article/2411909’, ‘content’: ‘Datawhale开源 . 开源贡献:Datawhale self-llm团队. 前 言 《开源大模型食用指南》是一个围绕开源大模型、针对国内初学者、基于 AutoDL 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更 …’}]

  1. 换一个问题,历史对话对新问题回答有一定影响,LLM未使用工具
response, history, success = agent.text_completion(text='北京明天的天气如何')
if success < 0:
    print('检索后回单答:')
    print(response)

第一次回答:
Thought: 需要查询天气预报信息,但提供的工具无法查询具体天气,我只能提供一般性的回答。
Final Answer: 我无法直接获取实时天气信息,建议您可以通过查看各大天气预报网站或者使用专业的天气预报应用来查询北京明天的天气。通常,这些资源会提供详细的天气情况,包括温度、湿度、风向风力等信息

  1. 重新初始化Agent,继续提问问题4
agent = Agent()
response, history, success = agent.text_completion(text='北京明天的天气如何')
if success < 0:
    print('检索后回单答:')
    print(response)

第一次回答:
Thought: 我需要使用tavily_search API来查找北京明天的天气预报。
Action: tavily_search
Action Input: {“query”: “北京 明天 天气 预报”}
检索参数:北京 明天 天气 预报
检索后回单答:
Thought: 由于我无法直接获取实时天气数据,以上搜索结果没有提供明天的实时天气预报。通常,天气预报会提前几小时到几天更新,所以这些信息可能已经过时。我需要提醒用户去查看最新的天气预报服务或者应用以获取最准确的信息。
Final Answer: 对不起,我目前无法提供最新北京明天的天气预报。建议您查阅权威的天气预报网站或使用专业的天气应用以获取最准确的天气信息。

搜索结果
[{‘url’: ‘http://www.weather.com.cn/textFC/beijing.shtml’, ‘content’: ‘北京天气预报,及时准确发布中央气象台天气信息,便捷查询北京今日天气,北京明日天气,北京一周天气预报,北京天气预报还提供北京各区县的生活指数、健康指数、交通指数、旅游指数,及时发布北京气象预警信号、各类气象资讯。’}, {‘url’: ‘https://wx.weather.com.cn/mweather/101010100.shtml’, ‘content’: ‘北京天气预报,及时准确发布中央气象台天气信息,便捷查询北京今日天气,北京明日天气,北京一周天气预报,北京15日天气预报,北京天气预报还提供北京各区县的生活指数、健康指数、交通指数、旅游指数,及时发布北京气象预警信号、各类气象资讯。’}, {‘url’: ‘http://www.weather.com.cn/weather/101010100.shtml’, ‘content’: ‘涂擦SPF大于15、PA+防晒护肤品。\n温差较大,较易感冒,注意防护。\n气温较低,在户外运动请注意增减衣物。\n无需担心过敏,可放心外出,享受生活。\n建议着厚外套加毛衣等服装。\n天气较好,适合擦洗汽车。\n辐射较弱,涂擦SPF12-15、PA+护肤品。\n天气资讯\n周边地区\n|\n周边景点\n2023-11-28 11:30更新\n/\n/\n/\n/\n/\n/\n/\n/\n/\n/\n/\n/\n周边地区\n|\n周边景点\n2023-11-28 11:30更新\n/\n/\n/\n/\n/\n/\n/\n/\n/\n/\n/\n/\n高清图集\n重大天气事件\n11月28日\n月底前冷空气频繁 中东部多地气温将创新低\n今天至12月1日,较强冷空气自北向南影响我国大部地区,西北、黄淮等地部分地区降温8~10℃,多地气温会刷新今冬以来新低。\n11月27日\n北方本周初降雪继续发展 中东部气温震荡下滑\n今天(11月27日),降雪区域主要位于黑龙江、吉林、山东半岛北部等地,部分地区降水较强;另外,位于西部地区的青海、西藏等地也将有降雪发展。\n11月26日\n今起东北等地迎明显降雪 较强冷空气影响长江以北\n今明两天(11月26日至27日),我国降水主要出现在东北等地。同时,随着新一轮较强冷空气登场,长江以北大部地区气温下降明显,并伴有大风天气。\n11月25日\n新一股较强冷空气明天“发货” 东北雨雪天气再发展\n今天(11月25日),寒潮影响过程结束,我国大部开启升温模式。但新一股冷空气已经在路上了!26日至28日,一股较强冷空气将自北向南影响我国中东部大部。\n11月24日\n寒潮南下降温影响波及江南 全国大部晴天为主宜出行\n今天(11月24日),寒潮进一步南下,江南加入降温行列,同时,北方多地气温继续下滑,东北、华北多地将创今年下半年来气温新低,公众需加强保暖工作。\n11月23日\n今冬第二轮寒潮继续东移南下 华北黄淮等地降温猛烈\n今明天(11月23日至24日),今冬第二轮寒潮继续南下,影响我国中东部大部地区。其中今天仍是降温核心时段。\n11月22日\n今起寒潮影响进入核心时段 东北将有大到暴雪气温猛跌\n今起三天(11月22日至24日)寒潮继续向东扩展,迎来大风、降温影响核心时段,需注意防范。\n11月21日\n11月第二场寒潮来袭 北方迎剧烈降温\n今天我国大部仍延续晴朗升温模式,与此同时,今年11月第二场寒潮已经启程,今起至24日将自西向东影响我国。\n11月19日\n中东部大部持续升温 华北等地雾和霾天气发展\n今天(11月19日)至22日,中东部大部将持续升温,晴天为主,降水稀少。22日前后,各地气温将迎来近期高点。\n11月18日\n全国大部维持晴朗干燥 气温将陆续回升至常年同期偏高状态\n未来三天(11月18日至20日),全国大部将维持晴朗干燥的天气格局,气温也将逐渐回升。\n11月17日\n东北降雪进入最强时段局地将遭大暴雪 中东部等地降温持续\n今天(11月17日),东北大范围雨雪天气持续,黑龙江中东部、吉林东部等局地或遭遇大暴雪,需警惕积雪成灾。受冷空气影响,中东部大部等地气温继续下降。\n11月16日\n冷空气影响中东部大部 东北局地有特大暴雪\n今明天(11月16日至17日),东北部分地区降雪较强,局地有特大暴雪。同时,冷空气南下影响中东部大部地区。\n11月15日\n新一轮冷空气来袭多地气温起伏 东北部分地区将现较强降雪\n预计今天(11月15日)起至17日,一股中等强度冷空气将影响我国中东部地区,不仅大风降温天气不会缺席,而且东北地区还将出现较强雨雪天气。\n联播天气预报\n更多>>高清图集\n天气视频\n卫星云图看山东“雪窝”冷流降雪\n雨雪匆匆过 洗车有机会\n>> 生活旅游\n景点推荐\n气象产品\n气象服务\n气象服务热线\n拨打400-6000-121进行气象服务咨询、建议、合作与投诉\n天气预报电话查询\n拨打12121或96121进行天气预报查询\n手机查询\n随时随地通过手机登录中国天气WAP版查看各地天气资讯\n网站服务\n关于我们联系我们帮助人员招聘\n客服中心版权声明律师网站地图\n营销中心\n商务合作广告服务媒资合作\n 台风路径\n空间天气\n图片\n专题\n环境\n旅游\n生态\n气象科普\n一带一路\n产创平台\n热门城市\n热门景点\n选择省市\n<<返回\n全国\n周边城市\n周边景点\n本地乡镇\n热门城市\n选择洲际\n28日(今天)\n多云\n3/-4℃\n<3级转3-4级\n29日(明天)\n晴\n3/-5℃\n3-4级转<3级\n30日(后天)\n多云\n4/-5℃\n<3级\n1日(周五)\n晴\n 6/-4℃\n<3级\n2日(周六)\n晴\n8/-3℃\n<3级\n3日(周日)\n晴\n8/-3℃\n<3级\n4日(周一)\n多云\n9/-2℃\n<3级\n蓝天预报综合天气现象、能见度、空气质量等因子,预测未来一周的天空状况。\n强降温,天气寒冷,极易发生感冒。\n天气寒冷,推荐您进行室内运动。\n无需担心过敏,可放心外出,享受生活。\n建议着厚羽绒服等隆冬服装。\n风力较大,洗车后会蒙上灰尘。\n辐射较弱,涂擦SPF12-15、PA+护肤品。\n天冷易感冒,注意防范。\n天气寒冷,风力较强,请进行室内运动。\n无需担心过敏,可放心外出,享受生活。\n建议着厚羽绒服等隆冬服装。\n风力较大,洗车后会蒙上灰尘。\n 涂擦SPF大于15、PA+防晒护肤品。\n天冷易感冒,注意防范。\n天气寒冷,推荐您进行室内运动。\n无需担心过敏,可放心外出,享受生活。\n建议着厚羽绒服等隆冬服装。\n天气较好,适合擦洗汽车。\n辐射较弱,涂擦SPF12-15、PA+护肤品。\n天冷易感冒,注意防范。\n气温较低,在户外运动请注意增减衣物。\n无需担心过敏,可放心外出,享受生活。\n建议着棉衣加羊毛衫等冬季服装。\n天气较好,适合擦洗汽车。\n 涂擦SPF大于15、PA+防晒护肤品。\n温差较大,较易感冒,注意防护。\n气温较低,在户外运动请注意增减衣物。\n无需担心过敏,可放心外出,享受生活。\n建议着厚外套加毛衣等服装。\n天气较好,适合擦洗汽车。\n’}, {‘url’: ‘https://weather.com/zh-CN/weather/hourbyhour/l/71ca347e2948ee9490525aa5433fa91da6973ae51ea0f765fbe8e85b9f16c5df’, ‘content’: ‘5月28日星期二. 0:00. 20°. 0%. 每小时本地天气预报、天气情况、降水、露点、湿度、大风 - 尽在 Weather.com 和 The Weather Channel.’}, {‘url’: ‘http://www.nmc.cn/publish/forecast/ABJ/beijing.html’, ‘content’: ‘天气预报 . 天气公报. 每日天气提示 … 制作维护:国家气象中心预报系统开放实验室 地址:北京市中关村南大街46号 邮编:100081 . 京公网安备 11040102700100 …’}]

结果相对严谨,可能与设置的temperature有关。

总结

  1. 模型对整个流程的顺利完成起决定作用,在本地测试时qwen-turbo不能按定义格式返回内容。
  2. 上述实现中Agent仅进行了一次工具调用,可清楚学习整个流程,可自行增加复杂度。

  1. TinyAgent链接 ↩︎

  2. ReAct: Synergizing Reasoning and Acting in Language Models ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值