您的位置:首页 > 健康 > 美食 > 六安网站建设费用_北京网站设计 培训_上海谷歌seo推广公司_东莞网站建设排名

六安网站建设费用_北京网站设计 培训_上海谷歌seo推广公司_东莞网站建设排名

2025/3/18 21:50:49 来源:https://blog.csdn.net/m0_48468018/article/details/146302476  浏览:    关键词:六安网站建设费用_北京网站设计 培训_上海谷歌seo推广公司_东莞网站建设排名
六安网站建设费用_北京网站设计 培训_上海谷歌seo推广公司_东莞网站建设排名

AI基础概念与实操

    • 一、什么是蒸馏
    • 二、如何理解Function Call、React、Prompt与Agent
      • (一)Function Call与Agent
      • (二)Agent中的React概念
      • (三)Prompt与Agent的关联
    • 实操演练
      • function call
      • prompt

一、什么是蒸馏

在知识传授或模型训练等场景中,可类比为师傅带徒弟的过程。由于人的能力有限,即便师傅能力很强,也难以将所有本领毫无保留地传授给徒弟,而且徒弟也未必能全盘接收。所以,师傅往往会将一部分技能传授给第一个徒弟,另一部分传授给第二个徒弟等。在这个过程中,徒弟学习技能的阶段就被称为蒸馏。

在蒸馏过程里,存在硬标签和软标签两个重要概念。师傅传授给徒弟的是一种思维方式,从技术层面讲,是向徒弟传递一些概率分布,即针对每个类别的概率分布,这一专业术语叫做软标签。而徒弟在学习过程中,基于自身理解所形成的思维方式,被称为硬标签。为了让徒弟更好地掌握技能,就需要在软硬标签之间找到一个合适的标准,然后依据这个标准反复训练,直至徒弟学成出师。
在这里插入图片描述

二、如何理解Function Call、React、Prompt与Agent

(一)Function Call与Agent

Function Call和Agent本质上都是一种设计模式。简单来说,就是向大模型抛出一个既定套路。例如在测试场景中,有bbd cucumber.Given when then这样的规则,在运行代码时,会按照从given到when再到then的顺序,依次执行对应的代码逻辑。

(二)Agent中的React概念

在Agent体系里,有一个关键的React概念,其公式为React = reason + act,即思维链加上外部工具调用。ReAct思想具有独特的作用,它能引导大模型把复杂的大问题拆解成一个个小问题,然后逐步解决。在每一步的解决过程中,模型会尝试调用外部工具来辅助。并且,模型还会依据工具返回的反馈结果,判断工具调用是否出现问题。一旦判断有问题,大模型就会重新尝试调用其他合适的工具。经过一系列这样的工具调用和问题解决步骤,最终达成设定的目标。

(三)Prompt与Agent的关联

若想赋予大模型ReAct能力,使其转变为智能Agent,在向大模型提问时,就需要使用ReAct Prompt。通过这种特定的提问方式,大模型在思考如何解决所提问题时,就能运用ReAct思想,按照思维链结合外部工具调用的模式来处理问题,从而实现更高效、智能的问题解决过程 。 推荐的prompt网站: https://smith.langchain.com/hub

实操演练

function call

import json
import os
from openai import OpenAIclient = OpenAI(api_key='XXXX',base_url="https://api.siliconflow.cn/v1"#api_key=os.getenv("deepseek"),#base_url="https://api.deepseek.com"
)
def send_messages(messages):response = client.chat.completions.create(model="Qwen/QwQ-32B",messages=messages,tools=tools,tool_choice="auto")return responsetools = [{"type": "function","function": {"name": "get_closing_price","description": "使用该工具获取指定股票的收盘价","parameters": {"type": "object","properties": {"name": {"type": "string","description": "股票名称",}},"required": ["name"]},}},
]def get_closing_price(name):if name == "青岛啤酒":return "67.92"elif name == "贵州茅台":return "1488.21"else:return "未搜到该股票"if __name__ == "__main__":messages = [{"role": "user", "content": "青岛啤酒的收盘价是多少?"}]response = send_messages(messages)messages.append(response.choices[0].message)print("回复:")print(response.choices[0].message.content)print("工具选择:")print(response.choices[0].message.tool_calls)if response.choices[0].message.tool_calls != None:tool_call = response.choices[0].message.tool_calls[0]if tool_call.function.name == "get_closing_price":arguments_dict = json.loads(tool_call.function.arguments)price = get_closing_price(arguments_dict['name'])messages.append({"role": "tool","content": price,"tool_call_id": tool_call.id})print("messages: ",messages)response = send_messages(messages)print("回复:")print(response.choices[0].message.content)

最终的运行结果是:

青岛啤酒的最新收盘价是67.92元

说明是调用自己的工具返回的结果

prompt

首先目录结构如下:
在这里插入图片描述
llm:

from openai import OpenAIclient = OpenAI(api_key='',base_url="https://api.deepseek.com"
)

prompt:

REACT_PROMPT = """
{instructions}TOOLS:
------You are an expert in strictly following a tool - first approach. Always exhaust all relevant tools before providing a final answer. You have access to the following powerful tools:{tools}To use a tool, you must use the following precise format when first get the questions from user:Thought: Analyze the input query. Based on its nature, determine if a tool can enhance the answer. Yes, as [briefly explain the connection between the query and the tool].
Action: the action to take, which must be one of [{tool_names}]
Action Input: the input to the action, provided in a JSON - like format that adheres to the tool's parameter requirementsWhen you are certain that no more tools are required and you are ready to provide a response to the user, you MUST use the following format:Thought: After thorough analysis and utilization of relevant tools, I have gathered all necessary information.
Final Answer: [your comprehensive response here]

tools:

# 定义与测试领域及相关概念相关的工具列表
tools = [{"name": "get_precise_test_info","description": "使用该工具获取精准测试的相关信息,精准测试是一种聚焦于软件变更影响范围,通过分析代码依赖、变更数据等,精准定位需要测试的模块和用例,以提高测试效率和覆盖率的测试方法。","parameters": {"type": "object","properties": {"query": {"type": "string","description": "关于精准测试的具体查询内容,如精准测试的流程、优势等"}},"required": ["query"]}},{"name": "get_defensive_programming_info","description": "使用该工具获取防御式编程的相关信息,防御式编程是一种编程范式,它强调在编写代码时预测可能出现的错误和异常情况,并采取相应的措施来避免程序崩溃或产生不可预期的结果。","parameters": {"type": "object","properties": {"query": {"type": "string","description": "关于防御式编程的具体查询内容,如防御式编程的技巧、应用场景等"}},"required": ["query"]}},{"name": "check_precise_test_coverage","description": "使用该工具检查精准测试对代码的覆盖情况,了解精准测试是否有效地覆盖了软件变更所影响的代码区域。","parameters": {"type": "object","properties": {"project_name": {"type": "string","description": "要检查精准测试覆盖率的项目名称"}},"required": ["project_name"]}},{"name": "verify_defensive_programming_usage","description": "使用该工具验证代码中防御式编程的使用情况,判断代码是否采用了合理的防御式编程策略来增强健壮性。","parameters": {"type": "object","properties": {"code_path": {"type": "string","description": "要验证防御式编程使用情况的代码文件路径"}},"required": ["code_path"]}}
]# 精准测试相关信息字典
precise_test_info_dict = {"流程": "精准测试流程通常包括变更分析、测试用例筛选、执行测试和结果评估等步骤。","优势": "精准测试的优势在于提高测试效率、降低测试成本,能快速定位变更影响范围,提升测试覆盖率。",
"精准测试的流程和优势":"精准测试的优势在于提高测试效率、降低测试成本,能快速定位变更影响范围,提升测试覆盖率。"
}# 防御式编程相关信息字典
defensive_programming_info_dict = {"技巧": "防御式编程的技巧有输入验证、边界检查、异常处理等。","应用场景": "防御式编程适用于对可靠性要求较高的系统,如金融系统、航空航天系统等。"
}# 模拟精准测试覆盖率数据
precise_test_coverage_data = {"projectA": "80%","projectB": "60%"
}# 模拟防御式编程使用验证结果
defensive_programming_usage_data = {"path/to/code1.py": "采用了合理的防御式编程策略","path/to/code2.py": "部分使用了防御式编程,但仍有改进空间"
}# 获取精准测试相关信息的函数
def get_precise_test_info(query):return precise_test_info_dict.get(query, "未找到相关精准测试信息")# 获取防御式编程相关信息的函数
def get_defensive_programming_info(query):return defensive_programming_info_dict.get(query, "未找到相关防御式编程信息")# 检查精准测试覆盖率的函数
def check_precise_test_coverage(project_name):return precise_test_coverage_data.get(project_name, "未找到该项目的精准测试覆盖率信息")# 验证防御式编程使用情况的函数
def verify_defensive_programming_usage(code_path):return defensive_programming_usage_data.get(code_path, "未找到该代码路径的防御式编程使用信息")

agent

import json
from llm import client
from prompt import REACT_PROMPT
from tools import tools, get_precise_test_info, get_defensive_programming_info, check_precise_test_coverage, \verify_defensive_programming_usage
import redef send_messages(messages):response = client.chat.completions.create(# model="Qwen/QwQ-32B",model="deepseek-chat",messages=messages,)return responseif __name__ == "__main__":instructions = "你是一个测试专家,可以回答测试领域的相关问题"query = "什么是防御式编程"prompt = REACT_PROMPT.format(instructions=instructions, tools=tools,tool_names="get_precise_test_info,get_defensive_programming_info,check_precise_test_coverage,verify_defensive_programming_usage",input=query)messages = [{"role": "user", "content": prompt}]while True:response = send_messages(messages)response_text = response.choices[0].message.contentprint("大模型的回复:")print(response_text)final_answer_match = re.search(r'Final Answer:\s*(.*)', response_text)if final_answer_match:breakmessages.append(response.choices[0].message)action_match = re.search(r'Action:\s*(\w+)', response_text)action_input_match = re.search(r'Action Input:\s*({.*?}|".*?")', response_text, re.DOTALL)if action_match and action_input_match:tool_name = action_match.group(1)params = json.loads(action_input_match.group(1))if tool_name == "get_precise_test_info":observation = get_precise_test_info(params['query'])elif tool_name == "get_defensive_programming_info":observation = get_defensive_programming_info(params['query'])elif tool_name == "check_precise_test_coverage":observation = check_precise_test_coverage(params['project_name'])elif tool_name == "verify_defensive_programming_usage":observation = verify_defensive_programming_usage(params['code_path'])print("人类的回复:Observation:", observation)messages.append({"role": "user", "content": f"Observation: {observation}"})

最后输出的结果是:

大模型的回复:Thought: Analyze the input query. Based on its nature, determine if a tool can enhance the answer. Yes, as the user is asking about the process and advantages of precise testing, which directly relates to the tool that provides information on precise testing.
Action: get_precise_test_info
Action Input: {"query": "精准测试的流程和优势"}人类的回复:Observation: 精准测试的优势在于提高测试效率、降低测试成本,能快速定位变更影响范围,提升测试覆盖率。
大模型的回复:Thought: After thorough analysis and utilization of relevant tools, I have gathered all necessary information.
Final Answer: 精准测试的优势主要包括以下几点:
1. **提高测试效率**:通过精准定位变更影响范围,减少不必要的测试用例执行,从而加快测试速度。
2. **降低测试成本**:减少冗余测试,优化资源利用,降低测试过程中的人力、时间和设备成本。
3. **快速定位变更影响范围**:通过分析代码依赖和变更数据,精准识别受影响的模块和功能,确保测试重点明确。
4. **提升测试覆盖率**:确保测试覆盖所有受影响的代码区域,避免遗漏关键测试点,从而提高软件质量。这些优势使得精准测试在现代软件开发中成为一种高效且可靠的测试方法。

可以看出大模型按照react prompt ,按照思维链,寻找对应工具,最后输出结果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com