dify-随笔
提示词:
角色扮演 (Role-Playing):给 LLM 一个明确的角色,例如“你是一位资深的财务分析师”或“你是一个幽默风趣的旅游向导”。
上下文 (Context):熟练运用
{{query}}
(用户问题)和{{#context#}}
(知识库检索内容)这两个核心变量。你的主要任务就是围绕这两个变量设计指令。指令清晰化:使用明确、无歧义的动词,如“总结”、“分析”、“提取”、“翻译”等。
输出格式约束:要求模型以特定格式输出,如 JSON、Markdown、列表等。这在需要与其他工具(如代码)联动时至关重要。比赛技巧:稳定的结构化输出是应用稳定性的保证。
思维链 (Chain-of-Thought):引导模型“一步一步思考”,先分析问题,再进行总结,最后给出答案。这能提高复杂问题的回答质量。
JSON设置
- 将字符串转义为 object
import json
def main(arg1: str) -> object:
try:
# Parse the input JSON string
input_data = json.loads(arg1)
# Extract the memory object
memory = input_data.get("memory", {})
# Construct the return object
result = {
"facts": memory.get("facts", []),
"preferences": memory.get("preferences", []),
"memories": memory.get("memories", [])
}
return {
"mem": result
}
except json.JSONDecodeError:
return {
"result": "Error: Invalid JSON string"
}
except Exception as e:
return {
"result": f"Error: {str(e)}"
}
2.将 object 转义为字符串
import json
def main(arg1: list) -> str:
try:
# Assume arg1[0] is the dictionary we need to process
context = arg1[0] if arg1 else {}
# Construct the memory object
memory = {"memory": context}
# Convert the object to a JSON string
json_str = json.dumps(memory, ensure_ascii=False, indent=2)
# Wrap the JSON string in <answer> tags
result = f"<answer>{json_str}</answer>"
return {
"result": result
}
except Exception as e:
return {
"result": f"<answer>Error: {str(e)}</answer>"
}
# -*- coding: utf-8 -*- import pandas as pd import iodef main(arg1: str):"""此函数接收一个Markdown格式的表格字符串,进行以下处理:1. 解析Markdown表格字符串,将其转换为pandas DataFrame。2. 清洗数据,并将涉案金额(MONEY0)列转为数值类型。3. 计算案件总数、总金额以及涉案金额超过10万元的案件数量。4. 将分析结果格式化为一段文本,并按要求以字典形式返回。:param arg1: 从上游节点传入的Markdown表格字符串。:return: 一个包含分析结果字符串的字典。"""# --- 1. 解析Markdown表格字符串 ---# 按行分割输入字符串lines = arg1.strip().split('\\n')# 跳过空行或无效行,找到包含'|'的行table_lines = [line for line in lines if '|' in line]# 如果找不到有效的表格行,则返回错误信息if len(table_lines) < 2:return {"result": "错误:未在输入中找到有效的Markdown表格数据。"}# 第一行是表头。通过'|'分割,去除首尾空元素,并清理每个标题的空格header = [h.strip() for h in table_lines[0].split('|') if h.strip()]# 从第三行开始是数据行 (跳过表头和'---'分隔线)data_rows = []for line in table_lines[2:]:# 分割数据行,并清理每个单元格的空格row = [cell.strip() for cell in line.split('|')]# 去除因首尾'|'产生的空字符串cleaned_row = row[1:-1]# 确保行数据和表头列数匹配if len(cleaned_row) == len(header):data_rows.append(cleaned_row)# --- 2. 创建DataFrame并进行数据处理 ---df = pd.DataFrame(data_rows, columns=header)# 清理列名(以防万一有额外空格)df.columns = df.columns.str.strip()# 关键步骤:将涉案金额 'MONEY0' 列转换为数值类型# errors='coerce' 会将无法转换的值设为NaN,fillna(0)则将其替换为0if 'MONEY0' in df.columns:df['MONEY0'] = pd.to_numeric(df['MONEY0'], errors='coerce').fillna(0)else:return {"result": "错误:找不到 'MONEY0' 列。"}# --- 3. 执行分析计算 ---amount_threshold = 100000# 筛选金额大于阈值的案件cases_over_threshold_df = df[df['MONEY0'] > amount_threshold]count_over_threshold = len(cases_over_threshold_df)# 计算总计信息total_amount = df['MONEY0'].sum()total_cases = len(df)# --- 4. 格式化输出结果 ---# 使用f-string格式化数字,使其更易读(例如添加千位分隔符)result_summary = (f"分析报告概要:\n"f"1. 案件总数: {total_cases} 起\n"f"2. 涉案总金额: {total_amount:,.2f} 元\n"f"3. 涉案金额超过 {amount_threshold:,} 元的案件数量: {count_over_threshold} 起")print(result_summary)# --- 5. 按节点要求返回字典 ---return {"result": result_summary}if __name__ == "__main__":try:with open("case.txt", "r", encoding="utf-8") as f:content = f.read()main(content)except KeyboardInterrupt:print("程序被用户手动中断。")