Datawhale 组队学习😁wow-agent😍task01 openai库搭建Al Agent
Datawhale 组队学习 wow-agent
Datawhale项目链接:https://www.datawhale.cn/learn/summary/86
笔记作者:博客园-岁月月宝贝💫
微信名:有你在就不需要🔮给的勇气
项目总目标:用openai库、llama-index、zigent、metagpt搭建可嵌入到一般生产环境中的AI Agent。
意义:实现了代码行数和依赖库数量之间的均衡最小值,最简易的方式在本地搭建AI Agent。
🐍项目源起:
wow-agent是自塾(zishu.co)出品的第三个开源项目。自塾在2024年出品了三个开源项目,分别是:
https://github.com/datawhalechina/wow-fullstack
https://github.com/datawhalechina/wow-rag
https://github.com/datawhalechina/wow-agent
1.Agent基础入门
什么是Agent(LLM总结自《New whitepaper Agents》):
Agent为何诞生?——LLMs有强大的语言理解和生成能力,却又存在局限性,它们无法与外界互动(所以也无法执行实际操作),知识局限于训练数据(无法获取实时信息和外部知识库),限制了其应用范围。所以我们为什么不将LLMs与工具和编排层相结合(+允许其利用工具与外界交互),构建一个根据目标进行自主决策和行动的智能体?
Agents的核心组件
解释\组件 | 模型 | 工具 | 编排层 |
---|---|---|---|
角色 | Agent的“大脑”,负责理解用户输入,进行推理和规划,并选择合适的工具进行执行。 | Agent与外界交互的“桥梁”,允许Agent访问外部数据和服务,执行各种任务。 | 负责管理Agent的内部状态,协调模型和工具的使用,并根据目标指导Agent的行动。 |
类型 | 常用的模型包括ReAct、Chain-of-Thought、Tree-of-Thought等,它们提供不同的推理框架,帮助Agent进行多轮交互和决策。 | 工具可以是各种API,例如数据库查询、搜索引擎、代码执行器、邮件发送器等。 | 可以使用各种推理框架,例如ReAct、Chain-of-Thought等,帮助Agent进行规划u和决策。 |
重要性 | 模型是Agent的核心,其推理能力决定了Agent的行动效率和准确性。 | 工具扩展了Agent的能力,使其能够执行更复杂的任务。 | 编排层是Agent的“指挥中心”,负责协调各个组件,确保Agent的行动符合目标。 |
Agent的运作过程: Agent接收用户输入➡模型理解用户的意图➡模型推理规划(根据用户输入和当前状态)➡模型选择工具➡Agent使用工具执行行动➡Agent获取工具执行结果➡Agent将结果输出给用户(或进行下一步行动) |
Agents的应用
Agents的开发工具
Agents的未来
😊Agents是生成式AI模型的进阶形态,它们能够利用工具与外界交互,并根据目标进行自主决策和行动,具有更广泛的应用范围和更强大的能力。
2.调用智能体必备
下面我们就开始自制agent啦!
先提供一个网址,先让大家试玩下:langgptai/LangGPT: LangGPT: Empowering everyone to become a prompt expert!🚀 Structured Prompt,Language of GPT, 结构化提示词,结构化Prompt
下表都是网址里已经制好的agent😭(点击直接开玩)!
GPTs | 点击开玩 | 介绍 |
---|---|---|
LangGPT 提示词专家✍️ | 点击开玩 | 结构化提示词 GPTs 全量官方版本!🎯📚 简单一键,即可生成有条理的提示词,提升你的写作和创作效率!🔍✨ |
PromptGPT✍️ | 点击开玩 | 结构化提示词lite版,年薪百万的大厂提示词工程师帮你写高质量提示词,快上车体验驾驭大模型的爽感! |
SmartGPT-5🧠 | 点击开玩 | 永不变懒,聪明勤奋的GPT!提前体验 GPT-5 的爽感! |
中文演讲标题大师🌈 | 点击开玩 | 想要完美的中文演讲标题?演讲标题大师来帮忙!🚀 提供10个精准、吸引人的标题,让您的演讲内容大放异彩!🌈! |
MathGPT🏅 | 点击开玩 | 解题能力又强又准的数学专家!🤓📚 将问题转化为方程并解决它们。你的数学伙伴来帮你做作业!🏅✏️! |
PPT Maker🎨 | 点击开玩 | PPT大师,帮你制作有内容的 PPT 🚀 它浏览网页以获取内容,概述您的PPT,并使用前沿内容填充幻灯片。🖥️✨ |
WriteGPT✍️ | 点击开玩 | WriteGPT:专业写作专家!📝🚀 专业为任何行业制作高质量的文书。📈📚 |
LogoGPT🎨 | 点击开玩 | 使用LogoGPT创建漂亮的Logo!🖌️ |
Data Table GPT📊 | 点击开玩 | 复制并粘贴您的杂乱数据!将杂乱的数据转换为整洁的数据表。📁✨ |
Coding Expert👨💻 | 点击开玩 | 编程专家,轻松解决你的所有编码难题!🛠️💻! |
PDF Reader🧐 | 点击开玩 | PDF阅读器:深入文档!帮助你结构化高效阅读文档。📋👁️! |
Research Paper Reading📚 | 点击开玩 | 研究论文阅读助手:遵循阅读三步法来帮助你掌握学术论文。️📈📚! |
EmojiGPT🌈 | 点击开玩 | 将文本转换为表情符号艺术!💌💥! |
Travel Planning📅 | 点击开玩 | 旅行规划助理:您的旅程设计师!为您量身定制的个性化行程,让您的每一次旅行都令人难忘。️🌍🗺️🏖️! |
Picture Creator🎨 | 点击开玩 | 漂亮手办娃娃生成:释放你的想象力!为风格化的图像生成详细的、很酷的提示。🔥👾! |
LinuxGPT🐧 | 点击开玩 | LinuxGPT:释放Linux的力量!专注于bash脚本和命令行操作。提升您的linux技术!🚀👨💻! |
PytorchGPT🔥 | 点击开玩 | PytorchGPT:你的PyTorch代码耳语者!🤖🔥 熟练地制作和解释PyTorch模型代码,从简单的网络到复杂的架构。🧠💻! |
🎀翻译大小姐 | 点击开玩 | 来自刚哥的信达雅翻译,年薪百万的翻译小姐姐为你打工!最棒的中文翻译,信达雅,超级地道优雅的中文表达! |
时事热评员🎙️ | 点击开玩 | 热评员:意见领袖!🎤💡 为您的主题提供深刻见解和热评,帮助您洞察核心价值!🌐🔖 |
AI算法工程师 | 点击开玩 | AI 设计 AI |
StableAudioGPT | 点击开玩 | Stable Audio 提示词生成 |
🛠️AutoGPT(coding) | 点击开玩 | AutoGPT👨💻,自动运行📈,输出超长,一键完成项目框架构建!🖲️ |
大家玩好后,我们继续讲!
1.调用国内大模型必备知识
国内API服务建议:智谱、零一万物、月之暗面、deepseek等大厂的LLM
①url&模型
国内模型 | url&模型 |
---|---|
智谱 | base_url = "https://open.bigmodel.cn/api/paas/v4/" chat_model = "glm-4-flash" |
阿里的千问 | base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1" chat_model = "qwen-plus" |
自塾 | base_url = "http://43.200.7.56:8008/v1" chat_model = "glm-4-flash" |
②api_key
在项目的根目录新建一个txt文件,里面填入一行字符串:ZHIPU_API_KEY = 你的api_key
,把文件名改成.env。
(本项目api_key为自塾免费提供,直接取datawhalechina/wow-agent: A simple and trans-platform agent framework and tutorial的.env的文件即可)
⚓假设大家前面三样均准备好了:
下面是一个调用自塾API的例子:
import os from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 从环境变量中读取api_key api_key = os.getenv('ZISHU_API_KEY') base_url = "http://43.200.7.56:8008/v1" chat_model = "glm-4-flash"
2.构造client
构造client只需要两个东西:api_key和base_url。
from openai import OpenAI client = OpenAI( api_key = api_key, base_url = base_url )
有了这个client,我们就可以去实现各种能力了。
def get_completion(prompt): response = client.chat.completions.create( model="glm-4-flash", # 填写需要调用的模型名称 messages=[ {"role": "user", "content": prompt}, ], ) return response.choices[0].message.content
先试试这个大模型是否可用:
response = get_completion("你是谁?") print(response)
我是一个人工智能助手,专门设计来帮助用户解答问题、提供信息以及执行各种任务。我的目标是成为您生活中的助手,帮助您更高效地获取所需信息。有什么我可以帮您的吗?
到这一步说明大模型可用。如果得不到这个回答,就说明大模型不可用,不要往下进行,要先去搞定一个可用的大模型。
3.跟LangGPT学prompt工程
通过DW前两期冬令营知识,我们知道了“智能体需要大量的prompt工程”。下面,我们通过学习上面大家玩过的仓库对应的著名“LangGPT”,来学习下agent可以接受的“prompt工程”。
😜首先,告诉大家一个好消息,现已有各种各样优质的模板(控制内容的组织呈现形式),能帮助你把 Prompt 写的更轻松、性能更好!这也叫【结构化Prompt】。
💗标题:
文章标题、段落标题
基于语法:markdown、 json、yaml等。
意义:使用标题可以方便的引用角色内容,设置和更改角色属性。
💗角色模板:
将 prompt 抽象为一个角色 (Role),包含名字,描述,技能,工作方法等描述
类比:面向对象编程中的类申明
*除了变量和模板外,LangGPT 还提供了命令,记忆器,条件句等语法设置方法。
💗标识符:
#
:标识标题
<>
:标识变量
其他:-, []
意义:聚拢相同语义,标识层次结构,便于模型理解 prompt 语义。
💗属性词:
Role, Profile, Initialization 等,包含语义
意义:实现了对 prompt 内容的语义提示和归纳作用,缓解了 prompt 中不当内容的干扰。另外,使用属性词与 prompt 内容相结合,实现了局部的总分结构,便于模型提纲挈领的获得 prompt 整体语义。
💗分隔符:
三重引号、XML标记、节标题等
意义:标示需要以不同方式处理的文本部分。
💗全局思维链:
构建 Prompt 时,不妨参考优质模板的全局思维链。熟练掌握后,再对其进行增删改留调整。例如需要需要格式化输出可增加 Ouput 或者 OutputFormat 模块。
一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。
LangGPT 中的模板设计考虑的思维链:
Role (角色)➡Profile(角色简介)➡Profile 下的 skill (角色技能)➡Rules (角色要遵守的规则)➡Workflow (满足上述条件的角色的工作流程)➡Initialization (进行正式开始工作的初始化准备) ➡ 开始实际使用
💗上下文语义一致性
- 格式语义一致性是指标识符的标识功能前后一致。比如 # 既用于标识标题,又用于标识变量这种行为就造成了前后不一致,这会对模型识别 Prompt 的层级结构造成干扰。
- 内容语义一致性是指思维链路上的属性词语义合适。 例如 LangGPT 中的 Profile 属性词,原来是 Features,但实践+思考发现更换为Profile功能更加明确:即角色的简历。内容语义一致性还包括属性词和相应模块内容的语义一致。 例如 Rules 部分是角色需要遵守的规则,则不宜将角色技能、描述大量堆砌在此。
🌃LangGPT 中的 Role (角色)模板👇
Role: Your_Role_Name
Profile
- Author: YZFly
- Version: 0.1
- Language: English or 中文 or Other language
- Description: Describe your role. Give an overview of the character's characteristics and skills
Skill-1
1.技能描述1 2.技能描述2
Skill-2
1.技能描述1 2.技能描述2
Rules
- Don't break character under any circumstance.
- Don't talk nonsense and make up facts.
Workflow
- First, xxx
- Then, xxx
- Finally, xxx
Initialization
As a/an < Role >, you must follow the < Rules >, you must talk to user in default < Language >,you must greet the user. Then introduce yourself and introduce the < Workflow >.

😚Prompt Chain(就是上面的思维链啦!) 将原有需求分解,通过用多个小的 Prompt 来串联/并联,共同解决一项复杂任务。
用多个小的 Prompt 来串联/并联也叫“Prompts 协同”,协同的其他方法还有提示树 Prompt Tree,通过自顶向下的设计思想,不断拆解子任务,构成任务树(理解成“任务根”感觉更好些~),得到多种模型输出,并将这多种输出通过自定义规则(排列组合、筛选、集成等)操作得到最终结果。
4.客服智能体prompt设计
让我们为本课的智能体定义各种prompt~
sys_prompt = """你是一个聪明的客服。您将能够根据用户的问题将不同的任务分配给不同的人。您有以下业务线: 1.用户注册。如果用户想要执行这样的操作,您应该发送一个带有"registered workers"的特殊令牌。并告诉用户您正在调用它。 2.用户数据查询。如果用户想要执行这样的操作,您应该发送一个带有"query workers"的特殊令牌。并告诉用户您正在调用它。 3.删除用户数据。如果用户想执行这种类型的操作,您应该发送一个带有"delete workers"的特殊令牌。并告诉用户您正在调用它。 """ registered_prompt = """ 您的任务是根据用户信息存储数据。您需要从用户那里获得以下信息: 1.用户名、性别、年龄 2.用户设置的密码 3.用户的电子邮件地址 如果用户没有提供此信息,您需要提示用户提供。如果用户提供了此信息,则需要将此信息存储在数据库中,并告诉用户注册成功。 存储方法是使用SQL语句。您可以使用SQL编写插入语句,并且需要生成用户ID并将其返回给用户。 如果用户没有新问题,您应该回复带有 "customer service" 的特殊令牌,以结束任务。 """ query_prompt = """ 您的任务是查询用户信息。您需要从用户那里获得以下信息: 1.用户ID 2.用户设置的密码 如果用户没有提供此信息,则需要提示用户提供。如果用户提供了此信息,那么需要查询数据库。如果用户ID和密码匹配,则需要返回用户的信息。 如果用户没有新问题,您应该回复带有 "customer service" 的特殊令牌,以结束任务。 """ delete_prompt = """ 您的任务是删除用户信息。您需要从用户那里获得以下信息: 1.用户ID 2.用户设置的密码 3.用户的电子邮件地址 如果用户没有提供此信息,则需要提示用户提供该信息。 如果用户提供了这些信息,则需要查询数据库。如果用户ID和密码匹配,您需要通知用户验证码已发送到他们的电子邮件,需要进行验证。 如果用户没有新问题,您应该回复带有 "customer service" 的特殊令牌,以结束任务。 """
定义一个智能客服智能体。
class SmartAssistant: def __init__(self): self.client = client self.system_prompt = sys_prompt self.registered_prompt = registered_prompt self.query_prompt = query_prompt self.delete_prompt = delete_prompt # Using a dictionary to store different sets of messages self.messages = { "system": [{"role": "system", "content": self.system_prompt}], "registered": [{"role": "system", "content": self.registered_prompt}], "query": [{"role": "system", "content": self.query_prompt}], "delete": [{"role": "system", "content": self.delete_prompt}] } # Current assignment for handling messages self.current_assignment = "system" def get_response(self, user_input): self.messages[self.current_assignment].append({"role": "user", "content": user_input}) while True: response = self.client.chat.completions.create( model=chat_model, messages=self.messages[self.current_assignment], temperature=0.9, stream=False, max_tokens=2000, ) ai_response = response.choices[0].message.content if "registered workers" in ai_response: self.current_assignment = "registered" print("意图识别:",ai_response) print("switch to <registered>") self.messages[self.current_assignment].append({"role": "user", "content": user_input}) elif "query workers" in ai_response: self.current_assignment = "query" print("意图识别:",ai_response) print("switch to <query>") self.messages[self.current_assignment].append({"role": "user", "content": user_input}) elif "delete workers" in ai_response: self.current_assignment = "delete" print("意图识别:",ai_response) print("switch to <delete>") self.messages[self.current_assignment].append({"role": "user", "content": user_input}) elif "customer service" in ai_response: print("意图识别:",ai_response) print("switch to <customer service>") self.messages["system"] += self.messages[self.current_assignment] self.current_assignment = "system" return ai_response else: self.messages[self.current_assignment].append({"role": "assistant", "content": ai_response}) return ai_response def start_conversation(self): while True: user_input = input("User: ") if user_input.lower() in ['exit', 'quit']: print("Exiting conversation.") break response = self.get_response(user_input) print("Assistant:", response)
来运用一下这个Agent。
assistant = SmartAssistant() assistant.start_conversation()
输出如下:
Assistant: 您好,liwei。请问有什么可以帮助您的吗?如果您需要注册、查询或删除用户数据,请告诉我具体的需求,我将根据您的需求调用相应的业务线。
意图识别: 要查看您的账户信息,我需要调用用户数据查询的服务。请稍等,我将发送一个带有"query workers"的特殊令牌以执行这个操作。<|assistant|>query workers
switch to
Assistant: 为了查看您的账户信息,请提供以下信息:
- 您的用户ID
- 您设置的密码
如果这些信息不全,请补充完整,以便我能够查询数据库并返回您的账户信息。如果您不需要查询账户信息,或者有其他问题,请告诉我。
Assistant: 您已提供了用户ID。为了完成查询,请提供您设置的密码。
意图识别: 用户ID 1001 和密码 123456 匹配。以下是您的账户信息:
- 用户ID:1001
- 用户名:JohnDoe
- 邮箱地址:johndoe@example.com
- 注册日期:2021-01-01
- 余额:$500.00
如果您需要进一步的帮助或有其他问题,请告诉我。如果已经处理完您的问题,您可以直接回复 "customer service" 来结束任务。
switch to
Assistant: 用户ID 1001 和密码 123456 匹配。以下是您的账户信息:
- 用户ID:1001
- 用户名:JohnDoe
- 邮箱地址:johndoe@example.com
- 注册日期:2021-01-01
- 余额:$500.00
如果您需要进一步的帮助或有其他问题,请告诉我。如果已经处理完您的问题,您可以直接回复 "customer service" 来结束任务。
Assistant: 抱歉,您提供的密码与我们的系统记录不匹配。请确认您提供的密码是否正确,或者如果您需要帮助重置密码,请告诉我。
意图识别: customer service
switch to
Assistant: customer service
Exiting conversation.
我想可能因为目前我没有配置后端,所以LLM与我的对话是这样的,输入OK,但是生成用户ID与查询/修改不OK:
但是尽管只是调用成功,已经真的很开心了😭(第一次用pycharm跑大项目,以前基本都用的是jupyter)
补充:前面加上
# 加载环境变量 load_dotenv() # 从环境变量中读取api_key api_key = os.getenv('ZISHU_API_KEY') base_url = "http://43.200.7.56:8008/v1" chat_model = "glm-4-flash" from openai import OpenAI client = OpenAI( api_key = api_key, base_url = base_url )
就可以运行成功啦!👍
5.阅卷智能体prompt设计
我们接下来实现一个阅卷智能体,只依赖openai库。
import json import re def extract_json_content(text): # 这个函数的目标是提取大模型输出内容中的json部分,并对json中的换行符、首位空白符进行删除 text = text.replace("\n","") pattern = r"```json(.*?)```" matches = re.findall(pattern, text, re.DOTALL) if matches: return matches[0].strip() return text class JsonOutputParser: def parse(self, result): # 这个函数的目标是把json字符串解析成python对象 # 其实这里写的这个函数性能很差,经常解析失败,有很大的优化空间 try: result = extract_json_content(result) parsed_result = json.loads(result) return parsed_result except json.JSONDecodeError as e: raise Exception(f"Invalid json output: {result}") from e class GradingOpenAI: def __init__(self): self.model = "glm-4-flash" self.output_parser = JsonOutputParser() self.template = """你是一位中国专利代理师考试阅卷专家, 擅长根据给定的题目和答案为考生生成符合要求的评分和中文评语, 并按照特定的格式输出。 你的任务是,根据我输入的考题和答案,针对考生的作答生成评分和中文的评语,并以JSON格式返回。 阅卷标准适当宽松一些,只要考生回答出基本的意思就应当给分。 答案如果有数字标注,含义是考生如果答出这个知识点,这道题就会得到几分。 生成的中文评语需要能够被json.loads()这个函数正确解析。 生成的整个中文评语需要用英文的双引号包裹,在被包裹的字符串内部,请用中文的双引号。 中文评语中不可以出现换行符、转义字符等等。 输出格式为JSON: {{ "llmgetscore": 0, "llmcomments": "中文评语" }} 比较学生的回答与正确答案, 并给出满分为10分的评分和中文评语。 题目:{ques_title} 答案:{answer} 学生的回复:{reply}""" def create_prompt(self, ques_title, answer, reply): return self.template.format( ques_title=ques_title, answer=answer, reply=reply ) def grade_answer(self, ques_title, answer, reply): success = False while not success: # 这里是一个不得已的权宜之计 # 上面的json解析函数不是表现很差吗,那就多生成几遍,直到解析成功 # 对大模型生成的内容先解析一下,如果解析失败,就再让大模型生成一遍 try: response = client.chat.completions.create( model=self.model, messages=[ {"role": "system", "content": "你是一位专业的考试阅卷专家。"}, {"role": "user", "content": self.create_prompt(ques_title, answer, reply)} ], temperature=0.7 ) result = self.output_parser.parse(response.choices[0].message.content) success = True except Exception as e: print(f"Error occurred: {e}") continue return result['llmgetscore'], result['llmcomments'] def run(self, input_data): output = [] for item in input_data: score, comment = self.grade_answer( item['ques_title'], item['answer'], item['reply'] ) item['llmgetscore'] = score item['llmcomments'] = comment output.append(item) return output grading_openai = GradingOpenAI()
我们可以用一个示例来测试一下:
已知有两个简答题,有题目、答案、分值和考生作答。我们需要让大模型生成评分和评价。
# 示例输入数据 input_data = [ {'ques_title': '请解释共有技术特征、区别技术特征、附加技术特征、必要技术特征的含义', 'answer': '共有技术特征:与最接近的现有技术共有的技术特征(2.5分); 区别技术特征:区别于最接近的现有技术的技术特征(2.5分); 附加技术特征:对所引用的技术特征进一步限定的技术特征,增加的技术特征(2.5分); 必要技术特征:为解决其技术问题所不可缺少的技术特征(2.5分)。', 'fullscore': 10, 'reply': '共有技术特征:与所对比的技术方案相同的技术特征\n区别技术特征:与所对比的技术方案相区别的技术特征\n附加技术特征:对引用的技术特征进一步限定的技术特征\n必要技术特征:解决技术问题必须可少的技术特征'}, {'ques_title': '请解释前序部分、特征部分、引用部分、限定部分', 'answer': '前序部分:独权中,主题+与最接近的现有技术共有的技术特征,在其特征在于之前(2.5分); 特征部分:独权中,与区别于最接近的现有技术的技术特征,在其特征在于之后(2.5分);引用部分:从权中引用的权利要求编号及主题 (2.5分);限定部分:从权中附加技术特征(2.5分)。', 'fullscore': 10, 'reply': '前序部分:独立权利要求中与现有技术相同的技术特征\n特征部分:独立权利要求中区别于现有技术的技术特征\n引用部分:从属权利要求中引用其他权利要求的部分\n限定部分:对所引用的权利要求进一步限定的技术特征'}]
我感觉“fullscore”这个属性输入时(并给出满分为10分的评分和中文评语。
题目:{ques_title}
答案:{answer}
学生的回复:{reply})没有加,现在给大模型时又加上了,不是很一致。
这个示例是根据中国专利法出的两个考题。我们让大模型来阅卷。
# 运行智能体 graded_data = grading_openai.run(input_data) print(graded_data)
下面是大模型给出的阅卷结果(注意reply是学生给的回答):
[{'ques_title': '请解释共有技术特征、区别技术特征、附加技术特征、必要技术特征的含义',
'answer': '共有技术特征:与最接近的现有技术共有的技术特征(2.5分); 区别技术特征:区别于最接近的现有技术的技术特征(2.5分); 附加技术特征:对所引用的技术特征进一步限定的技术特征,增加的技术特征(2.5分); 必要技术特征:为解决其技术问题所不可缺少的技术特征(2.5分)。',
'fullscore': 10,
'reply': '共有技术特征:与所对比的技术方案相同的技术特征\n区别技术特征:与所对比的技术方案相区别的技术特征\n附加技术特征:对引用的技术特征进一步限定的技术特征\n必要技术特征:解决技术问题必须可少的技术特征',
'llmgetscore': 10,
'llmcomments': '考生对共有技术特征、区别技术特征、附加技术特征和必要技术特征的解释基本正确,能够准确描述其含义,故给予满分10分。'},
{'ques_title': '请解释前序部分、特征部分、引用部分、限定部分',
'answer': '前序部分:独权中,主题+与最接近的现有技术共有的技术特征,在其特征在于之前(2.5分); 特征部分:独权中,与区别于最接近的现有技术的技术特征,在其特征在于之后(2.5分);引用部分:从权中引用的权利要求编号及主题 (2.5分);限定部分:从权中附加技术特征(2.5分)。',
'fullscore': 10,
'reply': '前序部分:独立权利要求中与现有技术相同的技术特征\n特征部分:独立权利要求中区别于现有技术的技术特征\n引用部分:从属权利要求中引用其他权利要求的部分\n限定部分:对所引用的权利要求进一步限定的技术特征',
'llmgetscore': 8,
'llmcomments': '回答基本正确,对前序部分和特征部分的理解较为准确,但对引用部分和限定部分的理解略有偏差。前序部分应包含与现有技术共有的技术特征,特征部分应包含区别于现有技术的技术特征。引用部分和限定部分的解释需要更加精确。'}]
下面来看我运行LLM的表现:
[{'ques_title': '请解释共有技术特征、区别技术特征、附加技术特征、必要技术特征的含义', 'answer': '共有技术特征:与最接近的现有技术共有的技术特征(2.5分); 区别技术特征:区别于最接近的现有技术的技术特征(2.5分); 附加技术特征:对所引用的技术特征进一步限定的技术特征,增加的技术特征(2.5分); 必要技术特征:为解决其技术问题所不可缺少的技术特征(2.5分)。', 'fullscore': 10, 'reply': '共有技术特征:与所对比的技术方案相同的技术特征\n区别技术特征:与所对比的技术方案相区别的技术特征\n附加技术特征:对引用的技术特征进一步限定的技术特征\n必要技术特征:解决技术问题必须可少的技术特征', 'llmgetscore': 10, 'llmcomments': '考生对共有技术特征、区别技术特征、附加技术特征、必要技术特征的解释基本准确,能够正确理解并表述这些概念的含义,得分10分。'}, {'ques_title': '请解释前序部分、特征部分、引用部分、限定部分', 'answer': '前序部分:独权中,主题+与最接近的现有技术共有的技术特征,在其特征在于之前(2.5分); 特征部分:独权中,与区别于最接近的现有技术的技术特征,在其特征在于之后(2.5分);引用部分:从权中引用的权利要求编号及主题 (2.5分);限定部分:从权中附加技术特征(2.5分)。', 'fullscore': 10, 'reply': '前序部分:独立权利要求中与现有技术相同的技术特征\n特征部分:独立权利要求中区别于现有技术的技术特征\n引用部分:从属权利要求中引用其他权利要求的部分\n限定部分:对所引用的权利要求进一步限定的技术特征', 'llmgetscore': 8, 'llmcomments': '回答基本正确,但部分定义不够准确。前序部分应指主题+与最接近的现有技术共有的技术特征,特征部分应指与区别于最接近的现有技术的技术特征,引用部分应指从属权利要求中引用的权利要求编号及主题,限定部分应指对所引用的权利要求进一步限定的技术特征。'}]
谢谢观看!还请多多点赞推荐支持我!

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库